Le site produit croisé mesure le degré de perpendicularité de deux vecteurs. Imaginez que chaque arête de votre polygone est un vecteur dans le plan x-y d'un espace tridimensionnel (3-D) xyz. Alors le produit croisé de deux arêtes successives est un vecteur dans la direction z, (direction z positive si le second segment est dans le sens des aiguilles d'une montre, direction z négative s'il est dans le sens inverse des aiguilles d'une montre). La magnitude de ce vecteur est proportionnelle au sinus de l'angle entre les deux bords originaux, il atteint donc un maximum lorsqu'ils sont perpendiculaires, et s'amenuise pour disparaître lorsque les bords sont colinéaires (parallèles).
Ainsi, pour chaque sommet (point) du polygone, calculez la grandeur du produit en croix des deux arêtes adjacentes :
Using your data:
point[0] = (5, 0)
point[1] = (6, 4)
point[2] = (4, 5)
point[3] = (1, 5)
point[4] = (1, 0)
Étiquette donc les bords consécutivement comme
edgeA
est le segment de point0
à point1
et
edgeB
entre point1
à point2
...
edgeE
est entre point4
et point0
.
Alors le sommet A ( point0
) se situe entre
edgeE
[De point4
à point0
]
edgeA
[De point0
jusqu'au "point 1".
Ces deux bords sont eux-mêmes des vecteurs, dont les coordonnées x et y peuvent être déterminées en soustrayant les coordonnées de leurs points de départ et d'arrivée :
edgeE
= point0
- point4
= (1, 0) - (5, 0)
= (-4, 0)
et
edgeA
= point1
- point0
= (6, 4) - (1, 0)
= (5, 4)
et
Et le produit en croix de ces deux arêtes adjacentes est calculé à l'aide du déterminant de la matrice suivante, qui est construite en plaçant les coordonnées des deux vecteurs sous les symboles représentant les trois axes de coordonnées ( i
, j
, & k
). La troisième coordonnée (zéro) est présente parce que le concept de produit en croix est une construction 3D, et nous étendons donc ces vecteurs 2D en 3D afin d'appliquer le produit en croix :
i j k
-4 0 0
1 4 0
Étant donné que tous les produits croisés produisent un vecteur perpendiculaire au plan des deux vecteurs multipliés, le déterminant de la matrice ci-dessus n'a qu'une valeur de k
(ou axe z).
La formule pour calculer l'ampleur de la k
ou la composante de l'axe z est
a1*b2 - a2*b1 = -4* 4 - 0* 1
= -16
L'ampleur de cette valeur ( -16
), est une mesure du sinus de l'angle entre les 2 vecteurs originaux, multiplié par le produit des magnitudes des 2 vecteurs.
En fait, une autre formule pour sa valeur est
A X B (Cross Product) = |A| * |B| * sin(AB)
.
Donc, pour revenir à une simple mesure de l'angle, vous devez diviser cette valeur, ( -16
), par le produit des amplitudes des deux vecteurs.
|A| * |B|
= 4 * Sqrt(17)
= 16.4924...
Donc la mesure de sin(AB) = -16 / 16.4924
= -.97014...
Il s'agit de savoir si le segment suivant le sommet s'est courbé vers la gauche ou la droite, et de combien. Il n'est pas nécessaire de prendre l'arc-sinus. Tout ce qui nous intéresse, c'est sa magnitude, et bien sûr son signe (positif ou négatif) !
Faites de même pour chacun des 4 autres points autour du chemin fermé, et additionnez les valeurs de ce calcul à chaque sommet
Si la somme finale est positive, vous êtes allé dans le sens des aiguilles d'une montre, négative, dans le sens inverse des aiguilles d'une montre.
22 votes
VEUILLEZ NOTER : la réponse acceptée, et de nombreuses réponses après celle-ci, nécessitent beaucoup d'additions et de multiplications (elles sont basées sur des calculs d'aire qui se terminent par des valeurs négatives ou positives ; par exemple, la " formule du lacet "). Avant de mettre en œuvre l'une de ces réponses, pensez à La réponse de lhf qui est le plus simple/rapide - sur la base des éléments suivants wiki - orientation d'un polygone simple .
3 votes
J'y pense toujours en termes de produit croisé de deux vecteurs adjacents. Si je marche autour du périmètre du polygone, ma tête pointe hors du plan. Je croise le vecteur hors du plan avec mon vecteur de direction de la marche pour obtenir la troisième direction dans mon système de coordonnées. Si ce vecteur pointe de manière à ce que l'intérieur soit à ma gauche, c'est le sens inverse des aiguilles d'une montre ; si l'intérieur est à ma droite, c'est le sens des aiguilles d'une montre.