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....
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
'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 ?
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 .
et ici, apres un multiplication de quaternion, dans un autre exemple,
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; }
il semble qu'on 'normalise' systématiquement le résultat:
alors je me demandait pourquoi? a quoi ca sert de 'normaliser' des
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 ); }
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
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.
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
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.Envoyé par Eric Boisvert
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.
dans le cas d'une équation de plan... normalisé l'équation ca revient unEnvoyé par DrTopos
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
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.
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
Un conseil. Si tu veux vraiment comprendre la 3D, il est indispensable d'apprendre un minimum de géométrie projective.
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
Partager