2009-05-24 5 views
3

J'ai besoin d'attacher des étiquettes de texte aux objets répartis aléatoirement sur l'écran et de continuer à avancer.Réorganiser les étiquettes pour les objets dans l'espace 2D sans chevauchement

La position par défaut et idéale pour une étiquette est sur le côté droit de l'objet auquel elle fait référence. J'ai besoin d'un moyen de réorganiser dynamiquement (ou éventuellement de fusionner) les étiquettes afin qu'elles ne se chevauchent jamais les uns les autres ou d'autres objets. Ils doivent toujours être aussi proches que possible des objets et ne doivent pas, à condition que les objets eux-mêmes se déplacent facilement, montrer un mouvement saccadé soudain.

Je n'ai aucune idée de comment le faire, y at-il un algorithme pour quelque chose comme ça?

Répondre

0

Je résolu ce en utilisant la force brute à peu près

for each object as a 
    for each colliding object as c 
     if should_swallow(a, c) 
      swallow(a, c) 

et le faire dans un cycle plusieurs fois parce que les objets se développent quand ils avalent d'autres objets, de sorte que le contrôle de collision doit être fait à nouveau (nouveaux chevauchements peuvent apparaître milieu de cycle). Ne jamais frapper plus de 3 cycles, avec le nombre d'objets avec lesquels je travaille. La fonction should_swallow() détermine s'il est préférable d'avaler un objet ou de l'avaler, en fonction de sa taille, de sa position et de ce qui s'est passé dans les images précédentes pour éviter le scintillement.

3

Je suggère d'utiliser la physique. Attachez l'étiquette à l'objet avec un ressort et appliquez une force répulsive à chaque étiquette afin qu'ils évitent de se rapprocher des autres objets (et de leurs étiquettes), à l'exception de ceux qu'ils décrivent.

0

Mise en place de l'étiquette: Vous pouvez déterminer le carré le plus serré qui ferme les objets, puis placer une perpendiculaire du côté droit du carré sur l'objet. Placez l'étiquette à ce point d'intersection.

Détection de collision: Stockez les coordonnées de l'étiquette et avant d'afficher le tampon final, vous pouvez détecter la collision des étiquettes en utilisant les coordonnées.

Évitez les mouvements brusques: Ceci est la partie difficile car si vous changez l'emplacement des étiquettes uniquement lorsque la collision est détectée, il y aura une secousse. L'approche simple consiste à les fusionner lorsque la collision est détectée et aussi longtemps qu'une collision est présente. L'approche la plus difficile serait de déplacer les étiquettes. Pour que cela se fasse en douceur, vous devrez d'abord détecter toute collision qui pourrait apparaître à l'écran et commencer à déplacer vos étiquettes sur une trajectoire qui éviterait toute collision.

Questions connexes