Esempio n. 1
0
        public void TestNegativeArc()
        {
            var arc = new ArcLoftPath(Vector3.left, -Mathf.PI / 2, Vector3.zero, Vector3.up);

            Assert.AreEqual(Mathf.PI / 2, arc.Length);
            var startTransform = arc.GetTransform(0);

            var endTransform = arc.GetTransform(arc.Length);

            var startForward = startTransform.MultiplyVector(Vector3.forward);
            var endForward   = endTransform.MultiplyVector(Vector3.forward);

            var startPosition = startTransform.MultiplyPoint3x4(Vector3.zero);
            var endPosition   = endTransform.MultiplyPoint3x4(Vector3.zero);

            Assert.AreEqual(Vector3.left, startPosition.Round(0.00001f));
            Assert.AreEqual(Vector3.back, endPosition.Round(0.00001f));

            Assert.AreEqual(Vector3.back, startForward.Round(0.00001f));
            Assert.AreEqual(Vector3.right, endForward.Round(0.00001f));

            var halfTransform = arc.GetTransform(arc.Length / 2);


            var halfForward = new Vector3(1, 0, -1).normalized;

            Assert.AreEqual(halfForward.Round(0.00001f), halfTransform.MultiplyVector(Vector3.forward).Round(0.00001f));
        }
Esempio n. 2
0
        public void TestSnapSweepBack()
        {
            var arc = new ArcLoftPath(Vector3.right, -Mathf.PI, Vector3.zero, Vector3.up);

            int   count     = 18;
            float increment = Mathf.PI / count;

            for (float i = 0; i <= Mathf.PI; i += increment)
            {
                var x = Mathf.Cos(-i);
                var z = -Mathf.Sin(-i);

                var theoreticalPoint = arc.GetTransformedPoint(i, Vector3.zero);

                var pointInside  = new Vector3(x, 0, z) * 0.5f;
                var pointAt      = new Vector3(x, 0, z);
                var pointOutside = new Vector3(x, 0, z) * 1.5f;

                Assert.AreEqual(theoreticalPoint.Round(0.0001f), pointAt.Round(0.0001f));

                arc.SnapTo(pointInside, out var snapped1, out float distance1);
                arc.SnapTo(pointAt, out var snapped2, out float distance2);
                arc.SnapTo(pointOutside, out var snapped3, out float distance3);

                Assert.AreEqual(pointAt.Round(0.001f), snapped1.Round(0.001f));
                Assert.AreEqual(pointAt.Round(0.001f), snapped2.Round(0.001f));
                Assert.AreEqual(pointAt.Round(0.001f), snapped3.Round(0.001f));
                Assert.AreEqual(i, distance1, 0.001f);
                Assert.AreEqual(i, distance2, 0.001f);
                Assert.AreEqual(i, distance3, 0.001f);
            }
        }
Esempio n. 3
0
        public void TestSnapArc180Backward()
        {
            var arc = new ArcLoftPath(Vector3.right, -Mathf.PI, Vector3.zero, Vector3.up);

            var point = new Vector3(0, 0, 2);

            arc.SnapTo(point, out var snapped, out var distance);


            var pointExpected = new Vector3(0, 0, 1);


            Assert.AreEqual(pointExpected.Round(0.0001f), snapped.Round(0.0001f));

            var l = Mathf.PI / 2;

            Assert.AreEqual(l, distance, 0.0001f);
        }
Esempio n. 4
0
        public void TestSnapArcQ4()
        {
            var arc = new ArcLoftPath(Vector3.right, Mathf.PI / 2, Vector3.zero, Vector3.up);

            var point = new Vector3(1, 0, -1);

            arc.SnapTo(point, out var snapped, out var distance);

            var sqrt2inv = 0.70710678818f;

            var pointExpected = new Vector3(sqrt2inv, 0, -sqrt2inv);


            Assert.AreEqual(pointExpected.Round(0.0001f), snapped.Round(0.0001f));

            var l = 0.785398f;

            Assert.AreEqual(l, distance, 0.0001f);
        }
Esempio n. 5
0
        public void TestSnapArcOvershoot()
        {
            var arc = new ArcLoftPath(Vector3.forward, Mathf.PI / 2, Vector3.zero, Vector3.up);


            var point = new Vector3(1, 0, -1);

            arc.SnapTo(point, out var snapped, out var distance);


            var pointExpected = new Vector3(1, 0, 0);


            Assert.AreEqual(pointExpected.Round(0.0001f), snapped.Round(0.0001f));

            var l = Mathf.PI / 2;

            Assert.AreEqual(l, distance, 0.0001f);
        }
Esempio n. 6
0
 private void IsValid(ArcLoftPath value)
 {
     Assert.IsTrue(value.Radius > 0, "radius > 0");
     Assert.IsFalse(float.IsNaN(value.Radius), "length is NaN");
     Assert.IsFalse(float.IsInfinity(value.Radius), "length is Infinity");
 }