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

C++ Discussion :

rotation d'un point dans l'espace


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 45
    Par défaut rotation d'un point dans l'espace
    bonjour

    j'aurais besoin de l'aide des mathématiciens programmeurs ....

    je suis occupé a coder un moteur 3D et il me faudrai une fonction style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Point3D::setRotation (Point3D axe, Angle3D angle)
    avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class Point3D
     {
     float x, y, z;
     }
     
    class Angle3D
     {
     float alpha, beta, delta;
     }
    donc j'initialise un Point3D dans l'espace avec ses 3 coordonnées
    et il faudrai sa nouvelle position après une rotation autour d'un autre point (axe)

    j'ai entendu parler des quaternions mais j'y comprends rien

    il me faudrai juste une fonction avec des +, des -, des *, des /, des sin, des cos et des tableaux (j'ai aussi entendu parler de matrices)

    si c'est possible ....

    merci

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Il y a plein de façon différente de définir les angles alpha, beta et delta. Chaque façon donnera des calculs différents. Chaque façon aura du sens pour un domaine d'application particulier (par exemple, les angles qu'on se représente aisément pour la rotation d'une planète ne sont pas les mêmes que pour la rotation d'une voiture). De toute manière, savoir quels valeurs mettre pour avoir l'effet souhaité ne sera pas de tout repos.

    J'ai pour ma part dans un certain nombre de situation une préférence pour une autre définition de la rotation, par un axe et un angle unique, ce qui donnerait une interface :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Point3D::setRotation (Point3D point, Vacteur3D axe, double angle)
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 45
    Par défaut
    et que represente Vecteur3D ?

    et ton angle ne suppose une rotation que sur un axe il me semble

    comment qu'il faut faire si on veut tourner sur les 3 axes ?

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Bonjour,
    voila un bon tutorial sur la 3D.
    http://raphaello.univ-fcomte.fr/IG/Default.htm

  5. #5
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Citation Envoyé par ded jay Voir le message
    et que represente Vecteur3D ?
    L'axe de rotation. Pour la grande majorité des objets manufacturés, c'est une notion qui va de soi. Par exemple, pour une porte, ce serait l'axe z. Pour une roue, ce serait l'essieu...

    Citation Envoyé par ded jay Voir le message
    et ton angle ne suppose une rotation que sur un axe il me semble

    comment qu'il faut faire si on veut tourner sur les 3 axes ?
    On choisi une autre méthode. L'avantage de ma représentation est justement quand il n'y a qu'une seule rotation, ce qui dans certains domaines est assez courant. D'après mon expérience, le plus dur n'est pas d'écrire les équations pour que tout se passe bien à l'intérieur de la fonction calculant la rotation, ce qui de toute façon se fait une bonne fois pour toute, mais de savoir dans le reste du programme quelles valeurs de paramètres passer à cette fonction.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  6. #6
    Membre éclairé Avatar de befalimpertinent
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2007
    Messages : 561
    Par défaut
    Renseignes toi sur les quaternions pour faire ce genre de rotation

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 45
    Par défaut
    la Faq est vraiment bien decidement
    mais je ne suis pas mathématicien et les quaternions sont toujours vague pour moi
    il me faut du code pour comprendre

    pourrait-on me donner un exemple de rotation avec des quaternions ?
    comment on trouve le vecteur de rotation ?
    apres la rotation, les autres vecteurs ont donc été modifiés, comment on les retrouve ?

    merci

  8. #8
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par ded jay Voir le message
    et que represente Vecteur3D ?

    et ton angle ne suppose une rotation que sur un axe il me semble

    comment qu'il faut faire si on veut tourner sur les 3 axes ?
    Parceque c'est la base de la géométrie euclidienne... Toute rotation dans l'espace peut être représentée par une seule rotation autour d'un axe.

    On peut faire la démonstration aisément en calcul matriciel:
    Une rotation est une isométrie de type det(R)=+1 et R * t(R) = I
    Prenons deux rotations: A et B...
    t(A*B) * (A*B) = t(B) * t(A) * A * B = I
    det(A*B) = det(A) * det(B) = +1
    Du coup... A*B est une rotation....

    C'est pour cette raison que la plupart des "moteurs" 3D utilisent les quaternions pour représenter la rotation de l'objet: Un axe et un angle.
    L'avantage des quaternions est que leur composition est vraiment facile (genre complexes), qu'ils ne demande pas beaucoup de mémoire (4 flottant), et peuvent donc être entièrement combinés/utilisés côté carte graphique.

Discussions similaires

  1. Tracé de points dans l'espace
    Par bendesarts dans le forum MATLAB
    Réponses: 3
    Dernier message: 25/03/2013, 09h25
  2. Un point dans un espace à 3 dimensions
    Par idirovitch dans le forum Interfaces Graphiques en Java
    Réponses: 0
    Dernier message: 27/12/2012, 17h40
  3. [3D] Points dans un espace 3D
    Par bailamos dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 21/08/2012, 23h19
  4. Observer des points dans l'espace kernel (gaussien)
    Par acx01b dans le forum Téléchargez
    Réponses: 0
    Dernier message: 29/04/2010, 01h44
  5. Relier deux points dans l'espace par des segments perpendiculaires
    Par Poupi0 dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 27/04/2010, 15h06

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