Inscription / Connexion Nouveau Sujet
Niveau autre
Partager :

Comment trouver les angles de rotation depuis 2 vecteurs

Posté par
The BasheR
15-05-08 à 15:30

Bonjour je suis en train de faire un petit programme de visualisation de scènes en 3D et je voudrais qu'on puisse m'indiquer la position de la caméra (ça c'est ok) ainsi que le point vers lequel elle regarde.
Et depuis ces points j'aimerais pouvoir trouver les angles (x, y et z) de rotation qui correspondent, mais je n'y arrive pas

Je fais mes rotations avec des matrices, en commençant par la rotation en x, puis y et enfin z.
Jusqu'à maintenant j'ai fait plusieurs essais mais je n'ai jamais réussi à trouver parfaitement les angles qui me permettent de regarder le point que je veux depuis la position que je veux.
Pour infos une rotation de 0 pour chaque axe me fait regarder le long de l'axe X. J'ai donc le X devant moi, le Y qui va vers ma droite et le Z qui va vers le haut.

Mon dernier essai était avec des coordonnées sphériques mais ça ne marche toujours pas, je regarde ailleurs.

Est-ce que vous pourriez me mettre sur la piste s'il vous plait?

Merci d'avance.

Posté par
carpediem
comment trouver les angles de rotation de 2 vecteurs 15-05-08 à 18:01

salut

je ne sais pas trop ce que tu veux dire mais peut-être en calculant le produit scalaire et le produit vectoriel de tes vecteurs tu peux avoir qq chose...

Posté par
The BasheR
re : Comment trouver les angles de rotation depuis 2 vecteurs 15-05-08 à 19:06

Eh bien faire le produit scalaire va en effet me donner un angle, celui entre les 2 vecteurs, mais le probleme c'est qu'il me faudrait l'angle en x, en y et en z. En fait j'aimerais a partir d'une position, et d'un point qu'on regarde trouver la rotation euclidienne (en s'aidant des matrices) qui va faire que ma caméra va regarder mon point. Mais le probleme c'est que je ne vois plus trop comment faire

Je ne sais pas si je suis clair donc je vais essayer d'expliquer ça plus clairement:

- J'ai un point qui est ma position (celle de la caméra).
- J'ai un point qui est le point qu'on veut regarder (vers lequel la caméra doit se tourner).

Je fais dans mon programme des rotations euclidiennes avec des matrices que voicies:

Matrice pour la rotation suivant l'axe des x:
| 1       0      0    |
| 0    cos(a) -sin(a) |
| 0    sin(a)  cos(a) |

Matrice pour la rotation suivant l'axe des y:
| cos(a)       0      0    |
| 0    cos(a) -sin(a) |
| 0    sin(a)  cos(a) |

Posté par
The BasheR
re : Comment trouver les angles de rotation depuis 2 vecteurs 15-05-08 à 19:10

Désolé mais j'ai eu un petit probleme et j'ai posté plus tot que prévu, je reprends donc au moment ou je parlais de la rotation suivant l'axe de y:

Matrice pour la rotation suivant l'axe des y:
| cos(a)    0    sin(a) |
| 0         1      0    |
| -sin(a)   0    cos(a) |

Matrice pour la rotation suivant l'axe des z:
| cos(a)  -sin(a)  0    |
| sin(a)   cos(a)  0    |
|   0       0      1    |



Et donc je que je voudrais c'est trouver chaqu'un des 3 angles x, y et z qui me permettrez de regarder mon point.

Merci de vos reponses.

Posté par
carpediem
comment trouver les angles de rotation de 2 vecteurs 15-05-08 à 19:19

avec ton repère et en notant i, j et k les vecteurs d'une base associée à ton repère alors si je comprends bien ta caméra est pointée dans la direction u et tu veux la pointer dans la direction v alors u^v (produit vectoriel) te donne un vecteur normal au plan (u,v) et te donne l'axe de rotation outour duquel ta caméra tourne et u.v (produit scalaire) te donne l'angle de la rotation à effectuer
traduis cela dans la base pout avoir ton résultat et la matrice de rotation faisant passer de u à v en tournant autour de u^v

Posté par
The BasheR
re : Comment trouver les angles de rotation depuis 2 vecteurs 15-05-08 à 19:28

