Détection de sens

Concept :

Calculeur et Rollin sont deux scripts qui peuvent détecter le sens. Ils disposent tous les deux d'un paramètre"Angle reverse" qui sert à déterminer à partir de quel valeur il doit y avoir inversion.

Ce paramètre détermine la valeur de l'angle du secteur sphèrique pour lequel ne se produit pas l'inversion. (en vert sur les figures). Le secteur spèrique est un cone de longueur infinie et donc la pointe est située au point F1. Son axe est aligné sur le vecteur F0F1. Son angle d'ouverture est égal à "Angle reverse". Cet angle peut varier de 0 à 180°.
Le facteur déterminant est le rapport d'angle entre les vecteurs F0F1 et F1F2.

Non inversion Inversion

F0 représente la position de la roue (ou la chenille) à l'image n - 1, F1 à l'image n et F2 à l'image n+1.

Dans le cas de la figure 1 :
F0, F1 et F2 ne sont pas dans le même secteur sphèrique. Ici, on considére donc que la roue continue d'avancer. La roue tourne dans le même sens, il n'y a pas d'inversion.

Dans le cas de la figure 2 :
Ici, F0, F1 et F2 se trouvent simultanément dans le même secteur sphèrique. Ce qui veut dire que la roue revient sur ses pas, donc qu'elle fait marche arrière. Si elle fait marche arrière, il faut qu'elle tourne en sens inverse. Donc dans ce cas, nous inversons le sens de rotation de la roue.

Modifer le paramètre "Angle reverse" sert donc à déterminer la zone où la roue fait marche arrière par rapport à son précédent déplacement.

Comment ça marche ?

Nous savons, que F0 représente la position de la roue (ou la chenille) à l'image n - 1, F1 à l'image n et F2 à l'image n+1.
A partir de ça, nous déterminons les deux vecteurs V1 et V2.

V1 = [ F1.x - F0.x , F1.y - F0.y , F1.z - F0.z ]
V2 = [ F2.x - F1.x , F2.y - F1.y , F2.z - F1.z ]

Pour déterminer l'angle entre les deux vecteurs V1 et V2, nous utilisons le produit scalaire.

V1 scalaire V2 = V1.x * V2.x + V1.y * V2.y + V1.z * V2.z

Nous obtenons le cosinus de l'angle entre les vecteurs V1 et V2. Il est facile alors d'obtenir l'angle :

angle = acos (V1 scalaire V2)

Rappelez-vous les cours de maths de 2nde :

" Le produit scalaire de deux vecteurs colinéaires est égal à 1."
Deux vecteurs sont colinéaires s'ils ont la même direction.

V1 = k * V2

V1 et V2 sont de même sens si k est positif et de sens opposé si k est négatif.
Vérifions avec le cosinus :

Angle = acos 1 = 0 

- Les deux vecteurs sont donc colinéaires car l'angle entre leur direction respective est de 0°.
" Le produit scalaire de deux vecteurs est nul si ces deux vecteurs sont perpendiculaires."
Ce qui veut dire qu'il y a un angle de 90° entre les deux vecteurs.

Angle = acos 0 = 90

- Les deux vecteurs sont donc perpendiculaires.

En 2D, ou travail dans le plan, c'est facile à visualiser. Pour un vecteur 3D, la visualisation est plus abstraite mais le résultat est le même.

Valid XHTML 1.0 Strict Valid CSS!