コード例 #1
0
    def test_changed_order_3d(self):
        # The order of the start and endpoints of the segments should not matter
        dim = 3
        p1 = np.random.rand(1, 3)[0]
        p2 = np.random.rand(1, 3)[0]
        p3 = np.random.rand(1, 3)[0]
        p4 = np.random.rand(1, 3)[0]
        d1, cp11, cp12 = cg.dist_two_segments(p1, p2, p3, p4)
        d2, cp21, cp22 = cg.dist_two_segments(p2, p1, p3, p4)
        d3, cp31, cp32 = cg.dist_two_segments(p1, p2, p4, p3)
        d4, cp41, cp42 = cg.dist_two_segments(p2, p1, p4, p3)
        d5, cp51, cp52 = cg.dist_two_segments(p4, p3, p2, p1)
        assert np.allclose(d1, d2)
        assert np.allclose(d1, d3)
        assert np.allclose(d1, d4)
        assert np.allclose(d1, d5)

        assert np.allclose(cp11, cp21)
        assert np.allclose(cp31, cp11)
        assert np.allclose(cp41, cp11)
        assert np.allclose(cp52, cp11)
        assert np.allclose(cp12, cp22)
        assert np.allclose(cp12, cp32)
        assert np.allclose(cp12, cp42)
        assert np.allclose(cp12, cp51)
コード例 #2
0
    def test_segment_intersect_2d(self):
        p00, p10, p11, p01 = self.setup_2d_unit_square()
        d, cp_1, cp_2 = cg.dist_two_segments(p00, p11, p10, p01)
        self.assertTrue(d == 0)

        self.assertTrue(np.allclose(cp_1, np.array([0.5, 0.5])))
        self.assertTrue(np.allclose(cp_2, np.array([0.5, 0.5])))
コード例 #3
0
 def test_intersection_3d(self):
     p000 = np.array([0, 0, 0])
     p111 = np.array([1, 1, 1])
     p100 = np.array([1, 0, 0])
     p011 = np.array([0, 1, 1])
     d, cp1, cp2 = cg.dist_two_segments(p000, p111, p100, p011)
     self.assertTrue(d == 0)
     self.assertTrue(np.allclose(cp1, np.array([0.5, 0.5, 0.5])))
     self.assertTrue(np.allclose(cp2, np.array([0.5, 0.5, 0.5])))
コード例 #4
0
 def test_share_point(self):
     # Two lines share a point
     p1 = np.array([0, 0])
     p2 = np.array([0, 1])
     p3 = np.array([1, 1])
     d, cp1, cp2 = cg.dist_two_segments(p1, p2, p2, p3)
     self.assertTrue(d == 0)
     self.assertTrue(np.allclose(cp1, p2))
     self.assertTrue(np.allclose(cp2, p2))
コード例 #5
0
 def test_line_passing(self):
     # Lines not crossing
     p1 = np.array([0, 0])
     p2 = np.array([1, 0])
     p3 = np.array([2, -1])
     p4 = np.array([2, 1])
     d, cp1, cp2 = cg.dist_two_segments(p1, p2, p3, p4)
     self.assertTrue(d == 1)
     self.assertTrue(np.allclose(cp1, np.array([1, 0])))
     self.assertTrue(np.allclose(cp2, np.array([2, 0])))
コード例 #6
0
 def test_segment_no_intersect_2d(self):
     p00, p10, p11, p01 = self.setup_2d_unit_square()
     d, _, _ = cg.dist_two_segments(p00, p01, p11, p10)
     self.assertTrue(d == 1)