Kommunauty
Connexion
Inscription

Les matrices de rotation


Lucas Messages : 830

Amis du soir, bonsoir.

Au fil du développement d'un logo, je me suis vite rendu compte que les calculs simples de trigos pour de la 3D c'est vite limité…

Basiquement, la version actuelle utilise d'après ce que j'ai compris 2 matrices de rotations sur l'axe X et Y (J'avais trouvé le calcul similaire sans passer par les matrices, mais l'opération est la même au final), seulement voilà, gros problème, les rotations autour des axes ne sont pas réalisées simultanément, ce qui fait qu'elles s'appliquent en local au lieu de global.

J'ai donc entendu dire que la méthode la plus utilisée dans le domaine de la 3d était les quaternions, MAIS :

Je n'ai jamais vu les matrices et je doute de les voir cette année, ainsi j'implore votre aide si vous en savez un peu plus que moi sur ce sujet !

samedi 1 septembre 2012

Ideophage Messages : 115

Bonjour,

Tout ce que je sais sur les quaternions, c'est que ça s'apparente aux complexes (ça je connais, permettent des transformations du plan très facilement). Il doit y avoir non pas trois (complexes : 2) mais quatre coordonnées (?). Comme une nombre complexe s'écrit a+bi, un quaternion s'écrit a+bi+c?+d? (désolé, je me souviens à moitié), et chacun des i, ? et ? ont un carré égal à -1. Si on multiplie un point par i, ça le fait tourner d'un quart de tour, dans le plan, donc à mon avis, si on multiplie un quaternion par l'un des ?, ça doit le faire tourner d'un quart de tour dans l'axe z.

Hum... je ne dois pas être très clair, je me rappelle au fur et à mesure que j'écris. Je reprends :

Nombre complexe : a+bi. a et b sont les coordonnées, et i est tel que i² = -1. Si on se place sur une droite, on remarque que si on multiplie un nombre par -1, ça le fait tourner d'un demi-tour autour de 0. On remarque que si on multiplie par -1 encore, ça double l'angle (180° (pi) pour un demi, 360 pour (-1)*(-1)). Donc Je-ne-sais-plus-qui s'est dit que si on multiplie par l'une des racines de 1 (-1, il y a 1 aussi mais pas intéressant), ça fait la moitié de la multiplication par 1 (en rotation autour de 0), il doit exister un nombre qui fait un quart de tours. Ce nombre est i, justement. Si on multiplie deux fois par lui, on retrouve un tours complet. edit : rotation avec 1 = 0°, moitié de 0 = 0.

Pour lier avec un graphique, on prend un nombre imaginaire 3+5i. Il représente le point (3;5). Si on le multiplie par i, ça fait :

3i+5*(i*i) = -5+3i

On remarque que ça fait bien un quart de tour autour de l'origine. On peut faire des transformations fantastiques avec ça, mais si je continue, je vais partir dans les fractales... Pour les rotations d'un certain angle, voici une technique : on prend le sinus et le cosinus de l'angle et on fait : position * (cos+sin*i).

