Cây động
Box2D là một công cụ được tối ưu hóa tốt được thiết kế bởi một lập trình viên vật lý / trò chơi có kinh nghiệm . Ban đầu Box2D đã sử dụng lưới băm yêu cầu chiều cao và chiều rộng cố định.
Khi Erin nâng cấp lên một thuật toán broadphase tốt hơn, anh ấy đã đi với btDbvt của Nathanael Presson. Đây là broadphase được sử dụng bởi Bullet Vật lý. Erin đã sửa đổi và tối ưu hóa thuật toán cho 2d.
Bạn có thể đọc phần ghi đè mức siêu cao trong hướng dẫn sử dụng Box2D (§4.11 hoặc tìm kiếm Cây động).
Đây là một ngoại lệ từ tài liệu mã (rất tốt vì nó không phải là một phần của API công khai).
Một cây AABB động rộng, lấy cảm hứng từ btDbvt của Nathanael Presson. Cây động sắp xếp dữ liệu trong cây nhị phân để tăng tốc các truy vấn như truy vấn âm lượng và phôi tia. Lá là proxy với AABB. Trong cây, chúng tôi mở rộng AABB proxy bằng b2_fatAABBFactor để AABB proxy lớn hơn đối tượng khách. Điều này cho phép đối tượng khách di chuyển với số lượng nhỏ mà không kích hoạt cập nhật cây.
Các nút được gộp chung và có thể định vị lại, vì vậy chúng tôi sử dụng các chỉ mục nút thay vì con trỏ.
Sự hiểu biết của tôi về thuật toán của Dynamic Tree là thế này. Cây động là sự giao thoa giữa cây nhị phân avl cổ điển và cây tứ giác. Hiệu ứng kết thúc là một hình tứ giác chỉ chia đôi một nút và đường phân chia không cố định (hai nửa không có kích thước bằng nhau như một cây tứ giác). AVL xuất hiện bởi vì quadree với các phần tách động có thể suy giảm về cơ bản là một danh sách (O (n) tốc độ tra cứu). AVL được sử dụng để cân bằng lại các cấp độ để đảm bảo tốc độ tra cứu O lg (N).
Tốt nhất trong tất cả các mã là MIT, vì vậy hãy thoải mái sao chép / dẫn xuất / không biết xấu hổ-ăn cắp / v.v.