예제 #1
0
 def test_intersect_ray_with_bounding_box_at_origin(self):
     box = Bounds(Point(-1, -1, -1), Point(1, 1, 1))
     RayResult = namedtuple("RayResult", ["origin", "direction", "result"])
     ray_results = [
         RayResult(Point(5, 0.5, 0), Vector(-1, 0, 0), True),
         RayResult(Point(-5, 0.5, 0), Vector(1, 0, 0), True),
         RayResult(Point(0.5, 5, 0), Vector(0, -1, 0), True),
         RayResult(Point(0.5, -5, 0), Vector(0, 1, 0), True),
         RayResult(Point(0.5, 0, 5), Vector(0, 0, -1), True),
         RayResult(Point(0.5, 0, -5), Vector(0, 0, 1), True),
         RayResult(Point(0, 0.5, 0), Vector(0, 0, 1), True),
         RayResult(Point(-2, 0, 0), Vector(2, 4, 6), False),
         RayResult(Point(0, -2, 0), Vector(6, 2, 4), False),
         RayResult(Point(0, 0, -2), Vector(4, 6, 2), False),
         RayResult(Point(2, 0, 2), Vector(0, 0, -1), False),
         RayResult(Point(0, 2, 2), Vector(0, -1, 0), False),
         RayResult(Point(2, 2, 0), Vector(-1, 0, 0), False)
     ]
     for ray_result in ray_results:
         direction = Vector.normalize(ray_result.direction)
         r = Ray(ray_result.origin, direction)
         self.assertEqual(box.intersects(r), ray_result.result)
예제 #2
0
 def test_intersect_ray_with_noncubic_bouding_box(self):
     box = Bounds(Point(5, -2, 0), Point(11, 4, 7))
     RayResult = namedtuple("RayResult", ["origin", "direction", "result"])
     ray_results = [
         RayResult(Point(15, 1, 2), Vector(-1, 0, 0), True),
         RayResult(Point(-5, -1, 4), Vector(1, 0, 0), True),
         RayResult(Point(7, 6, 5), Vector(0, -1, 0), True),
         RayResult(Point(9, -5, 6), Vector(0, 1, 0), True),
         RayResult(Point(8, 2, 12), Vector(0, 0, -1), True),
         RayResult(Point(6, 0, -5), Vector(0, 0, 1), True),
         RayResult(Point(8, 1, 3.5), Vector(0, 0, 1), True),
         RayResult(Point(9, -1, -8), Vector(2, 4, 6), False),
         RayResult(Point(8, 3, -4), Vector(6, 2, 4), False),
         RayResult(Point(9, -1, -2), Vector(4, 6, 2), False),
         RayResult(Point(4, 0, 9), Vector(0, 0, -1), False),
         RayResult(Point(8, 6, -1), Vector(0, -1, 0), False),
         RayResult(Point(12, 5, 4), Vector(-1, 0, 0), False)
     ]
     for ray_result in ray_results:
         direction = Vector.normalize(ray_result.direction)
         r = Ray(ray_result.origin, direction)
         self.assertEqual(box.intersects(r), ray_result.result)