Pour les quaternions, ça doit être le même principe, sauf qu'il y a quatre dimensions. Je ne sais pas pourquoi 4 et pas 3... hem... je pense qu'il faut avoir la table de multiplication de ces cousins de i (je suis allé sur wikipédia, c'est j et k, la table y est), et ignorer la quatrième composante. Ensuite, pour faire des rotations, on utilise la même technique. <-- edit : archi faux.

Peut-être que c'est un peu fouillis... tu as compris quand même ?

edit : fautes de frappe.

dimanche 2 septembre 2012 (Dernière édition dimanche 2 septembre 2012)

Lucas Messages : 830

Merci pour ces explications !

Bon, c'est un peu plus clair, je vais faire des recherches de mon côté, et je te reposerai peut-être des questions après .

Tu as un cours là-dessus ?

dimanche 2 septembre 2012

Ideophage Messages : 115

Non, pas de cours. Par contre, je me suis trompé, il ne suffit pas d'ignorer la quatrième coordonnée k. Je fais moi aussi des recherches, ça m'intéresse.

dimanche 2 septembre 2012

Lucas Messages : 830

D'après ce que j'ai compris, les quaternions se définissent par 4 valeurs : w (l'angle de rotation autour de l'axe), et x, y, z qui définissent le vecteur symbolisant l'axe.

Voilà voilà, c'est tout, pour le moment.

dimanche 2 septembre 2012

Dawlin Messages : 3381

Pourquoi ne pas utiliser les matrices ? Je ne vois pas pourquoi "les rotations autour des axes ne sont pas réalisées simultanément".

J'ai lu la page sur les quaternions et d'une part c'est assez intéressant, mais d'autres on peut réussir à extraire ce dont vous vous avez besoin uniquement en lisant l'action par conjugaison. Si vous arrivez à écrire une u en fonction de alpha et de v, vous pouvez faire une fonction qui vous gère n'importe quelle rotation sur n'importe quel axe.

Je vous conseille de vous entraîner avec Maple qui fait du calcul formel, parce que sinon c'est chaud, je vois même pas comment simuler des nombres imaginaires dans JS ou flash ou autre... Bref je ne saurais pas programmer de calcul formel...

Sinon juste comme ça, faites attention qu'on est dans des applications où la multiplication n'est pas commutative

lundi 3 septembre 2012

Ideophage Messages : 115

Salut,

Voici un comparatif des techniques : youtube.

On peut réussir à extraire ce dont vous avez besoin uniquement en lisant l'action par conjugaison.

Oui, je ne pense pas que la plus grande difficulté soit de comprendre comment fonctionnent les quaternions (et encore, cette partie explique juste comment s'en servir), mais de comprendre comment on est arrivé là, le pourquoi. J'ai compris comment ça fonctionne, pourquoi c'est plus avantageux que les matrices, mais pas le raisonnement qui y conduit, et je pense que je ne les utiliserais pas tant que je ne le verrais pas. Je pense que je peux chercher longtemps... m'enfin bon, pour le moment, c'est pas impératif pour moi.

Dans la FAQ maths pour les jeux de Développez, ils parlent aussi des quaternions, mais juste pour l'utilisation.

Pas compris non plus le "les rotations autour des axes ne sont pas réalisées simultanément". Est-ce que tu veux dire que les rotations autour des axes x, y et z sont réalisées séparément (pas possible de tourner autour d'un axe spécifique, comme avec les quaternions ?

edit : wha ! c'est mon 42ème message !

lundi 3 septembre 2012 (Dernière édition lundi 3 septembre 2012)

Lucas Messages : 830

Voyez-vous, avec les matrices uniquement, on réalise les rotations les unes après les autres, dans un ordre choisi au préalable (d'abord X, puis Y et Z, ou l'inverse, bref, ce qu'on veut).

MAIS du coup ça cause beaucoup de problèmes, notamment celui du gimbal lock ou blocage de cadran.

Les rotations sont dites locales.

Mais avec le passage aux quaternions à l'aide d'une quatrième dimension permet, d'après ce que j'ai compris permet de réaliser toutes les rotations en une fois ou d'ajouter plus de liberté, comme tourner autour de n'importe quel axe.

Pour le coup de porter ça dans un langage informatique, je ne pense pas que ça pose trop de soucis.

On peut faire disparaître les i,j,k de la définition du quaternion et tricher un peu, mais c'est ce qui est utilisé dans la majorité des trucs sur ordi utilisant la 3d, donc je pense que ça doit être relativement facile à implémenter.

D'ailleurs, je ne comprends pas du tout l'intérêt de i pour les nombres complexes.

Parce que bon, d'après moi, i * i = -1, c'est pas possible hein.

J'avais vu la FAQ de Développez, c'est plutôt pratique .


edit : wha ! c'est mon 42ème message !

YEAH ! Moi j'ai oublié de faire une vanne sur mon 666ème, ptain.

lundi 3 septembre 2012

Ideophage Messages : 115

Parce que bon, d'après moi, i * i = -1, c'est pas possible hein.

Pas dans R, oui. Mais i ne provoque pas de contradiction, donc tout va bien.

MAIS du coup ça cause beaucoup de problèmes, notamment celui du gimbal lock ou blocage de cadran.

Je ne comprend pas trop où est le problème, avec ce blocage de cadran... Si on fait tourner les axes, c'est normal qu'il est possible que deux se superposent Pourquoi faire bouger les axes les uns par rapport aux autres ? Le mieux serait de faire faire tourner tous les axes de la même manière (on reste en repère local). Ou alors faire des rotations globales, mais ça, ça pourrait être moins pratique.

Mais le mieux reste je pense les quaternions.


Moi j'ai loupé le 23ème, mais c'est moins grave (cf nombre 23, le film). reste : 237, 333, 666, 1337,1408. Hum... finalement non.

lundi 3 septembre 2012

Lucas Messages : 830

Nan mais en fait ce sont les quaternions qui permettent les rotations globales !

C'est pour ça que j'en ai besoin .

Parce que avec les matrices seules, si on fait pivoter sur l'axe Y, l'axe X se trouve décalé aussi, d'où les rotations locales.

lundi 3 septembre 2012

Page suivante »