Thư viện nào cho octrees hoặc kd-cây? [đóng cửa]


8

Có bất kỳ thư viện biểu diễn mạnh mẽ cho các đối tượng lập chỉ mục?

Các đối tượng sẽ có giới hạn bản thân, thay vì được đại diện bởi các điểm; và do đó một đối tượng có thể nằm trong nhiều ngăn nếu chỉ mục phân chia mọi thứ trong các phân vùng có kích thước cố định.

Nó sẽ cần loại bỏ bực bội và thăm các vật thể bị tia sáng cũng như tìm kiếm khu phố.

Tôi có thể tìm thấy rất nhiều bài báo trình bày toán học cho các phần thành phần, thường là đại số thay vì C đơn giản, nhưng không có gì kết hợp tất cả (ngoài có lẽ là Ogre, mặc dù rõ ràng PyOrge không phơi bày quãng tám ). Chắc chắn các nhà sản xuất trò chơi sở thích không phải tất cả phải tạo ra các chỉ số không gian riêng của họ?

(Tôi đang ngồi viết hình cầu của riêng mình, hình cầu tia, tia-aabb, hình nón-aabb, hình nón-fustrum, aabb-fustrum và octree; chắc chắn có một cách tốt hơn tức là ai đó đã thực hiện điều này và thực hiện Gói đẹp?!?!)

(Ưu tiên Python hoặc C / C ++ w / ràng buộc)

Câu trả lời:


10

Chắc chắn tất cả các nhà sản xuất trò chơi sở thích không phải tự tạo ra các quãng tám của mình?

Trừ khi họ đang sử dụng một cái gì đó lớn hơn (như Ogre, hoặc một công cụ vật lý / kết xuất khác), nhiều người sẽ làm. Một octree là một cấu trúc khá đơn giản để thực hiện và có rất nhiều sự đánh đổi:

  • Là octree xâm nhập hay không? Nếu nó xâm nhập, bạn sẽ có hiệu năng bộ đệm tốt hơn, nhưng cấu trúc lớn hơn.
  • Nếu nó không xâm phạm, nó có lưu trữ con trỏ hoặc một loại xử lý an toàn không?
  • Nó được lưu trữ bằng phẳng hoặc với con trỏ con?
  • Làm thế nào là an toàn loại? Nếu nó sử dụng các mẫu, nó sẽ an toàn hơn rất nhiều với chi phí thời gian chạy tối thiểu, nhưng khó hơn nhiều để liên kết với Python.
  • Bất kỳ quãng tám nào với truy vấn không gian sẽ phải bao gồm một số loại vectơ / điểm / tia, và bất cứ điều gì với việc loại bỏ bực bội sẽ bao gồm một thói quen toán học ma trận và ma trận. Việc viết mã để giao diện với hàng tá lớp ma trận / vectơ mà bạn đã kéo vào từ tất cả các thư viện khác mà bạn đang sử dụng thực sự ít công việc hơn là chỉ viết octree cơ sở bạn muốn?
  • Nó có an toàn không?

Điều đó đang được nói, có rất nhiều triển khai octree trực tuyến . Chỉ cần không cho rằng lấy một trong số chúng sẽ giúp bạn tiết kiệm được nhiều công việc và đừng cho rằng có một cách thực sự để tạo bất kỳ cấu trúc dữ liệu nào ngoài một mảng.


Cái nhìn sâu sắc tốt đẹp! Tôi tự hỏi làm thế nào nó là cho cây KD, những gì tôi đã thấy từ chúng là chúng khá đẹp để thực hiện (có rất nhiều chi tiết khó khăn để tính đến). Có lẽ ai đó biết nhiều hơn về điều này?
Nef

Là cây kd thực sự khó khăn hơn để thực hiện? Tôi nghĩ họ khó lý luận hơn, đặc biệt là không vẽ tranh, vì họ phân chia hình học theo cách ít trực quan hơn. Nhưng các thuật toán xây dựng / truy vấn cơ bản không thực sự được khám phá lâu hơn hoặc ít hơn so với octree.

2
Một Octree thực sự chỉ là một trường hợp đặc biệt KD-cây. Với các mặt phẳng chia vị trí cố định. Thực hiện các cây KD, bạn sẽ cần một số cách để tìm phần bù tách trục "tốt nhất" cho mỗi nút.
khoảng trống

2

Công bằng mà nói, Python Octree được liên kết đã được đăng vào năm 2006, vì vậy bây giờ Python-Ogre rất có thể đã tiếp xúc với lớp Octree.

Tuy nhiên, nhìn qua các nguồn của Ogre, tôi có thể thấy hai triển khai của Octree: một trong Plugins/OctreeSceneManager/OgreOctree.hvà một trong Plugins/OctreeZone/OgreOctreeZoneOctree.h.

Nếu bạn chỉ cho tôi cái mà bạn cần tiếp xúc, tôi sẽ đưa nó vào danh sách việc cần làm của tôi cho trình bao bọc Python viết tay của riêng tôi (nó có sẵn trên bitbucket, được liên kết trong hồ sơ của tôi.)

Dù sao chúc may mắn. : D


đó là một đề nghị rất tử tế; Tôi ahem đã viết riêng của tôi mặc dù.
Will

1

Tôi đã tìm thấy một số mã cho việc triển khai octree Python ở đây , bằng cách đơn giản là googling 'octree python'. ; D

Nó không phụ thuộc vào thư viện (mặc dù ban đầu được viết cho PyOgre) và được bình luận tốt.


Một điều tôi đã tìm thấy trong octrees Python thuần là chi phí bổ sung cho các lệnh gọi hàm truyền qua cây nhanh chóng chi phối thời gian chạy của bạn và làm cho chúng tệ hơn các tìm kiếm đơn giản trong danh sách, cho bất kỳ số lượng đối tượng nào bạn có thể xử lý trong Python thuần. Ví dụ cụ thể đó cũng có vẻ rất không được tối ưu hóa.

Mặc dù đó là một đoạn mã đẹp để tiêu hóa nếu bạn tự tạo ra octree của mình, ngoài hộp mà octree thiếu tất cả các tính năng - ví dụ như giao điểm tia và fustrum - mà tôi đã trích dẫn trong câu hỏi. Trên thực tế, nó thậm chí không có tìm kiếm hàng xóm gần nhất. Tôi tự hỏi họ sử dụng octtree đó để làm gì, nếu họ có thể đưa dữ liệu vào nhưng không truy vấn nó ngoài điểm chính xác? Và nó lưu trữ các điểm, hơn là những thứ có giới hạn. Tôi liệt kê tất cả những thiếu sót này bởi vì đây là dấu hiệu của tất cả các octrees python tôi đã tìm thấy trên web; có lẽ những người khác có thể tìm thấy một octree đầy đủ hơn trên google? Tôi không thể :(
Sẽ

1

Sau khi thử không thành công một vài gói được đề cập ở trên, tôi đã tìm thấy RTree , đây là một gói bao quanh libspatialindex .

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.