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#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    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
    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
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    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 averti
    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
    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
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    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 averti
    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
    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
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    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;
    }

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