Comment fonctionne l'algorithme d'entonnoir stupide simple?


Réponses:


18

L'algorithme commence par un chemin que vous avez trouvé précédemment, dans ce cas une liste de triangles:

chemin

Le code au bas du billet de blog de Mikko construit le tableau des portails, qui est une liste de segments de ligne représentant les segments de ligne entre les polygones du chemin. Ce sont les «portails» que le chemin lissé doit traverser (ou les bords du polygone à partir de «traçons les points médians du bord du polygone»). Notez que la liste des portails commence et se termine par des segments de ligne dégénérés aux points de départ et d'arrivée.

Cette liste de portails est représentée par les segments de la ligne pointillée jaune dans ses images.

portails

L'algorithme commence par un large entonnoir et procède par déplacement itératif des côtés de l'entonnoir vers l'avant le long des points latéraux du portail (les points d'extrémité des segments de ligne) tant que cela resserre l'entonnoir (AD).

algorithme

Cela signifie que chaque mouvement vers l'avant doit déplacer les bords de l'entonnoir vers l'intérieur, cela peut être vérifié avec le produit croisé des vecteurs représentant l'ancien côté et le nouveau côté potentiel ( P × Q dans l'image ci-dessous; voir également triarea2dans le code de Mikko). Si un pas en avant pour un côté ne resserre pas l'entonnoir, nous ne mettons pas à jour ce côté pour l'itération actuelle des portails (E).

se déplacer vers l'intérieur

L'autre cas qui doit être traité est lorsque l'entonnoir dégénère en un segment de ligne. Pour tenir compte de cela, l'algorithme vérifie si l'un des côtés est du "mauvais" côté en utilisant à nouveau le produit croisé, cette fois des vecteurs faits respectivement par le sommet de l'entonnoir et les extrémités des côtés droit et gauche ( R × S dans l'image ci-dessous).

entonnoir dégénéré

Si tel est le cas, le vecteur de l'apex de l'entonnoir et le point d'extrémité latéral correct sont ajoutés au chemin lissé ( R dans l'image ci-dessus) et l'algorithme est redémarré avec son point d'extrémité comme nouveau sommet (FG), sauf si, bien sûr, si c'est le but.


2
@Rolfcore La réponse est-elle claire? Sinon, quelles parties doivent être améliorées?
Eric

Je pense qu'il a juste oublié d'accepter la réponse, celle-ci est très bonne et devrait être votée en série ^^.
GameDeveloper

Peut-être, tonique, c'est que dans le mouvement F, vous ne dites pas que nous ne recommençons pas à zéro parce qu'il existe la possibilité qu'un coin serré pointant vers le sud rende possible un entonnoir le plus serré, nous devons donc attendre que les côtés du robot échouent réellement test et pas seulement un. Donc on fait ça en G au lieu de F. .. bonne explication quand même :)
GameDeveloper
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.