示例#1
0
        public void MinDistanceToLineSegment()
        {
            Real expected;
            Real returned;
            V2   s;
            V2   p1, p2;

            // --- TEST ---
            // p1=p2=s=0

            s        = new V2(0.0f, 0.0f);
            p1       = new V2(0.0f, 0.0f);
            p2       = new V2(0.0f, 0.0f);
            expected = 0.0f;
            returned = s.MinDistanceToLineSegment(p1, p2);

            Assert.AreEqual(expected, returned, EPSILON);

            // --- TEST ---
            // s on p1

            s        = new V2(0.0f, 0.0f);
            p1       = new V2(0.0f, 0.0f);
            p2       = new V2(1.0f, 0.0f);
            expected = 0.0f;
            returned = s.MinDistanceToLineSegment(p1, p2);

            Assert.AreEqual(expected, returned, EPSILON);

            // --- TEST ---
            // s on p2

            s        = new V2(1.0f, 0.0f);
            p1       = new V2(0.0f, 0.0f);
            p2       = new V2(1.0f, 0.0f);
            expected = 0.0f;
            returned = s.MinDistanceToLineSegment(p1, p2);

            Assert.AreEqual(expected, returned, EPSILON);

            // --- TEST ---
            // s in mid of p1p2

            s        = new V2(0.0f, 0.5f);
            p1       = new V2(0.0f, 0.0f);
            p2       = new V2(1.0f, 0.0f);
            expected = 0.5f;
            returned = s.MinDistanceToLineSegment(p1, p2);

            Assert.AreEqual(expected, returned, EPSILON);

            // --- TEST ---
            // p1=p2

            s        = new V2(0.0f, 0.0f);
            p1       = new V2(1.0f, 0.0f);
            p2       = new V2(1.0f, 0.0f);
            expected = 1.0f;
            returned = s.MinDistanceToLineSegment(p1, p2);

            Assert.AreEqual(expected, returned, EPSILON);

            // --- TEST ---
            // s on extension p1p2, closest p2

            s        = new V2(2.0f, 0.0f);
            p1       = new V2(0.0f, 0.0f);
            p2       = new V2(1.0f, 0.0f);
            expected = 1.0f;
            returned = s.MinDistanceToLineSegment(p1, p2);

            Assert.AreEqual(expected, returned, EPSILON);

            // --- TEST ---
            // s on extension p2p1, closest p1

            s        = new V2(-1.0f, 0.0f);
            p1       = new V2(0.0f, 0.0f);
            p2       = new V2(1.0f, 0.0f);
            expected = 1.0f;
            returned = s.MinDistanceToLineSegment(p1, p2);

            Assert.AreEqual(expected, returned, EPSILON);

            // --- TEST ---
            // s perpendicular, mid p1p2 closest

            s        = new V2(0.5f, 0.5f);
            p1       = new V2(0.0f, 0.0f);
            p2       = new V2(1.0f, 0.0f);
            expected = 0.5f;
            returned = s.MinDistanceToLineSegment(p1, p2);

            Assert.AreEqual(expected, returned, EPSILON);

            // --- TEST ---
            // s perpendicular, p1 closest +

            s        = new V2(0.0f, 1.0f);
            p1       = new V2(0.0f, 0.0f);
            p2       = new V2(1.0f, 0.0f);
            expected = 1.0f;
            returned = s.MinDistanceToLineSegment(p1, p2);

            Assert.AreEqual(expected, returned, EPSILON);

            // --- TEST ---
            // s perpendicular, p1 closest -

            s        = new V2(0.0f, -1.0f);
            p1       = new V2(0.0f, 0.0f);
            p2       = new V2(1.0f, 0.0f);
            expected = 1.0f;
            returned = s.MinDistanceToLineSegment(p1, p2);

            Assert.AreEqual(expected, returned, EPSILON);

            // --- TEST ---
            // s perpendicular, p2 closest +

            s        = new V2(1.0f, 1.0f);
            p1       = new V2(0.0f, 0.0f);
            p2       = new V2(1.0f, 0.0f);
            expected = 1.0f;
            returned = s.MinDistanceToLineSegment(p1, p2);

            Assert.AreEqual(expected, returned, EPSILON);

            // --- TEST ---
            // s perpendicular, p2 closest -

            s        = new V2(1.0f, -1.0f);
            p1       = new V2(0.0f, 0.0f);
            p2       = new V2(1.0f, 0.0f);
            expected = 1.0f;
            returned = s.MinDistanceToLineSegment(p1, p2);

            Assert.AreEqual(expected, returned, EPSILON);

            // --- TEST ---
            // s 45° to p2 closest +

            s        = new V2(2.0f, 1.0f);
            p1       = new V2(0.0f, 0.0f);
            p2       = new V2(1.0f, 0.0f);
            expected = (Real)Math.Sqrt(2.0f);
            returned = s.MinDistanceToLineSegment(p1, p2);

            Assert.AreEqual(expected, returned, EPSILON);

            // --- TEST ---
            // s 45° to p2 closest -

            s        = new V2(2.0f, -1.0f);
            p1       = new V2(0.0f, 0.0f);
            p2       = new V2(1.0f, 0.0f);
            expected = (Real)Math.Sqrt(2.0f);
            returned = s.MinDistanceToLineSegment(p1, p2);

            Assert.AreEqual(expected, returned, EPSILON);
        }