Merci de ta réponse.

Donc si je comprends bien, u est le vecteur par lequel je regarde en ce moment, et v est celui par lequel je veux regarder.

Ensuite faire u^v revient t'il à faire que le vecteur final sera:

w :
|  Ux * Vx
|  Uy * Vy
|  Uz * Vz

?


Pour le produit scalaire il va falloir que je fasse pour trouver l'angle:
angle = acos( ( Ux * Vx + Uy * Vy + Uz * Vz ) / ( ||u|| * ||v|| ) )

?

Par contre à la fin comment est-ce que je dois m'y prendre pour faire une rotation suivant un axe autre que x, y ou z?

Merci d'avance

Posté par
carpediem
comment trouver les angles de rotation de 2 vecteurs 15-05-08 à 19:53

soit u(a,b,c) et v(e,f,g) dans la base donnée
alors uv(bg-cf,ce-ag,af-be) pour le produit vectoriel
sinon pour l'angle c'est bon
il reste une chose c'est de savoir aussi dans quel sens tu tournes autour de uv

par contre pour les formules de la rotation autour d'un vecteur j'ai plus les formules mais tu dois trouver ça sur le oueb

Posté par
The BasheR
re : Comment trouver les angles de rotation depuis 2 vecteurs 16-05-08 à 10:21

Merci beaucoup pour ta réponse, par contre je suis en train de me dire que au final ça ne me donne pas l'angle sur les axes x, y et z séparément dont j'ai besoin

Donc est-ce qu'il y aurait moyen à partir de la rotation que j'ai là de la transformer en rotation euclidienne?

Je crois savoir (dites moi si je me trompe) que la rotation par rapport

Posté par
The BasheR
re : Comment trouver les angles de rotation depuis 2 vecteurs 16-05-08 à 10:24

Aie désolé un appuie sur TAB prématuré

Je disais donc que une rotation autour d'un axe comme on a ici ressemble à un Quaternion non?

Et donc je crois qu'il existe une facon pour passer des quaternions aux rotation matricielles avec des angles euclidiens, et donc est-ce qu'il faudrait que j'utilise cette méthode?

Merci d'avance

Posté par
carpediem
comment trouver les angles de rotation de 2 vecteurs 16-05-08 à 17:42

effectivement tu dois pouvoir décomposer ta rotation autour de u en prduit de 3 rotations autour de x, de y et de z
ce me semble-t-il

... mais pour retrouver les formules...

Posté par
The BasheR
re : Comment trouver les angles de rotation depuis 2 vecteurs 16-05-08 à 19:42

Je viens de trouver ce lien pour transformer des quaternions en rotations: http://jeux.developpez.com/faq/matquat/?page=quaternions#Q54

Je vais donc essayer de voir ce que ça donne.
Merci beaucoup pou ton aide.

Par contre j'aurais une dernière question (normalement):
Y a t'il un moyen simple de savoir dans quel sens je dois faire ma rotation autour de l'axe?

Posté par
carpediem
comment trouver les angles de rotation de 2 vecteurs 16-05-08 à 20:11

le produit scalaire te donne un angle non oirenté car il est symétrique en tes deux vecteurs
mais le produit vectoriel n'est pas symétrique (si tu permutes les 2 vecteurs tu obtiens un résultat opposé)
et tu as ||u^v||=||u|| ||v||sin (u,v) donc tu peux déterminer ton angle précisément grace à son sinus et son cosinus et savoir dans quel sens tourner

Posté par
The BasheR
re : Comment trouver les angles de rotation depuis 2 vecteurs 17-05-08 à 12:45

J'avoue ne pas comprendre entièrement ce raisonnement

Je comprends que le produit scalaire donne un angle non orienté, et je comprends que le produit vectoriel n'est pas symétrique, par contre je ne comprends pas tout à fait la formule ni comment je peux en tirer profit dans mon cas.

Est-ce que tu pourrais me la détailler plus?

Merci d'avance

Posté par
The BasheR
re : Comment trouver les angles de rotation depuis 2 vecteurs 20-05-08 à 17:19

Petit UP S'l vous plait, j'aimerais pouvoir avancer mais je reste toujours un peu bloqué



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Inscription gratuite

Fiches en rapport

parmi 1675 fiches de maths

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !