Phương pháp nào được ưa thích để lưu trữ các đối tượng hình học lớn trong một góc phần tư?


15

Khi đặt các đối tượng hình học trong một góc phần tư (hoặc octree), bạn có thể đặt các đối tượng lớn hơn một nút theo một số cách:

  1. Đặt tham chiếu của đối tượng trong mỗi lá mà nó được chứa
  2. Đặt tham chiếu của đối tượng vào nút sâu nhất mà nó được chứa đầy đủ
  3. Cả # 1 và # 2

Ví dụ:

nhập mô tả hình ảnh ở đây

Trong ảnh này, bạn có thể đặt vòng tròn vào tất cả bốn nút lá (phương thức # 1) hoặc chỉ trong nút gốc (phương thức # 2) hoặc cả hai (phương thức # 3).

Đối với các mục đích truy vấn của tứ giác, phương pháp nào phổ biến hơn và tại sao?


1
Chắc chắn nó nên là một tài liệu tham khảo. Tôi dự định hỏi rằng, với mục đích truy vấn tứ giác, nên có các tài liệu tham khảo trong các lá, không lá hoặc cả hai.
nsantorello

PS Chỉnh sửa để hy vọng làm cho ý định của câu hỏi rõ ràng hơn.
nsantorello

Truy vấn bạn đang cố gắng hỗ trợ là gì?
Joe

@Joe Tôi đặc biệt quan tâm đến việc phát hiện va chạm, lập chỉ mục không gian và loại bỏ vùng / sự thất vọng.
nsantorello

1
@nsantorello Quy tắc có thể khác nhau tùy thuộc vào truy vấn nào bạn muốn hỗ trợ, nhưng điều này có vẻ rất phù hợp để phát hiện va chạm: stackoverflow.com/questions/4434335/ Lỗi
Joe

Câu trả lời:


8

Giả sử bạn đang lưu trữ một tài liệu tham khảo, không phải chính đối tượng, có thể có ý nghĩa để làm điều này khác nhau tùy thuộc vào ứng dụng của bạn.

Chẳng hạn, nếu bạn đang tính toán các va chạm với vòng tròn (rắn) này và sự va chạm xảy ra ở góc dưới bên trái, sẽ dễ dàng hơn nếu bạn có quyền truy cập vào tất cả hình học trong lá đó trực tiếp từ lá đó (phương pháp số 3) (không cần phải di chuyển cây lên trên và xác định hình học được kế thừa). Tuy nhiên, giả sử bạn chỉ sử dụng một phần tư để vẽ hình học, bạn muốn sử dụng phương pháp số 1, bởi vì việc vẽ một cái gì đó trong nút chứa nó hoàn toàn có ý nghĩa (sẽ khó khăn hơn để tìm ra phần nào để vẽ cho mỗi nút lá và ở đâu).

Đối với những gì phổ biến hơn, trải nghiệm duy nhất của tôi với tứ giác là viết một mô phỏng cơ thể n trong đó các đối tượng hình học thực sự chỉ là những điểm không có diện tích, vì vậy tôi không thể trả lời dứt khoát điều đó.


Cảm ơn Rafe, tôi nghĩ bạn đúng rằng nó phụ thuộc vào ứng dụng.
nsantorello

6

Một trong những lợi thế của Quadtree là bạn không phải chia một nút thành các nút con của nó nếu tất cả các nút con sẽ chứa cùng một thông tin. Điều này có thể giúp bạn tiết kiệm rất nhiều bộ nhớ và có thể giúp xử lý nhanh hơn.

Theo nguyên tắc này, tôi nghĩ sẽ có ý nghĩa hơn khi chỉ lưu trữ nó trong nút gốc (phương thức # 2). Nó có thể giúp bạn tiết kiệm rất nhiều bộ nhớ và tôi nghĩ cũng sẽ giúp xử lý dễ dàng hơn. Ví dụ: nếu bạn đã cố gắng tìm các giao điểm của vòng tròn với một đường đi qua ba trong số các nút lá, bạn sẽ cần phải tính toán giao điểm riêng cho từng nút lá hoặc nhớ rằng bạn đã giao nhau với vòng tròn này.

Mặt khác, nếu bạn có các đối tượng trong các nút lá, nó có thể giúp bạn loại bỏ các kết quả dương tính giả (các đối tượng mà bạn phải kiểm tra giao lộ, vì chúng nằm trong nút chính xác, nhưng thực tế không giao nhau).

Vì vậy, tôi nghĩ rằng cả hai phương pháp đều có cách sử dụng và tôi không chắc chắn nên chọn cách sử dụng nào.

Tôi có lẽ sẽ không sử dụng cách tiếp cận # 3, vì tôi không thấy bất kỳ điều tích cực nào về nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.