def test_AABox_intersect(self): from lepton.domain import AABox from lepton.particle_struct import Vec3 box = AABox((-3, -1, 0), (-2, 1, 3)) lines = [ ((-4, 0, 1), (-2, 0, 1)), ((-2.5, -2, 2), (-2.5, -0.5, 2)), ((-2.8, 0.5, -1), (-2.8, 0.5, 1)), ((-1, 0, 1), (-2, 0, 1)), ((-2.5, 2, 2), (-2.5, 1, 2)), ((-2.8, 0.5, 4), (-2.8, 0.5, 1)), ] expected = [ ((-3, 0, 1), (-1, 0, 0)), ((-2.5, -1, 2), (0, -1, 0)), ((-2.8, 0.5, 0), (0, 0, -1)), ((-2, 0, 1), (1, 0, 0)), ((-2.5, 1, 2), (0, 1, 0)), ((-2.8, 0.5, 3), (0, 0, 1)), ] for (start, end), (point, normal) in zip(lines, expected): p, N = box.intersect(start, end) self.failUnless(start not in box) self.failUnless(end in box) self.assertVector(p, point) self.assertVector(N, normal) # Reverse direction should yield same point and inverse normal p, N = box.intersect(end, start) self.assertVector(p, point) self.assertVector(N, -Vec3(*normal))
def test_AABox_no_intersect(self): from lepton.domain import AABox box = AABox((-3, -1, 0), (-2, 1, 3)) # No intersection self.assertEqual(box.intersect((-4, 2, 1), (-2, 2, 1)), (None, None)) self.assertEqual(box.intersect((-2, 0, 1), (-2.8, 0.5, 1)), (None, None))
def test_AABox_grazing_intersect(self): from lepton.domain import AABox box = AABox((-3, -1, 0), (-2, 1, 3)) p, N = box.intersect((-4, 0, 1), (0, 0, 1)) self.assertEqual(p, (-3, 0, 1)) self.assertEqual(N, (-1, 0, 0)) p, N = box.intersect((0, 0, 1), (-4, 0, 1)) self.assertEqual(p, (-2, 0, 1)) self.assertEqual(N, (1, 0, 0))
def test_AABox_no_intersect(self): from lepton.domain import AABox box = AABox((-3, -1, 0), (-2, 1, 3)) # No intersection self.assertEqual( box.intersect((-4, 2, 1), (-2, 2, 1)), (None, None)) self.assertEqual( box.intersect((-2, 0, 1), (-2.8, 0.5, 1)), (None, None))
def test_AABox_line_in_sides(self): from lepton.domain import AABox box = AABox((-3, -1, 0), (-2, 1, 3)) # Lines completely in sides lines = [ ((-3, 0, 1), (-3, 0.5, 2)), ((-2.5, -1, 2), (-2, -1, 2)), ((-2.8, 0.5, 0), (-2.5, 0.5, 0)), ((-2, 0, 1), (-2, 0.5, 2)), ((-2.5, 1, 2), (-2.5, 1, 1)), ((-2.8, 0.5, 3), (-2.9, 0.5, 3)), ] for start, end in lines: self.assertEqual(box.intersect(start, end), (None, None))
def test_AABox_line_in_sides(self): from lepton.domain import AABox box = AABox((-3, -1, 0), (-2, 1, 3)) # Lines completely in sides lines = [ ((-3, 0, 1), (-3, 0.5, 2)), ((-2.5, -1, 2), (-2, -1, 2)), ((-2.8, 0.5, 0), (-2.5, 0.5, 0)), ((-2, 0, 1), (-2, 0.5, 2)), ((-2.5, 1, 2), (-2.5, 1, 1)), ((-2.8, 0.5, 3), (-2.9, 0.5, 3)), ] for start, end in lines: self.assertEqual( box.intersect(start, end), (None, None))