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 :

Pourquoi normaliser un quaternion


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite

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

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Par défaut Pourquoi normaliser un quaternion
    Tout est dans le titre...
    j'ai l'equation d'un plan
    ax + by + cz + d =0
    dans un quaternion
    [a,b,c,d]
    pourquoi dois-je normaliser avant, apres rotation etc....
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

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

    Informations forums :
    Inscription : Août 2005
    Messages : 417
    Par défaut
    'quaternion' ou quadruplet ? Je ne crois pas que les quaternions (de Hamilton) aient un rapport avec ton problème. De plus qu'entends tu par 'normaliser' . Il est certain que les coordonnées a, b, c, et d dans l'équation du plan sont des coordonnées 'homogènes', c'est à dire que si k n'est pas nul akx + bky +ckz +dk = 0 représente le même plan. Est-ce que 'normaliser' veut dire trouver un 'k' convenable pour un certain usage ?

  3. #3
    Membre émérite

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

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Par défaut
    J'avoue que je suis un peu perdu dans tout ca...

    C'est juste que j'ai trouvé une librairie en C pour des manipulations
    de matrice et de vecteur.

    2 fonctions existes une pour les vecteurs .
    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
     
    pour veteur 3x3:
    Vecteur normalize()
      {
        float length = length();
        x /= length;
        y /= length;
        z /= length;
        return this;
      }
    pour vecteur 4x4:
     void normalize()
      {
        float square = x * x + y * y + z * z + w * w;
        float dist = (square > 0.0f) ? (1.0f / (float) Math.sqrt(square)) : 1.0f;
     
        x *= dist;
        y *= dist;
        z *= dist;
        w *= dist;
      }
    et ici, apres un multiplication de quaternion, dans un autre exemple,
    il semble qu'on 'normalise' systématiquement le résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
      quaternion_multiply( QUAT *qr, QUAT *qa, QUAT *qb )
        {
        qr.scalar = v3_dot( &qa->vector, &qb->vector );
     
        v3_cross(  &va, &qa->vector, &qb->vector );
        v3_scalef( &vb, &qa->vector, &qb->scalar );
        v3_scalef( &vc, &qb->vector, &qa->scaler );
        v3_add(    &va,         &va, &vb );
        v3_add(    &qr->vector, &va, &vc );
     
        quaternion_normalise( qr );
        }
    alors je me demandait pourquoi? a quoi ca sert de 'normaliser' des
    vecteurs et/ou matrices... peut-importe leurs grosseurs...(1x3, 1x4 ou 3x3 et 4x4)

    merci

    (J'ai écrit trop vite...)
    (j'ai fait quelques corrections au sujet des exemples)
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

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

    Informations forums :
    Inscription : Août 2005
    Messages : 417
    Par défaut
    Si j'ai bien compris, il s'agit simplement de diviser un vecteur par sa propre norme. C'est utile dans certaines questions, par exemple dans le procédé d'orthonormalisation de Graam-Schmidt, qui permet de transformer des bases en bases orthonormées.

    Ceci dit, on ne peut pas répondre sans savoir précisément ce qu'on fera du vecteur normalisé.

    Pour ce qui est de l'exemple de multiplication des quaternions, il est possible qu'il s'agisse de la multiplication dans le corps des quaternion (de Hamilton). Ca y ressemble, mais je ne dispose pas d'assez d'informations. J'imagine que tout cela s'inscrit dans un cadre de graphisme 3D ?

    Normaliser les vecteurs dans un espace euclidien a un sens. Par contre, normaliser une matrice 3x3, peut avoir de nombreux sens différents. Il faudrait replacer tout ça dans son contexte.

  5. #5
    Membre émérite

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

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Par défaut
    En faite, je crois pas qu'on puisse 'normaliser' une matrice 3x3 ou 4x4?
    si oui, j'en ignore aussi le but.

    c'est effectivement dans le cadre d'une application 3D.
    Vous dites que
    Normaliser les vecteurs dans un espace euclidien a un sens.
    j'aimerais s'avoir quel sens.

    est-ce que 'normaliser' un vecteur serait un peu comme simplifier une
    fraction: 10/15 serait en faite = 2/3?
    on simplifie simplement les chiffres pour qu'il soit plus facile à travailler?

    ou là... je viens de dire une grosse bêtise?
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

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

    Informations forums :
    Inscription : Août 2005
    Messages : 417
    Par défaut
    Citation Envoyé par Eric Boisvert
    est-ce que 'normaliser' un vecteur serait un peu comme simplifier une
    fraction: 10/15 serait en faite = 2/3?
    on simplifie simplement les chiffres pour qu'il soit plus facile à travailler?
    Non, quand on normalise un vecteur, c'est à dire quand on le divise par sa norme, on obtient un vecteur différent, mais colinéaire au premier. D'ailleurs, cette normalisation n'est posssible que si le vecteur est non nul. Pour pouvoir en dire plus il faudrait savoir précisément ce qu'on faire de ce vecteur.

    Ceci dit, dans le cas de l'équation d'un plan, comme il s'agit de coordonnées homogènes, la normalisation est toujours possible et ne change pas le point (il ne s'agit en fait plus vraiment d'un vecteur, mais d'un point dans un espace projectif). Cette normalisation peut être justifiée par le besoin de pouvoir comparer facilement des points, par exemple tester leur égalité. S'ils sont normalisés, cette comparaison ne demande que des tests, alors que s'ils ne le sont pas elle exige au minimum quelques multiplications. Ceci me parait être une justification tout à fait valable de la normalisation. Il ne faut pas oublier qu'en 3D on ne travaille pas dans des espaces vectoriels, mais dans des espaces projectifs. Ca change un certain nombre de choses.

  7. #7
    Membre émérite

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

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Par défaut
    Citation Envoyé par DrTopos
    Cette normalisation peut être justifiée par le besoin de pouvoir comparer facilement des points, par exemple tester leur égalité. S'ils sont normalisés, cette comparaison ne demande que des tests, alors que s'ils ne le sont pas elle exige au minimum quelques multiplications.
    dans le cas d'une équation de plan... normalisé l'équation ca revient un
    peut à simplifier une fraction non?
    j'veux dire par là que je n'aurait pas le même nominateur et dénominateur mais j'aurais cependant la même fraction....
    si je normalise mon équation de plan... mes chiffres changes mais j'ai
    toujours le même plan?

    mon but est éventuellement de faire tourner mon plan
    dans les x,y,z par rapport à un autre point qui n'est pas l'origine.

    je crois pas qu'il me soit utile de n'ormaliser mon plan?
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

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

    Informations forums :
    Inscription : Août 2005
    Messages : 417
    Par défaut
    Oui, dans le cas du plan la normalisation ne change pas le plan. De toute façon, j'ai l'impression que cette normalisation ne sert qu'au titre d'optimisation. Donc elle n'est peut-être pas indispensable. Quoiqu'en 3D il faut souvent aller vite.

    Il est clair par exemple que si tu veux vérifier que deux equations représentent le même plan, c'est beaucoup plus rapide si les équations sont déjà normalisées, car il suffit de vérifier que les coefficients sont les mêmes, alors que si elles ne le sont pas il faut vérifier que les coefficients sont proportionnels,ce qui impose de faire des produits d'extrèmes et de moyens.

  9. #9
    Membre émérite

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

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Par défaut
    Alors Gros Merci DrTopos.
    J'm'y connais pas tellement en vecteur, matrice et algèbre linéaire...
    je vous écris avec un livre de cours sous la main....
    Géométrie vectorielle une approche linéaire (de Monique Ste-Marie)

    (C'est pas mon livre...) mais j'aissaie d'appliquer ces notions
    dans du code pour ré-écrire des macros 3D qui sont rempli de....
    projection 2D avec plein de: if then else sin cos atan etc....
    sans commentaires!


    ca avance bien!
    Grace à vous tous et le boucain!
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

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

    Informations forums :
    Inscription : Août 2005
    Messages : 417
    Par défaut
    Un conseil. Si tu veux vraiment comprendre la 3D, il est indispensable d'apprendre un minimum de géométrie projective.

  11. #11
    Membre émérite

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

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Par défaut
    géométrie projective.... :
    faudrait commencer à zéro alors...
    si il y a des liens sur web pour néophyte je suis partant!
    sinon, je ferais mes recherches à ce sujet...
    Merci du tuyau.
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

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

Discussions similaires

  1. [Templates] Quel système utilisez-vous ? Pourquoi ?
    Par narmataru dans le forum Bibliothèques et frameworks
    Réponses: 270
    Dernier message: 26/03/2011, 00h15
  2. Que choisir ? C# , VB.NET, C++, Delphi ? pourquoi ?
    Par Louis-Guillaume Morand dans le forum Général Dotnet
    Réponses: 475
    Dernier message: 08/04/2010, 19h27
  3. Programmer encore en VB 6 c'est pas bien ? Pourquoi ?
    Par Nektanebos dans le forum Débats sur le développement - Le Best Of
    Réponses: 85
    Dernier message: 10/03/2009, 14h43
  4. Pourquoi ces directives #ifndef ... en haut des .h
    Par Patrick PETIT dans le forum C
    Réponses: 8
    Dernier message: 06/03/2003, 23h53

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