tree = KdTree(AaBb(2, Vec(2, 0, 0), Vec(2, 100, 100)), 2) def draw_callback(values, box: AaBb): for item in values: renderer.draw_box(item.top_left, item.down_right, 0x0000ff) renderer.draw_box(box.top_left, box.down_right) while True: renderer.cls() ray_point = Vec(2, random.randint(0, 50), random.randint(0, 100)) ray_direct = Vec(2, 100 - ray_point[0], random.randint(0, 100) - ray_point[1]) renderer.draw_line(ray_point[0], ray_point[1], ray_point[0] + ray_direct[0], ray_point[1] + ray_direct[1], 0xff0000) tree.walk(draw_callback) for box in tree.ray_intersection(ray_point, ray_direct): renderer.draw_box(box.top_left, box.down_right, 0xffff00) for box in tree.possible_values(ray_point, ray_direct): renderer.draw_box(box.top_left, box.down_right, 0x00ff00) renderer.render() r = random.randint(1, 4) renderer.handel_events(lambda x, y: tree.insert(AaBb(2, Vec(2, x - r, y - r), Vec(2, x + r, y + r)))) time.sleep(0.1)