Bonjour, dans le cas d'un projet personnel en Javascript, je souhaite créer mon propre logiciel de graphisme. Pour la sélection des couleurs, j'utilise un cercle TSL (Teinte / Saturation / Luminance) qui a la particularité de coder une couleur pure (teinte) par rapport à un angle compris en 0 et 360° (pour la culture G : La luminance détermine l'intensité du blanc ou du noir de la couleur et la saturation l'intensité de la teinte).
On représente ainsi les couleurs par un cercle chromatique comme ci-dessous (merci Wikipedia) :
Voilà pour les explications. Maintenant, mon gros soucis est de déterminer un angle (choisi par l'utilisateur) pour en restituer une teinte.
Pour cela, je connais 3 points :
O l'origine du cercle
A qui appartient au cercle et de coordonnées (r, 0) (r rayon)
B quelconque appartenant au cercle
Grâce à ces 3 points et mes souvenirs pas si vieux que ça, j'ai décidé d'utiliser le produit vectoriel -> . = |||| . |||| . cos(, )
Bref avec quelques transformations, j'aboutis à cette forme : (, ) = acos(( . ) / (|||| . ||||))
Le soucis c'est que le résultat (que je transforme en degré) est toujours compris entre [0 ; 90[ et je ne vois pas / plus pourquoi. J'ai cherché aussi sur internet et j'ai vu que l'on peut calculer ce qu'on appelle le déterminant à la place du sinus pour avoir l'angle orienté (det = xa * yb - ya * xb). Et en ajoutant cette donnée, je me retrouve avec des angles négatifs à [ / 2 ; ] [3 / 4 ; 2] (sans dire de bêtises je l'espère).
Si quelqu'un peut m'expliquer pourquoi mon angle calculé ne pas dépasser 90, m'expliquer d'où vient cette histoire de déterminant et résoudre mon problème en passant, il aura le droit d'être dans les crédits
P.S. : Si vous voulez voir un peu à quoi ça ressemble et constatez vous même mon histoire des angles qui ne varie pas au delà de 90, c'est là
./r² doit te retourner un cosinus, donc entre -1 et 1.
Et donc arccos de cette grandeur doit te retourner un angle entre 0 et Pi.
Si tu veux connaître le sens de l'angle, c'est simple, il a le signe de l'ordonnée de (ou de B si tu préfères).
Donc ton expression pour l'angle est bonne, mais il faut la multiplier par signe(yB).
Si tu ne veux pas d'angle négatif, alors lorsqu'il l'est, tu lui ajoutes 2Pi bien sûr...
Et tu auras un angle continu entre 0 et 2Pi (donc entre 0° et 360°)...
Fondamentalement, un angle entre 2 vecteurs dépends du côté suivant lequel on regarde! Par le dessus ou par le dessous: les angles ne sont pas les mêmes d'où ambiguïté.
Il faut se donner un troisième vecteur pour avoir un angle sans ambiguïté.
Dans l'exemple de Jiji-Sensei, le troisième vecteur est le vecteur "y" vertical. Ainsi les réponses de LeDino sont correctes grâce au sous-entendu que ce vecteur "y" existe dans le problème posé.
En application 3D c'est plus compliqué: quand on veut un angle entre 2 vecteurs, alors il faut se donner un troisième vecteur. En fait le troisième vecteur le plus approprié est celui suivant lequel on projette le plan contenant les 2 vecteurs. Ainsi l'on voit les 2 vecteurs vus suivant le troisième. Et l'on lève facilement l'ambiguïté de savoir si l'on regarde les 2 vecteurs par le dessus ou par le dessous!
Sans ce troisième vecteur, il ne saurait y avoir de dessus ou dessous bien défini!
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :