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 :

Algorithme de changement de repère sous C#


Sujet :

C#

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Angola

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2013
    Messages : 11
    Points : 11
    Points
    11
    Par défaut Algorithme de changement de repère sous C#
    Bonjour ,

    je me présente , je suis instrumentiste en électronique j'ai un projet en programmation pour faire un changement de repère de 6 repère vers un seul qui est le centre de gravité comme c'est représenté sur la photo

    les repères ( Z1, X1 , Y1 ) ( Z2, X2 , Y2 ) ( Z3, X3 , Y3 ) ( Z4, X4 , Y4 ) ( Z5, X5 , Y5 ) ( Z6, X6 , Y6 ) vers le repère de centre de gravité ( Z7, X7 , Y7 ) .

    pour vous avouez je ne connais strictement rien en programmation sous C# , les données que j'ai c'est que les repères me donne des angles ( theta , zeta , iota ) qu'a partir de ça que je pourrais faire le changement de repère ( translation et rotation ) pour arrivé au repère ( Z7,X7, Y7 ) .

    Si vous pouvez m'orienter ou me donnée des cours en format PDF ou autres , tutoriel où je pourrais me débrouiller tout seul j'aimerais bien au moins que j'avancé j'ai pris énormément de retard , merci d'avance
    Images attachées Images attachées  

  2. #2
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Bonjour, on utilise généralement pour ça des matrices, qui peuvent représenter la translation, la rotation et la mise à l'échelle (toutes les transformations dites "linéaires").

    On crée d'abord des vecteurs 4d (x y z w) où w vaut toujours 1 (ce quatrième composant est une simple astuce de calcul) et des matrices 4x4. En multipliant un vecteur X par une matrice M on obtient un nouveau vecteur X' défini par :
    x'[i] = M[i,0] * x[0] + M[i,1] * x[1] + M[i,2] * x[2] + M[i,3] * x[3]

    De même on peut multiplier deux matrices entre elles pour obtenir une nouvelle matrice 4x4, et représenter ainsi une composition de transformations. Autrement dit tout passage d'un repère à l'autre peut être représenté par une simple matrice 4x4 dès lors que toutes les transformations sont linéaires. Les matrices peuvent aussi être inversées, etcétéra.


    Matrice identité:
    (1 0 0 0) -> x' = x * 1 (+ y * 0 + z * 0 + w * 0)
    (0 1 0 0) -> y' = y * 1
    (0 0 1 0) -> z' = z * 1
    (0 0 0 1) -> w' = w * 1

    Matrice translation de 40 sur l'axe X :
    (1 0 0 40) -> x * 1 + w * 40
    (0 1 0 0)
    (0 0 1 0)
    (0 0 0 1)

    Matrice rotation typique autour de l'axe Z :
    (cos(a) sin(a) 0 0)
    (-sin(a) cos(a) 0 0)
    (0 0 1 0)
    (0 0 0 1)

    En cherchant "rotation matrix" ou "transformation matrix" tu obtiendras des formules plus généralistes et de plus longues explications. Note que WPF et XNA contiennent déjà des mises en œuvre de transformations matricielles.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Angola

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2013
    Messages : 11
    Points : 11
    Points
    11
    Par défaut
    Bonjour Merci de m'avoir répondu , j'aimerais savoir le truc de matrice 4x4 pour ne pas travaillé dans le 3X3 vu que je suis en 3 dimension vous pouvez m'expliquer un peu plus cette astuce ? merci beaucoup .

  4. #4
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Regarde-donc la matrice de translation, elle utilise cette quatrième coordonnée. L'exemple donnée était en effet x' = x * 1 + w * 40, ce qui donne le bon résultat si w vaut 1.
    Sans cette quatrième coordonnée, on ne peut pas écrire une matrice de translation. Pour rester avec des matrices 3x3 il faudrait avoir en plus un vecteur de translation distinct. Travailler avec des 4x4 est beaucoup plus simple.

    Si l'expression "4D" te perturbe, oublie cela : w vaudra toujours 1 et la quatrième ligne de tes matrices sera toujours "0 0 0 1". On est bien en 3D. Le seul cas où ce n'est pas vrai c'est pour des matrices de projection (pour créer un effet de perspective en imagerie 3D, typiquement la matrice de la caméra dans un jeu) et c'est une bidouille.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Angola

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2013
    Messages : 11
    Points : 11
    Points
    11
    Par défaut
    Merci infiniment , Donc quand je vais étudier tout les matrices de passage , translation et la rotation comment je vais les appliquer sous C# j'arrive pas avoir est-ce que c'est facile de faire rentrer c'est équation ou autre choses ? par exemple pour le première repère ( X1 , Y1 ,Z1 ) quand j'appliquer les équation pour revenir au repère ( X7, Y7, Z1) est-ce que je dois appliquer juste c'est équations ?

  6. #6
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Je t'en prie. A mon avis la meilleure façon de faire est de créer une classe matrice (ou d'utiliser celle de WPF ou d'une autre source) en la dotant de toutes les opérations nécessaires (multiplication matrice * matrice, multiplication matrice * vecteur, créer rotation, créer translation). Ensuite tu auras un code du genre :

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void Initialiser()
    {
        MatriceDe1Vers2 = Matrice.Rotation(Vecteur.Z, Math.PI * 0.5) * Matrice.Translation(new Vecteur(10, 0, 0));
    }
     
    Vecteur TransformerDe1Vers2(Vecteur source)
    {
        return MatriceDe1Vers2 * source;
    }

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Angola

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2013
    Messages : 11
    Points : 11
    Points
    11
    Par défaut
    Quand je créerais ce code sous C# avec une application WPF est ce que le fait de faire juste rentrer mes angles il pourra faire un changement de repère automatique ? car le but de ce projet et a la fin de réaliser une modélisation 3D de l'humain en temps réel avec mes angles obtenu .

    Le code sources dois contenir quoi exactement pour qu'il fasse directement un changement de repère automatiquement ?

  8. #8
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Pour WPF il faut regarder du côté de Transform3D et des ses descendants. Note que les créateurs de WPF ont choisi de ne pas exposer l'aspect matriciel de la rotation et de la translation, d'où la co-existence de MatrixTrandformn, TranslationTransform, etc.

    Après pour que l'UI soit mise automatiquement à jour en changeant une propriété il suffit que tu mettes la plomberie adéquate derrière, à base de INotifyPropertyChanged ou DepdendencyObject. Rien ne t'en empêche.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Angola

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2013
    Messages : 11
    Points : 11
    Points
    11
    Par défaut
    Tu me conseil de commencé par quoi maintenant vu que je débute , voir que les WPF de Transform3D et essayer d'appliquer le changement de repère ? merci encore

  10. #10
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Bonjour, oui, tu devrais commencer par les transformations de WPF, tu aurais déjà bien assez de connaissances à absorber comme ça sans avoir en plus à déboguer une classe matrice personnalisée.

Discussions similaires

  1. Changement de feuille sous Excel
    Par cstan dans le forum C++Builder
    Réponses: 4
    Dernier message: 30/06/2006, 10h19
  2. changement d'adresse sous Tomcat
    Par gloglo dans le forum Tomcat et TomEE
    Réponses: 5
    Dernier message: 29/06/2006, 10h00
  3. [VBA-W] changement de hierarchisation sous word
    Par ganga dans le forum VBA Word
    Réponses: 5
    Dernier message: 25/04/2006, 17h08
  4. URGENT : Zoom et changement de repère
    Par poca10 dans le forum MFC
    Réponses: 5
    Dernier message: 28/05/2002, 13h32

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