On m'a dit qu'un arbre quadruple est la structure de données idéale pour mon jeu, mais j'ai du mal à comprendre comment fonctionnent exactement les formes dans les arbres quadruples.
Je fais cela en JavaScript, mais je pense que ces questions pourraient s'appliquer aux arbres quadruples dans n'importe quelle langue.
Je pense que je comprends surtout comment les points de base (x, y) et l' insertion de points fonctionnent dans les arbres quadruples, et que je pourrais le faire sur papier.
Voici un JSfiddle de mon expérience avec les points.
Mis à part un cas, mes tests avec des points fonctionnent comme prévu.
Mais ma confusion commence lorsque des formes comme des rectangles sont impliquées. Lorsque vous récupérez à partir d'un arbre quadruple avec des formes, vérifie-t-il chaque point de la forme et dans quels nœuds ils tombent? Et comment fonctionnent les insertions de formes, même si elles acceptent les paramètres (x, y, largeur, hauteur) pour chaque forme? Utilise-t-il la largeur / hauteur du point de départ pour calculer d'autres points d'angle, qui sont ensuite distribués dans les nœuds appropriés? Si une forme insérée s'étend sur quatre nœuds, les données de cette forme sont-elles enregistrées dans les quatre nœuds?
Et lorsqu'une méthode de récupération accepte une forme comme paramètre (x, y, largeur, hauteur), que se passe-t-il réellement? Est-ce qu'il voit d'abord à quels nœuds la forme s'étendrait s'il devait être inséré, puis récupère tous les objets de ces nœuds?
J'ai un JSfiddle qui travaille avec des formes , mais je suis complètement confus sur les résultats de mes tests. Je reçois des objets en double retournés!
Par exemple, le carré rouge est un équivalent dessiné des paramètres que j'entre dans ma méthode de récupération. Je pense que puisque ce carré rouge s'étend sur les quatre nœuds, il devrait renvoyer chaque objet dans l'arbre quadruple! Mais ce n'est pas le cas, et j'ai du mal à rationaliser ce qu'il retourne. J'ai un certain nombre d'autres tests qui sont actuellement commentés, mais vous pouvez annuler le commentaire et les exécuter pour voir des résultats plus confus!
Comme dire, si je veux retourner tous les points dans un arbre quadruple, comment ferais-je cela? Une méthode de récupération utilisant une forme de toute la taille des limites? Par exemple, récupérer (0, 0, canvas.width, canvas.height)?
La bibliothèque JavaScript QuadTree que j'utilise a été mentionnée par diverses autres sources, donc je suppose que la mise en œuvre réelle est correcte et réputée.
Je pense qu'une grande partie de ma confusion peut provenir d'un malentendu de la terminologie de l'arbre quadruple. Par exemple, pourquoi disent-ils des limites plutôt que des dimensions, lorsqu'un "point" a également des paramètres largeur / hauteur? Est-ce une question de convention / raccourci, ou s'agit-il de concepts complètement différents?
Merci pour votre temps!
_stuckChildren
champ dans le code. Vous pouvez également le voir dans l'exemple "récupération des éléments avec des limites" - il met toujours en surbrillance en rouge les nœuds qui chevauchent les bordures des nœuds sur lesquels vous avez cliqué, jusqu'au nœud racine.