def line_intersection(self, s1: int, e1: int, s2: int, e2: int) -> None: line1 = self.p1[s1], self.p1[e1] line2 = self.p2[s2], self.p2[e2] p = intersection_line_line_3d(line1, line2, virtual=False, abs_tol=self.abs_tol) if p is not None and not any( p.isclose(ip, abs_tol=self.abs_tol) for ip in self.intersections): self.intersections.append(p)
def test_coincident_lines_do_not_intersect(self, p2): line = (Vec3(), Vec3(p2)) assert intersection_line_line_3d(line, line, virtual=False) is None
def test_touching_lines_do_intersect(self, line1, line4): assert intersection_line_line_3d(line1, line4, virtual=False).isclose( (2, 0, 0))
def test_not_intersecting_lines(self, line1, line3): assert intersection_line_line_3d(line1, line3, virtual=False) is None
def test_virtual_intersecting_lines(self, line1, line3): assert intersection_line_line_3d(line1, line3, virtual=True).isclose( (3, 0, 0))
def test_real_intersecting_lines(self, line1, line2): assert intersection_line_line_3d(line1, line2, virtual=False).isclose( (1, 0, 0))