Example #1
0
    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)