Ejemplo n.º 1
0
        public void TestSShape()
        {
            // data from actual bogus case:
            var tangentStart = new Vector3(1, 0, 0); // fromString3("AACAvw== AAAAgA== AAAAgA==");
            var tangentEnd   = new Vector3(1, 0, 0); // fromString3("AACAPw== AAAAgA== AAAAgA==");

            var start = new Vector3(0, 0, 2);        // fromString3("AMAuRA== AAAAAA== VVXtQg==") - new Vector3(699,0,116.6667f);
            var end   = new Vector3(0, 0, -2);       // fromString3("AMAuRA== AAAAAA== VVXlQg==") - new Vector3(699, 0, 116.6667f);

            var a = new BiArcLoftPath(start, tangentStart, end, tangentEnd);

            var p1 = a.GetTransformedPoint(a.Length / 4, Vector3.zero);
            var p2 = a.GetTransformedPoint(a.Length / 2, Vector3.zero);
            var p3 = a.GetTransformedPoint(a.Length / 4 * 3, Vector3.zero);

            var points = string.Join(" ", Enumerable.Range(0, 100).Select(i => i / 100.0f).Select(i => a.GetTransformedPoint(i * a.Length, Vector3.zero))
                                     .Select(t => "(" + t.x.ToString(CultureInfo.InvariantCulture) + "," + t.z.ToString(CultureInfo.InvariantCulture) + ")"));

            Assert.AreEqual(new Vector3(-1, 0, 1).Round(precision), p1.Round(precision));
            Assert.AreEqual(new Vector3(0, 0, 0).Round(precision), p2.Round(precision));
            Assert.AreEqual(new Vector3(1, 0, -1).Round(precision), p3.Round(precision));
        }
Ejemplo n.º 2
0
        public void TestReverseCShape()
        {
            // data from actual bogus case:
            var tangentStart = new Vector3(1, 0, 0);
            var tangentEnd   = new Vector3(-1, 0, 0);

            var start = new Vector3(0, 0, 2);
            var end   = new Vector3(0, 0, -2);

            var a = new BiArcLoftPath(start, tangentStart, end, tangentEnd);

            var p1 = a.GetTransformedPoint(a.Length / 4, Vector3.zero);
            var p2 = a.GetTransformedPoint(a.Length / 2, Vector3.zero);
            var p3 = a.GetTransformedPoint(a.Length / 4 * 3, Vector3.zero);

            var points = string.Join(" ", Enumerable.Range(0, 100).Select(i => i / 100.0f).Select(i => a.GetTransformedPoint(i * a.Length, Vector3.zero))
                                     .Select(t => "(" + t.x.ToString(CultureInfo.InvariantCulture) + "," + t.z.ToString(CultureInfo.InvariantCulture) + ")"));

            var s2 = Mathf.Sqrt(2);

            Assert.AreEqual(new Vector3(-s2, 0, s2).Round(precision), p1.Round(precision));
            Assert.AreEqual(new Vector3(-2, 0, 0).Round(precision), p2.Round(precision));
            Assert.AreEqual(new Vector3(-s2, 0, -s2).Round(precision), p3.Round(precision));
        }
Ejemplo n.º 3
0
        public void TestJShape()
        {
            var tangentStart = new Vector3(0, 0, 1);
            var tangentEnd   = new Vector3(1, 0, 0);

            var start = new Vector3(0, 0, 2);
            var end   = new Vector3(-1, 0, 0);

            var a = new BiArcLoftPath(start, tangentStart, end, tangentEnd);

            var points = string.Join(" ", Enumerable.Range(0, 100).Select(i => i / 100.0f).Select(i => a.GetTransformedPoint(i * a.Length, Vector3.zero))
                                     .Select(t => "(" + t.x.ToString(CultureInfo.InvariantCulture) + "," + t.z.ToString(CultureInfo.InvariantCulture) + ")"));
        }
Ejemplo n.º 4
0
        public void TestBiArc()
        {
            var biArc = new BiArcLoftPath(new Vector3(-1, 0, -1), new Vector3(0, 0, -1), new Vector3(1, 0, 1), new Vector3(0, 0, -1));

            var points = string.Join(" ", Enumerable.Range(0, 100).Select(i => i / 100.0f).Select(i => biArc.GetTransformedPoint(i * biArc.Length, Vector3.zero))
                                     .Select(t => "(" + t.x.ToString(CultureInfo.InvariantCulture) + "," + t.z.ToString(CultureInfo.InvariantCulture) + ")"));


            var point1 = new Vector3(-1, 0, 0);
            var point2 = new Vector3(1, 0, 0);

            biArc.SnapTo(point1, out var snapped1, out float distance1);
            biArc.SnapTo(point2, out var snapped2, out float distance2);

            var sqrt2inv = 0.70710678818f;


            //var inc = biArc.Length / 100;
            //var items = new StringBuilder();
            //for (float i = 0; i <= biArc.Length; i += inc)
            //{
            //    var v = biArc.GetTransform(i).MultiplyPoint3x4(Vector3.zero);
            //    items.AppendLine($"{v.x.ToString(CultureInfo.InvariantCulture)}, {v.z.ToString(CultureInfo.InvariantCulture)}");
            //}



            var pointExpected1 = new Vector3(-sqrt2inv, 0, sqrt2inv - 1);

            Assert.AreEqual(pointExpected1.Round(0.0001f), snapped1.Round(0.0001f));
            var pointExpected2 = new Vector3(sqrt2inv, 0, 1 - sqrt2inv);

            Assert.AreEqual(pointExpected2.Round(0.0001f), snapped2.Round(0.0001f));
        }