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

Algorithmes et structures de données Discussion :

Changement de base...enfin je crois....


Sujet :

Algorithmes et structures de données

  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut Changement de base...enfin je crois....
    bonjour,
    je connais les 3 angles de rotations a effectuer sur un plan, je crois
    qu'on peut dire les angles d'Euler...? (rx,ry,rz).
    le probleme c'est que c'est angles me sont donnés par rapport à
    un système de coordonnées différent de l'origine.
    De plus, ce système peut ne pas avoir la même orientation que l'origine.

    Comment je peut transformer mes 3 angles de rotations "local" pour
    trouver 3 angles de rotation "global" (par rapport à l'origine).

    je crois que je dois effectuer un changement de base?

    Comme par exemple, faire une rotation (0,0,90) "local" sur mon plan
    devrait en réalité me donner : ( 45,45,0) en rotation global.

    je sais même pas si un changement de base est approprié?
    si quelqu'un peut m'expliquer la marche à suivre....
    Merci.

    peut-être que le problème est mal exposé aussi??
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  2. #2
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut
    je crois que tu peux t'en sortir en calculant les angles de rotation de ton système "local" par rapport au système "global".tu ajouteras ensuite ces angles aux angles "locaux".
    j'espère que j'ai été suffisamment clair et surtout que cette solution marche.


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    c'est justement au niveau du passage des angles "local" vers "global" que
    ce situe mon problème...

    je connais 3 angles qui représentent la rotation du système local par rapport au system globale.
    je connais 3 angles de rotation a effectuer sur un plan mais ces angles
    sont par rapport au system local.

    comment puis-je trouvé 3 angles équivalants mais basé sur le système global?

    Y a pas une facon de calculer avec une matrice de passage?
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  4. #4
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut
    oui,j'ai bien compris ton problème.
    je te conseille de raisonner en termes d'axe de rotation(qui est une droite).
    logiquement tu devrais connaitre les coordonnées de cette droite dans la base locale.ils faut les recalculer dans la base globale.
    par exemple:
    supposons que tu as une rotation de 45° autour de l'axe Xl (dans la base locale).il s'avere ensuite que cet axe est la 1ere bissectrice dans ta base globale.cet axe est donc l'image de l'axe X(dans la base globale) par la rotation d'axe l'axe Z(tjs dans la base globale) et d'angle 45°.
    en conclusion;pour obtenir l'angle global dans cet exemple:tu commences d'abord par appliquer à ton objet une rotation de 45° et d'axe Z puis une rotation de 45° et d'axe X puis enfin la rotation inverse de la 1ere.

    je sais que c'est très loin d'etre un post clair,mais bon j'ai essayé de faire du mieux que je pouvais.j'espère que ça t'aidera un minimum.


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    si je comprend un peu ce que tu me dit...
    tu fait une première rotation 'bidon' pour aligner si on veux tes 2 axes...
    ensuite tu ajoute la rotation local comme demandé....
    et finalement tu fais une rotation inverse '-bidon' pour remettre ton
    system local en place?
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  6. #6
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut
    Citation Envoyé par Eric Boisvert
    si je comprend un peu ce que tu me dit...
    tu fait une première rotation 'bidon' pour aligner si on veux tes 2 axes...
    ensuite tu ajoute la rotation local comme demandé....
    et finalement tu fais une rotation inverse '-bidon' pour remettre ton
    system local en place?
    oui en gros c'est ça.je crois que les rotations 'bidons' correspondent aux matrices de passages(à verifier)


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    j'avoue que ca me semble un peu la facon "intuitive" de le faire...
    mais j'imagine qu'il y a une façon plus directe de "transposer" des angles locals vers des angles globals?

    je crois que le terme utilisé dans ce cas serait un changement de base?
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  8. #8
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    je crois que le terme utilisé dans ce cas serait un changement de base?
    Bien que je sois pas certain d'avoir compris ce que tu dis (ta manière de décrire ton Pb n'est pas claire), ceci me semble l'interprétation la plus vraisemblable
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  9. #9
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut
    Citation Envoyé par Eric Boisvert
    j'avoue que ca me semble un peu la facon "intuitive" de le faire...
    mais j'imagine qu'il y a une façon plus directe de "transposer" des angles locals vers des angles globals?

    je crois que le terme utilisé dans ce cas serait un changement de base?
    c'est vrai tu as raison.honnetement je ne me souviens pas des formules donnant les matrices de changements de base.essaye de voir dans un cours d'algebre niveau DEUG,et recherche sur google.
    si tu ne trouve rien,previens moi,j'essayerai de retrouver


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  10. #10
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    Alors j'essaie d'une autre facon.

    comment je pourrait afficher textuellement les angles de rotation global
    a effectuer sur un objet si je connais les angles locals à appliquer et
    l'orientation du system local par rapport au system global?

    y a surment une facon de passer d'un system à l'autre?

    exemple:
    rotation à effectuer:
    "Mode Local": 90,0,0 ou "Mode Global" : 0,45,45

    comment si j'ai le local...je trouve le global et vise-versa?
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  11. #11
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut
    une rotation est une application: espace->espace.
    tu peux donc determiner la matrice(3x3) d'une rotation en calculant les images des vecteurs de la base locales.
    ensuite tu reecris cette matrice dans la base globale en utilisant les matrices de passages.(voir cette adresse: http://www.meca.unicaen.fr/Enseignement/Licence/Math/cours/node18.html)
    et là tu as ta rotation dans la base globale,et donc son axe et son angle tous les deux dans la base globale.


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  12. #12
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    Je crois que vous sur-estimez mes compétence mathématique....

    Je suis aller voir le lien... mais je suis loin d'être capable d'interpréter
    les formules et du coup, de le mettre en oeuvre dans mon application.

    désolé, mais ca me prendrait quelque chose de moins théorique...
    un peu plus près d'un similie code....
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  13. #13
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut
    Citation Envoyé par Eric Boisvert
    Je crois que vous sur-estimez mes compétence mathématique....

    Je suis aller voir le lien... mais je suis loin d'être capable d'interpréter
    les formules et du coup, de le mettre en oeuvre dans mon application.

    désolé, mais ca me prendrait quelque chose de moins théorique...
    un peu plus près d'un similie code....
    désolé mais c'est assez long à expliquer.tu sais c'est pas compliqué!!, si tu sais ce qu'est une matrice,tu ne devrais avoir de difficultés,si tu ne le sais pas il faut te documenter,je te dis ça pour plusieurs raisons:
    1)d'abord parceque c'est trop long à expliquer sur un forum,sinon j'aurai été ravi de le faire.
    2)ensuite parceque les matrices sont les amies de l'homme,c'est un condensé d'informations,il est donc utile et interessant de les connaitre et d'y consacrer un peu de temps.

    désolé de ne pas pouvoir en faire plus


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  14. #14
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    Merci tout de même!

    j'vais cependant trouvé quelqu'un pour m'aider à comprendre ce lien...
    je crois éffectivement qu'il y a tout ce que j'ai besoin sur cette page...

    Merci
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 73
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 417
    Points : 372
    Points
    372
    Par défaut
    Bonjour.

    Je crois que le problème vient surtout du fait de l'utilisation des angles d'Euler. Il est relativement facile de trouver la matrice d'une rotation à partir des angles d'Euler, mais l'opération inverse est quasiment désespérée. Il en résulte qu'un changement de base en termes d'angles d'Euler me semble être très périlleux.

    Il faut abandonner les angles d'Euler et représenter toutes les rotations par des matrices 3x3. J'ai déjà donné des explications détaillées sur ces questions de rotations ici:

    http://www.developpez.net/forums/vie...158754#2158754

  16. #16
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    Et si j'oubliait les matrices...
    j'imagine dans ce cas que le "gimbal lock" me guette?

    voici en faite une petite image qui représente peut-être mieux mon
    problème...



    "MidDepth" représente un plan.
    j'ai une fonction qui me permet de tourné ce plan
    par rapport à n'importe quelle point du système global.
    cette fonction demande présentement en paramètre les éléments suivant:
    - l'équation d'un plan
    - les coordonnées d'un point de rotation
    - 3 angles de rotation
    J'ai réussi d'ailleur à l'écrire grace à vous tous....
    http://www.developpez.net/forums/viewtopic.php?t=373726

    cependant, les gens pour qui j'ai créé cette fonction, me demandent
    d'utiliser le système local pour donner les angles de rotation du plan.

    donc comme dans mon image, pour une rotation local de 90 au tour de x,
    je dois passer à ma fonction une rotation de 90 au tour de z.

    ca semble relativement facile lorsque tout est à angle droit mais
    lorsque le système local est vraiment "croche" par rapport au système global... alors là...je m'y perd vite...

    voilà, je peux pas être plus claire maintenant....

    Merci
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  17. #17
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut
    c'est ce qu'on avait compris aussi
    est-ce que tu peux expliquer plus en details la fonction qui fait tourner le plan?voir mieux nous donner son algorithme?


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  18. #18
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    voici l'algorithme:
    la fonction attend les parametres suivant:
    equation du plan: ax+by+cz+d=0 sous forme de vecteur: [a,b, c, d]
    point de rotation: rx,ry,rz
    angle de rotation euler: aex,aey,aez
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    je batie une matrice de rotation mr avec mes angles de rotations
    je multiplie le vecteur transposé du plan par la matrice mr
    j'obtiens alors a' b' et c'
    ensuite, je calcule d'
    comme ca:
    d' = d+(a-a')rx+(b-b')ry+(c-c')zr
    ma fonction retourne le vecteur : [a,' b', c', d'] qui
    représente l'équation du plan tourné.
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  19. #19
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut
    comment tu batis mr avec le point de rotation et les angles d'euler?
    (je ne vois pas comment t'arrives à definir l'axe et l'angle de ta rotation
    avec ces données )
    cette fonction reçoit bien l'equation du plan dans le repere local et renvoie l'equation de son image par une rotation toujours dans le repere local?


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  20. #20
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    mr est batis selement avec les angles de rotation.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
        A       = cos(angle_x);
        B       = sin(angle_x);
        C       = cos(angle_y);
        D       = sin(angle_y);
        E       = cos(angle_z);
        F       = sin(angle_z);
     
        AD      =   A * D;
        BD      =   B * D;
     
        mat[0]  =   C * E;
        mat[1]  =  -C * F;
        mat[2]  =  -D;
        mat[4]  = -BD * E + A * F;
        mat[5]  =  BD * F + A * E;
        mat[6]  =  -B * C;
        mat[8]  =  AD * E + B * F;
        mat[9]  = -AD * F + B * E;
        mat[10] =   A * C;
     
        mat[3]  =  mat[7] = mat[11] = mat[12] = mat[13] = mat[14] = 0;
        mat[15] =  1;
    le point de rotation intervient seulement lors du calcule du d'

    la fonction fonctionne très bien si on donne les angles de rotation
    selon le système globale.
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

Discussions similaires

  1. [Algo]Changement de base
    Par reggae dans le forum Contribuez
    Réponses: 19
    Dernier message: 13/01/2007, 14h09
  2. Réponses: 2
    Dernier message: 29/11/2006, 19h52
  3. changement de base de donnée
    Par Pitou5464 dans le forum Access
    Réponses: 3
    Dernier message: 08/08/2006, 15h37
  4. Réponses: 10
    Dernier message: 05/05/2006, 09h32
  5. [VB6] changement de base....
    Par white angel dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 18/04/2004, 18h19

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