Quadtree In Game

Post on 18-Jan-2017

352 views 1 download

Transcript of Quadtree In Game

QuadTreeThành Viên:

GVHD :

Agenda

• History• Definitions QuadTree• Types QuadTree• Intention QuadTree• Using QuadTree• Implementation of the operations• Example

Agenda

History• Definitions QuadTree• Types QuadTree• Intention QuadTree• Using QuadTree• Implementation of the operations• Example

History

• Quadtree was named by RaphaelFinkel and J.L. Bentley in 1974. "QuadTrees: A Data Structure for Retrievalon Composite Keys".

Agenda

History Definitions QuadTree• Types QuadTree• Intention QuadTree• Using QuadTree• Implementation of the operations• Example

Definitions QuadTree

• Là cấu trúc cây dùng lưu trữ các khóa trên miền không gian.Thường dùng cho không gian 2 chiều hoặc 3 chiều (oct-trees).• Phân chia không gian thành 4 chữ nhật(hoặc vuông)

không giao nhau (Tổng quát: phân chia thành 2d miền trong không gian d chiều).• Các dạng cụ thể quả quad tree dùng cho từng loại dữ

liệu cụ thể: điểm, đường thẳng (đường cong, gấp khúc)

Agenda

History Definitions QuadTree Types QuadTree• Intention QuadTree• Using QuadTree• Implementation of the operations• Example

Types QuadTree

• Point QuadTree• Dạng cây tìm kiếm nhị

phân• Hình dạng của cây phụ

thuộc vào thứ tự chèn

Types QuadTree

• Point Region ( PR ) QuadTree

Dữ liệu là điểm, được lưu trữ ở node lá.

Node trong có 4 node con.

Trong quá trình thêm, nếu gặp node lá đang lưu dữ liệu khác node hiện tại ta tạo thêm 1 node trong và thêm 2 dữ liệu này vào

Agenda

History Definitions QuadTree Types QuadTree Intention QuadTree• Using QuadTree• Implementation of the operations• Example

Intention QuadTree

• Quadtree dùng để quản lý toàn bộ các đối tượng của bạn trong game, giúp cho việc xử lý va chạm được chính xác và hiệu quả hơn.• Quadtree giúp giảm thiểu số lần xét va chạm giữa các đối tượng, giúp

tăng tốc độ xử lý của mỗi chu trình game• Quadtree giúp bạn nhanh chóng xác định được những đối tượng nào

có khả năng xảy ra va chạm, từ đó sử dụng các thuật toán xử lý va chạm cho chúng.

Agenda

History Definitions QuadTree Types QuadTree Intention QuadTree Using QuadTree• Implementation of the operations• Example

Using QuadTree

• Tại mỗi chu kỳ của game, với mỗi đối tượng cần xử lý va chạm, ta kiểm tra Quadtree xem những đối tượng nào có thể xảy ra va chạm với nó, từ đó sẽ tiến hành các thuật toán kiểm tra va chạm phức tạp hơn đối với các đối tượng này.

Using QuadTree

• Với mỗi node trong Quadtree, node sẽ tiếp tục được chia nhỏ cho đến khi không quá n đối tượng chứa bên trong node đó, hoặc chiều cây đạt đến một giới hạn nào đó.• Trong đó n thường nhỏ, 1 hoặc 2.• Khi một node tiếp tục bị chia nhỏ, nó được chia thành 4 hình chữ

nhật. Đồng thời, các đối tượng thuộc node mà thuộc một trong 4 hình chữ nhật con đó sẽ được chuyển xuống node con tương ứng của node hiện tại

Using QuadTree

Đối tượng màu đỏ sẽ nằm trên 1 trong 4 node ở mức 2 của QuadTree. ( thực tế với trường hợp này, ta chỉ cần lưu đối tượng ở node mức 1, và chỉ chia lại Quadtree sau khi có các đối tượng khác được thêm vào)

Using QuadTree

Đối tượng sẽ nằm ở node gốc, vì nó không nằm trong bất kỳ hình chữ nhật con nào.

Using QuadTree

- 2 đối tượng trên này sẽ nằm ở mức 2 của QuadTree, vì mỗi đối tượng nằm trên 1 node riêng biệt, ta không cần phân chia thêm nữa.

Using QuadTree

3 đối tượng như hình bên trái sẽ được đưa vào Quadtree. Hình chữ nhật góc trên bên trái có 2 đối tượng nên hình chữ nhật này sẽ được chia nhỏ thêm 1 lần nữa. (đối với Quadtree chứa tối đa 1 đối tượng trong 1 ô)

Agenda

History Definitions QuadTree Types QuadTree Intention QuadTree Using QuadTree Implementation of the operations• Example

Implementation of the operations1. Insert an object into the quadtree: Check if the object intersects the current node.

If so, recurse. If you've reached the leaf level, insert the object into the collection.2. Delete an object from the quadtree: Execute the exact same steps as if inserting

the object, but when you've reached the leaf level delete it from the collection.3. Test if an object intersects any object inside the quadtree: Execute the exact same

steps as if inserting the object, but when you've reached the leaf level check for collision with all the objects in the collection.

4. Test for all collisions between all objects inside the quadtree: For every object in the quadtree execute the single object collision test.

5. Update the quadtree: Delete all objects from the quadtree whose position has been modified and insert them again.

Agenda

History Definitions QuadTree Types QuadTree Intention QuadTree Using QuadTree Implementation of the operations Example

Example

Xét ví dụ như hình dưới. Ta cần kiểm tra va chạm của hình chữ nhật màu xanh với các đối tượng màu đỏ.

Example

1. Hình chữ nhật xanh va chạm với hình chữ nhật vàng lớn( node mức 1), nhưng không có đối tượng nào ở mức 1

2. Hình chữ nhật xanh va chạm với 2 hình chữ nhật vàng nhỏ ở mức 2 (2 node ở mức 2): Cũng không có đối tượng nào. Ta tiếp tục kiểm tra các node con.

3. Hình chữ nhật xanh va chạm với 4 hình chữ nhật vàng nhỏ ở mức 3 (4 node ở mức 3): có 1 đối tượng, ta đưa đối tượng vào danh sách trả về (danh sách các đối tượng có xảy ra va chạm với hình chữ nhật xanh)

4. Hình chữ nhật xanh va chạm với 4 hình chữ nhật vàng nhỏ ở mức 4 (6 node ở mức 4): có 1 đối tượng, ta đưa đối tượng vào danh sách trả về.