Dört ağacın oyunum için ideal veri yapısı olduğu söylendi, ancak dört ağaçta şekillerin tam olarak nasıl çalıştığını anlamakta zorlanıyorum.
Bunu JavaScript ile yapıyorum, ancak bu soruların herhangi bir dilde dört ağaç için geçerli olabileceğini düşünüyorum.
Çoğunlukla dört ağaçlarda temel (x, y) noktaların ve nokta eklemenin nasıl çalıştığını ve kağıt üzerinde yapabileceğimi anlıyorum.
Puanlarla denemelerimin bir JSfiddle'ı .
Bir vaka dışında, puanlı testlerim beklendiği gibi çalışıyor.
Ancak karışıklığım, dikdörtgen gibi şekiller söz konusu olduğunda başlar. Şekillerle dörtlü bir ağaçtan alırken, şeklin her noktasını ve hangi düğümlere düştüğünü kontrol ediyor mu? Şekil eklemeleri, her şekil için (x, y, genişlik, yükseklik) parametrelerini kabul ettiğinde nasıl çalışır? Daha sonra uygun düğümlere dağıtılan diğer köşe noktalarını hesaplamak için başlangıç noktasından itibaren genişliği / yüksekliği kullanıyor mu? Eklenen bir şekil dört düğüme yayılıyorsa, bu şeklin verileri dört düğüme de kaydediliyor mu?
Ve bir alma yöntemi bir şekli parametre olarak kabul ettiğinde (x, y, genişlik, yükseklik), gerçekte neler oluyor? İlk olarak, şeklin eklenecekse hangi düğümlere yayılacağını görmek mi, daha sonra bu düğümlerin tüm nesnelerini almak mı?
Şekillerle çalışan bir JSfiddle'ım var , ancak testimin sonuçları hakkında tamamen kafam karıştı. Yinelenen nesneleri döndürülüyor alıyorum!
Örneğin kırmızı kare, alma yöntemime girdiğim parametrelerin çizilmiş bir eşdeğeri. Bu kırmızı kare dört düğüme de yayıldığından, dört ağaçtaki her nesneyi döndürmesi gerektiğini düşünürüm! Ama olmuyor ve geri döndüklerini rasyonelleştirmekte zorlanıyorum. Şu anda yorum yapılan bir dizi başka testim var, ancak yorum ekleyebilir ve daha kafa karıştırıcı sonuçlar görmek için bunları çalıştırabilirsiniz!
Diyelim ki, dörtlü bir ağaçtaki tüm noktaları geri döndürmek istersem, bunu nasıl yaparım? Sınırların tüm boyutunu bir şekil kullanarak bir alma yöntemi? Örneğin, geri al (0, 0, canvas.width, canvas.height)?
Kullandığım JavaScript QuadTree kütüphanesine diğer çeşitli kaynaklar tarafından atıfta bulunuldu, bu yüzden gerçek uygulamanın doğru ve saygın olduğunu varsayıyorum.
Sanırım karışıklığımın çoğu dört ağaç terminolojisinin yanlış anlaşılmasından kaynaklanabilir. Bir "nokta" da genişlik / yükseklik parametrelerine sahip olduğunda neden boyutlar yerine sınırlar diyorlar? Bu bir konvansiyon / kısa el midir, yoksa tamamen farklı kavramlar mıdır?
Zaman ayırdığınız için teşekkürler!
_stuckChildren
alana referanslara bakın . Bunu, "sınırları olan öğeleri alma" örneğinde de görebilirsiniz - tıklattığınız düğümlerin kenarlarına çarpan düğümleri, kök düğüme kadar her zaman kırmızıya vurgular.