Disons que nous avons une forme dentelée:
Et deux créatures se déplaçant le long de son contour.
Ensuite, nous lissons complètement la forme en tirant sur les coins.
Nous obtenons ceci:
Il est facile de voir maintenant qu'Orange déplace la CW et la CCW verte. Comment savoir dans quelle direction ils se déplacent sans lisser la forme?
Nouvelle image
Réponses:
Tracez une ligne à l'infini et comptez combien de fois vous traversez la forme (paire ou impaire), sans compter le segment où se trouve la créature. Vérifiez ensuite si la créature va à gauche ou à droite de cette ligne.
Dans cet exemple, nous traversons la forme deux fois (donc même) et nous allons vers la gauche. Le résultat est immédiat de ce tableau:
En pseudocode:
la source
Cela dépend des informations dont vous disposez dans votre structure de données de forme, mais une créature se déplaçant en CW le long du contour d'une forme aura toujours l'intérieur de la forme à sa droite, et une créature en mouvement CCW aura l'intérieur de la forme sur sa gauche.
la source
la source
Vous devez savoir dans quel sens le polygone est défini, dans quel sens les sommets le contournent.
Si vous ne le savez pas, vous pouvez le calculer en calculant l'aire du polygone:
Le signe du résultat (positif ou négatif) vous dira s'il est dans le sens horaire ou antihoraire. Vous devez essayer ceci pour voir de quel côté il s'agit pour vous car cela dépend de votre système de coordonnées.
Si la forme est dans le sens horaire:
Si la forme est dans le sens inverse des aiguilles d'une montre:
la source
Il semble que Trevor ait déjà couvert cette question, mais voici ma solution:
calculer la zone couverte par votre forme, ce qui signifie
en utilisant la zone calculée comme ci-dessus, vous pouvez facilement dire si la forme elle-même est dans le sens horaire ou non. il n'est dans le sens des aiguilles d'une montre que si la zone est inférieure à zéro.
vérifiez si les objets se déplacent de la même manière que les sommets sont dans l'ordre ou dans la direction opposée.
la source