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); }