Saat menempatkan objek geometris dalam quadtree (atau octree), Anda dapat menempatkan objek yang lebih besar dari satu simpul dalam beberapa cara:
- Menempatkan referensi objek di setiap daun yang dikandungnya
- Menempatkan referensi objek di node terdalam yang sepenuhnya terkandung
- Keduanya # 1 dan # 2
Sebagai contoh:
Pada gambar ini, Anda bisa menempatkan lingkaran di keempat simpul daun (metode # 1) atau hanya di simpul akar (metode # 2) atau keduanya (metode # 3).
Untuk keperluan kueri quadtree, metode mana yang lebih umum dan mengapa?
graphics
data-structures
computational-geometry
nsantorello
sumber
sumber
Jawaban:
Dengan asumsi Anda menyimpan referensi, bukan objek itu sendiri, mungkin masuk akal untuk melakukan ini secara berbeda tergantung pada aplikasi Anda.
Misalnya, jika Anda menghitung tumbukan dengan lingkaran (padat) ini dan tumbukan itu terjadi di sudut kiri bawah, akan lebih mudah jika Anda memiliki akses ke semua geometri di daun itu langsung dari daun itu (metode # 3) (tanpa harus melintasi pohon ke atas dan menentukan geometri yang diwarisi). Tetapi, katakan saja Anda hanya menggunakan quadtrees untuk menggambar geometri, Anda ingin menggunakan metode # 1, karena hanya masuk akal untuk menggambar sesuatu di node yang sudah terkandung sepenuhnya (akan lebih sulit untuk mengetahui bagian mana yang untuk menggambar untuk setiap simpul daun dan di mana).
Adapun apa yang lebih umum, satu-satunya pengalaman saya dengan quadtrees adalah dengan menulis simulasi n-body di mana objek geometris benar-benar hanya titik yang tidak memiliki area, jadi saya tidak bisa menjawabnya secara definitif.
sumber
Salah satu kelebihan Quadtree adalah Anda tidak perlu membagi simpul menjadi simpul turunannya jika semua simpul turunannya berisi informasi yang sama. Ini dapat menghemat banyak memori dan membuat pemrosesan lebih cepat.
Mengikuti prinsip ini, saya pikir lebih masuk akal untuk menyimpannya hanya di root node (metode # 2). Ini bisa menghemat banyak memori dan saya pikir juga akan membuat pemrosesan lebih mudah. Misalnya, jika Anda mencoba menemukan persimpangan lingkaran dengan garis yang melewati tiga simpul daun, Anda harus menghitung persimpangan secara terpisah untuk setiap simpul daun, atau ingat bahwa Anda sudah berpotongan dengan lingkaran ini.
Di sisi lain, jika Anda memiliki objek di node daun, itu bisa membantu Anda menghilangkan false positive (objek yang harus Anda periksa persimpangan, karena mereka berada di simpul yang benar, tetapi itu tidak benar-benar berpotongan).
Jadi, saya pikir kedua pendekatan memiliki kegunaannya dan saya tidak yakin bagaimana memilih yang mana yang akan digunakan.
Saya mungkin tidak akan menggunakan pendekatan # 3, karena saya tidak melihat hal positif tentang itu.
sumber