Foi-me dito que uma árvore quádrupla é a estrutura de dados ideal para o meu jogo, mas estou tendo problemas para entender como exatamente as formas funcionam dentro das árvores quádruplas.
Estou fazendo isso em JavaScript, mas acho que essas perguntas podem se aplicar a árvores em qualquer idioma.
Eu acho que a maioria entender como básica (x, y) pontos e de inserção ponto de obras em árvores quad, e que eu poderia fazê-lo no papel.
Aqui está um JSfiddle da minha experiência com pontos.
Além de um caso, meus testes com pontos estão funcionando conforme o esperado.
Mas minha confusão começa quando formas como retângulos estão envolvidos. Quando você está recuperando de uma árvore quádrupla com formas, ele verifica cada ponto da forma e em quais nós eles se enquadram? E como as inserções de formas funcionam mesmo quando aceitam parâmetros (x, y, largura, altura) para cada forma? Ele usa a largura / altura do ponto de partida para calcular outros pontos de canto, que são dispensados nos nós apropriados? Se uma forma inserida se estender em quatro nós, os dados dessa forma serão salvos nos quatro nós?
E quando um método de recuperação aceita uma forma como parâmetro (x, y, largura, altura), o que realmente está acontecendo? É primeiro ver em que nós a forma se estenderia se ela fosse inserida e depois recuperar todos os objetos desses nós?
Eu tenho um JSfiddle trabalhando com formas , mas estou totalmente confuso com os resultados dos meus testes. Estou recebendo objetos duplicados sendo devolvidos!
Por exemplo, o quadrado vermelho é um equivalente desenhado dos parâmetros que estou inserindo no meu método de recuperação. Eu pensaria que, uma vez que esse quadrado vermelho abrange todos os quatro nós, ele deve retornar todos os objetos no quad tree! Mas isso não acontece, e estou tendo problemas para racionalizar o que retorna. Eu tenho vários outros testes atualmente comentados, mas você pode cancelar o comentário e executá-los para obter resultados mais confusos!
Por exemplo, se eu quiser retornar todos os pontos em uma árvore quádrupla, como eu faria isso? Um método de recuperação usando uma forma de todo o tamanho dos limites? Por exemplo, recuperar (0, 0, canvas.width, canvas.height)?
A biblioteca JavaScript QuadTree que estou usando já foi referida por várias outras fontes, portanto, presumo que a implementação real seja correta e respeitável.
Penso que grande parte da minha confusão pode resultar de um mal-entendido da terminologia de árvores quádruplas. Como, por que eles dizem limites em vez de dimensões, quando um "ponto" também tem parâmetros de largura / altura? É uma questão de convenção / mão curta, ou são conceitos completamente diferentes?
Obrigado pelo seu tempo!
_stuckChildren
campo no código. Você também pode ver isso no exemplo "recuperando itens com limites" - sempre destaca em vermelho os nós que se estendem pelas bordas dos nós em que você clicou, até o nó raiz.