IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Mathématiques Discussion :

Rotation d'un vecteur 3D


Sujet :

Mathématiques

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 8
    Par défaut Rotation d'un vecteur 3D
    Bonjour,

    Je suis en train de modéliser une caméra dans un espace 3D. J'ai un point (la position de la caméra), et un vecteur (son orientation).

    Pour déplacer la caméra ça va, par contre pour changer son orientation je suis en difficulté. J'ai bien pris connaissances des 3 matrices de rotation dans l'espace, mais je ne sais pas comment les combiner.

    Je n'y arrive que dans des cas bien définis. Par exemple lorsque l'orientation est "parallèle" au sol, (on va dire l'axe x), je n'ai qu'à multiplier mon vecteur d'orientation par la matrice de rotation par rapport à l'axe y (perpendiculaire au sol). Ce qui me permet de tourner l'orientation vers la "gauche" et la "droite".

    Sauf que comme je l'ai dis, ceci ne marche que si le vecteur d'orientation est parallèle à l'axe x, car si le vecteur est orienté ailleurs, la "gauche" et la "droite" ne sont plus les mêmes, et ce n'est plus (en tout cas pas que) autour de l'axe y qu'il faut tourner.

    C'est là que je bloque, pouvez-vous m'aider svp ?

  2. #2
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 283
    Par défaut
    Bonjour

    As-tu lu wikipedia ? cet article (clic ici) ? Et surtout le paragraphe Matrice de rotation à partir d'un axe et d'un angle ? Qu'en penses-tu ? C'est ta solution, non ?

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 8
    Par défaut
    Merci pour ta réponse,

    J'ai bien vu cette section, du coup au lieu de choisir l'axe x, y, ou z je peux choisir mon propre axe de rotation.
    ça voudrait dire quoi, que pour tourner "à gauche" ou "à droite" je devrais définir un vecteur orthogonal et "vertical" à mon vecteur de direction et tourner autour ?
    Et que pour tourner "vers le haut" et "vers le bas" ce serait un vecteur orthogonal "horizontal" à mon vecteur de direction ?

    Je vais essayer ça en tout cas. Merci pour ton indication.

    Edit : C'est quoi ce signe d'opérateur sur le coefficient du milieu de la matrice ? Le symbole qui ressemble à un '+' et un '-' ?

  4. #4
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 283
    Par défaut
    ça voudrait dire quoi, que pour tourner "à gauche" ou "à droite" je devrais définir un vecteur orthogonal et "vertical" à mon vecteur de direction et tourner autour ?
    Oui.
    Et que pour tourner "vers le haut" et "vers le bas" ce serait un vecteur orthogonal "horizontal" à mon vecteur de direction ?
    Oui.

    Ta caméra a 2 vecteurs principaux:
    • Un vecteur dont la direction est la direction dans laquelle regarde la caméra. (Reste à voir le sens)
    • Un vecteur qui indique le haut de l'image.

    C'est ce dernier vecteur autour duquel il faut tourner pour aller à gauche ou à droite.

    C'est quoi ce signe d'opérateur sur le coefficient du milieu de la matrice ? Le symbole qui ressemble à un '+' et un '-' ?
    Je n'ai pas de signe bizarre. As-tu une tâche sur ton écran ? Ou une erreur d'affichage ? Pour zoomer sur Firefox, Ctrl + "+". Ctrl +0 pour revenir à 100%

  5. #5
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 201
    Par défaut
    Même quand la caméra est '''parallèle au sol''' (je mets plein de guillemets volontairement, la notion de tourner à droite ou à gauche peut être ambigüe.
    Comme dit Flodelarab, la caméra peut être parallèle au sol, mais elle n'a pas forcément la tête en haut.

  6. #6
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 8
    Par défaut
    Merci ça a permis de résoudre mon problème
    Un petit détail quand même : lorsque je tourne autour de l'axe horizontal (donc quand j'incline "vers le haut" ou "vers le bas"), je ne peux que tourner sur un angle de PI/2, c'est à dire jusqu'à ce que mon vecteur d'orientation soit parallèle à mon axe vertical.
    Peu avant d'atteindre cet angle, l'inclinaison de la direction se fait de plus en plus doucement jusqu'à ce que je sois parallèle, ensuite je ne peux plus continuer. Je n'ai pas ce problème quand je tourne autour de l'axe vertical.
    Pour calculer mon axe horizontal, je fais le produit vectoriel de mon vecteur d'orientation avec le vecteur (0, 1, 0).
    Pour calculer mon axe vertical, je fais le produit vectoriel de mon vecteur d'orientation avec le vecteur de l'axe horizontal calculé juste avant.

    Je n'ai pas de signe bizarre. As-tu une tâche sur ton écran ? Ou une erreur d'affichage ? Pour zoomer sur Firefox, Ctrl + "+". Ctrl +0 pour revenir à 100%
    Oui désolé en faite il suffisait de zoomer, je n'avais pas remarqué que c'était une image D'ailleurs si d'autres personnes me lise et veulent réécrire la matrice : attention aux signes, la matrice n'est pas symétrique. Je m'en suis aperçu après une heure de debug...

    Même quand la caméra est '''parallèle au sol''' (je mets plein de guillemets volontairement, la notion de tourner à droite ou à gauche peut être ambigüe.
    Comme dit Flodelarab, la caméra peut être parallèle au sol, mais elle n'a pas forcément la tête en haut.
    Effectivement, il faut multiplier le vecteur de l'axe vertical par -1 dans ce cas.

  7. #7
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 283
    Par défaut
    Pour calculer mon axe horizontal, je fais le produit vectoriel de mon vecteur d'orientation avec le vecteur (0, 1, 0).
    Que cela me parait bizarre.
    Cela signifie que si les vecteurs sont colinéaires, ton produit vectoriel est le vecteur nul, et tu ne peux plus tourner ??? Tu te trompes. Cela interdit une caméra d'être dans l'axe (0,5,0) par exemple. Et je ne vois pas en l'honneur de quoi.

    Tu as un premier vecteur pour la direction visée par la caméra. Un deuxième vecteur qui indique le haut de l'image; le produit scalaire de ce dernier vecteur avec le premier est nul. Et pour lever ou baisser la caméra, tu détermines un troisième vecteur qui est le produit vectoriel des deux premiers. Ce troisième vecteur n'a pas vraiment de sens concret, contrairement aux 2 autres. Et je rappelle que tous ces vecteurs doivent être normalisés ("longueur" égale à 1).

  8. #8
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 8
    Par défaut
    Merci pour ta réponse,

    Oui effectivement c'est parce que je fais le produit vectoriel de mon vecteur de direction avec le vecteur (0, 1, 0) que je ne peux plus tourner quand ils sont colinéaires.
    Mais du coup comment je peux trouver le vecteur "qui indique le haut" ? Si u est mon vecteur de direction, v le vecteur orthogonal à u que je cherche, alors j'ai
    UxVx + UyVy + UzVz = 0
    Mais ça me donne 3 inconnues, et je vois pas comment je pourrais en fixer 1 ou 2.

  9. #9
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 283
    Par défaut
    Évidemment. Tu peux prendre un selfie de toi en portrait, en paysage, à l'envers, en biais ... Tu as 360° de possibilités. Pourtant, c'est toujours toi qui est visé.

    Les raisons qui te font déterminer le haut de l'image ne sont pas mathématiques. C'est ta volonté, ton choix.

  10. #10
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 201
    Par défaut
    La Position d'une caméra est déterminée comment :
    La position d'un 1er point (A)au centre de la caméra.
    La position d'un 2ème point (B), au centre de la lentille
    La position d'un 3ème point (C), par exemple un point en haut de la caméra.
    Quand ces 3 pts sont déterminés, la position de la caméra est parfaitement définie.

    Le point C, on peut le choisir de telle sorte que l'angle AB,AC soit un angle droit, ça va faciliter les choses.

    Et on peut aussi voir les choses autrement : un point A, et 2 vecteurs AB et AC.
    Pour faire tourner la caméra vers la droite ou la gauche, c'est une rotation autour de l'axe AC
    Pour faire tourner la caméra vers le haut ou vers le bas, on calcule dans un premier temps un point D, tel que AB AC AD soit un repère orthonormé direct. Et on fait ensuite une rotation autour de l'axe AD.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Rotation d'un vecteur
    Par ines ben alaya dans le forum MATLAB
    Réponses: 2
    Dernier message: 24/02/2015, 20h51
  2. Réponses: 0
    Dernier message: 27/04/2014, 15h55
  3. Matrice de rotation entre deux vecteurs
    Par christophe_halgand dans le forum Mathématiques
    Réponses: 10
    Dernier message: 20/03/2014, 11h24
  4. Rotation d'un vecteur (p=6)
    Par abidineb dans le forum Mathématiques
    Réponses: 2
    Dernier message: 27/04/2011, 16h33
  5. calculer les rotations à partir du vecteur direction
    Par dvince38 dans le forum Moteurs 3D
    Réponses: 3
    Dernier message: 04/07/2010, 04h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo