quadtree in game

24
QuadTree Thành Viên: GVHD :

Upload: duong-nyl

Post on 18-Jan-2017

352 views

Category:

Education


1 download

TRANSCRIPT

Page 1: Quadtree In Game

QuadTreeThành Viên:

GVHD :

Page 2: Quadtree In Game

Agenda

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

Page 3: Quadtree In Game

Agenda

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

Page 4: Quadtree In Game

History

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

Page 5: Quadtree In Game

Agenda

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

Page 6: Quadtree In Game

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)

Page 7: Quadtree In Game

Agenda

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

Page 8: Quadtree In Game

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

Page 9: Quadtree In Game

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

Page 10: Quadtree In Game

Agenda

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

Page 11: Quadtree In Game

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.

Page 12: Quadtree In Game

Agenda

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

Page 13: Quadtree In Game

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.

Page 14: Quadtree In Game

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

Page 15: Quadtree In Game

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)

Page 16: Quadtree In Game

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.

Page 17: Quadtree In Game

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.

Page 18: Quadtree In Game

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

Page 19: Quadtree In Game

Agenda

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

Page 20: Quadtree In Game

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.

Page 21: Quadtree In Game

Agenda

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

Page 22: Quadtree In Game

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 đỏ.

Page 23: Quadtree In Game

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ề.

Page 24: Quadtree In Game