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