Vous êtes sur la page 1sur 71

Date de publication : Dernire mise jour :

Ce document est, en partie, une traduction de la FAQ des Matrices et Quaternions, sorte de rfrence en ligne pour les programmeurs en ce qui concerne ces deux outils fondamentaux du dveloppement 3D. Un grand merci donc son auteur original, Hexapod, ainsi qu' Mustapha Bismi pour sa traduction franaise. Il a galement t complt par une partie sur la trigonomtrie, partie essentielle du dveloppement de jeux. Cette FAQ a t corrige et est maintenue par des membres comptents de http:// www.developpez.com, toutefois il se peut qu'une erreur se soit glisse dans celle-ci ou qu'une information soit manquante. Dans ce cas n'hsitez pas nous contacter et contribuer l'enrichissement de cette FAQ. Enfin, je tiens remercier toutes les personnes qui ont contribu amliorer et corriger cette FAQ : LeGreg, j.p.mignot, Le Furet, Matthieu Brucher et dourouc05 Sur ce, l'quipe vous souhaite une bonne lecture !

Ont contribu cette FAQ :

Hexapod - Laurent Gomila - LeGreg - loka gouessej - Thibaut Cuvelier (Site web) ( Blog ) -

1. Gnralits (2) ........................................................................................................................................................................... 4 2. Matrices (45) ..............................................................................................................................................................................5 2.1. Bases (5) ........................................................................................................................................................................... 6 2.2. Arithmtique (8) ............................................................................................................................................................. 11 2.3. Dterminants et inverses (12) .........................................................................................................................................17 2.4. Transformations (20) ...................................................................................................................................................... 27 3. Quaternions (15) ...................................................................................................................................................................... 41 4. Trigonomtrie (20) ...................................................................................................................................................................50 4.1. Bases (10) ....................................................................................................................................................................... 51 4.2. Relations trigonomtriques (4) ....................................................................................................................................... 63 4.3. Triangles rectangles (2) .................................................................................................................................................. 65 4.4. Triangles quelconques (4) .............................................................................................................................................. 68

-3Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Sommaire > Gnralits Comment participer cette FAQ ?


Auteurs : Laurent Gomila , Si vous avez remarqu une erreur, une simple faute d'orthographe, si vous souhaitez nous faire part d'un manque, ou n'importe quoi d'autre : vous pouvez contacter le responsable par MP (loka), ou poster la suite de ce sujet consacr la FAQ des Matrices et Quaternions. Merci !

Que contient cette FAQ ?


Auteurs : Laurent Gomila , Cette FAQ a t rdige pour un public de dveloppeurs 3D. Ainsi vous n'y trouverez pas un cours magistral d'algbre linaire de niveau bac +2, mais des explications simples, allant droit au but, permettant aux dveloppeurs 3D d'avoir sous la main une base de connaissance de rfrence. De plus, les formules donnes sont le plus souvent possible accompagnes du pseudo-code ou du code C correspondant. Cependant, il ne faut pas penser que parce que simple cette FAQ est inexacte : sa relecture et sa maintenance sont effectues par des personnes comptentes en mathmatiques, et un effort est constamment fait quant l'exactitude des informations fournies.

-4Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Sommaire > Matrices

-5Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Sommaire > Matrices > Bases Qu'est ce qu'une matrice ?


Auteurs : Hexapod , LeGreg , Une matrice est un outil mathmatique utilis dans beaucoup de domaines dont la 3D. On peut les reprsenter comme un tableau en deux dimensions contenant des valeurs scalaires (entires, relles ou complexes). On peut raliser sur les matrices des oprations proches de celles que l'on applique sur les nombres rels comme l'addition, la soustraction, la multiplication ou l'inversion. Cependant cause de leur nature plus complexe certaines de ces oprations peuvent tre dfinies de plusieurs faons diffrentes. Par exemple la multiplication peut tre membre membre ou utiliser une formule qui multiplie les lignes de l'une contre les colonnes de l'autre. Une matrice avec M lignes et N colonnes est appele une matrice MxN. Les lments d'une matrice peuvent tre rfrencs l'aide de deux valeurs d'index. La notation mathmatique "classique" les assigne aux variables 'i' (lignes) et 'j' (colonnes). Par exemple, si l'on considre une matrice de taille 4x4, alors les lments de la matrice sont indxs par les couples lignes|colonnes :

L'lment en haut droite de la matrice, i = 0 et j = 3, est identifi comme suit : Mi,j = M0,3 Une matrice n'est pas seulement un tableau de valeurs mais elle reprsente une transformation d'un espace de dpart vers un espace d'arrive. Si par exemple, on a un vecteur colonne deux dimensions, alors on peut dfinir le vecteur colonne transform dans un espace trois dimensions comme la multiplication d'une matrice 2x3 par ce vecteur colonne (pour la multiplication on peut considrer le vecteur colonne comme une matrice 1x2). Une telle transformation est appele linaire parce qu'elle respecte certaines proprits comme la conservation des facteurs d'chelle (et a un point fixe qui est l'origine). Les matrices les plus utilises en informatique graphique sont donc celles qui transforment les vecteurs deux dimensions ou trois dimensions. Cela inclut notamment les matrices 2x2 qui reprsentent les transformations linaires du plan 2D (rotation, mise l'chelle autour de l'origine, miroir), et les matrices 3x3 qui reprsentent les transformations linaires de l'espace en 3D (rotation, mise l'chelle autour de l'origine, miroir). Les matrices que traitent les cartes graphiques dans la partie "transformation et clairage" sont des matrices 4x4. La raison d'tre de ces matrices, c'est qu'elles reprsentent de manire trs pratique certaines oprations non linaires dans l'espace en 3D (translation, projection conique sur un plan), en ajoutant une quatrime coordonne (la coordonne homogne). Nous n'allons pas dtailler ce que sont les coordonnes homognes et les espaces projectifs qui y sont associs mais pour faire simple, il y a une loi qui permet de passer de l'espace 3D l'espace homogne et vice versa :

-6Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

coordonnes 3D -> coordonnes homognes : (x, y, z) -> (x, y, z, 1) coordonnes homognes -> coordonnes 3D : (x, y, z, w) -> (x/w, y/w, z/w) Comme dit prcdemment, c'est une transformation non linaire mais qui permet en contrepartie d'extraire la partie "linaire" d'oprations comme la translation et la projection conique. Ces deux oprations tant parmi les plus courantes en 3D par ordinateur, il est donc logique que les cartes graphiques les acclrent. On peut galement rajouter une troisime coordonne "homogne" des coordonnes 2D pour les mmes raisons. On peut galement utiliser des matrices beaucoup plus larges pour des applications comme le traitement d'images (convolutions), le calcul de probabilits (chaines de markhov), l'intelligence artificielle (les rseaux de neurones), l'algorithmique de base (recherche sur les graphes), etc. C'est l'outil de base du scientifique.

Qu'appelle-t-on l'ordre d'une matrice ?


Auteurs : Hexapod , L'ordre d'une matrice est l'autre dnomination de la taille d'une matrice. Une matrice M lignes et N colonnes est dites d'ordre MxN.

Comment reprsenter une matrice en C ou en C++ ?


Auteurs : Hexapod , LeGreg , Les reprsentations des matrices peuvent tre diffrentes d'un programme un autre. Il faut notamment faire attention aux conventions sur les notations qui, si elles sont mlanges, apporteront leur lot de bugs dans vos programmes. En C et en C++, il y a une manire naturelle de reprsenter un tableau, via un tableau de flottants deux dimensions :

float matrice[10][10];

Ce qui permet de se rfrer l'lment m(i,j) par un simple

m_ij = matrice[i][j];

Ce n'est videmment pas la seule manire possible, on peut se rfrer aux lments d'une matrice dans une tableau une seule dimension :

float matrice[100];

Et accder aux lements avec un calcul un peu plus complexe :

m_ij = matrice[i + j * 10];

-7Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

C'est l que la convention est importante, parce que l'aurait tout aussi bien pu y accder par :

m_ij = matrice[i * 10 + j];

Il est galement possible de nommer chaque lment sparment et les runir dans une structure ou une classe. Ou encore les nommer par colonnes ou par lignes en conservant la notation tableau.

struct Matrice1 { float _11, _12, _13; float _21, _22, _23; float _31, _32, _33; }; struct Matrice2 { float ligne1[3]; float ligne2[3]; float ligne3[3]; };

Vous rencontrerez probablement toutes ces notations suivant les programmes et parfois mlanges pour tirer partie de la meilleure performance de l'un (passer les vecteurs colonnes/lignes directement), ou la plus grande facilit dboguer de l'autre. Enfin, en C++, on essaye gnralement d'encapsuler toutes ces considrations dans des classes qui implmentent des mthodes permettant de raliser les oprations usuelles sans se soucier de la reprsentation interne (la meilleure solution de toute vidence). Attention aux conventions, si l'API prvoit que les lments d'un vecteur colonne sont adjacents en mmoire on essaye en gnral de choisir la mme convention que celle de l'API que l'on utilise, pour des raisons pratiques et pour viter des bugs de conversions. Mieux : certaines API comme par exemple Direct3D proposent en standard une classe MATRIX qu'il est sans doute intressant de rutiliser lorsque l'on dmarre un programme partir de zro. Pour les autres, il existe galement de nombreuses bibliothques indpendantes permettant de manipuler les matrices : boost::uBLAS (C++) MTL (C++)

Quels sont les avantages utiliser des matrices ?


Auteurs : Hexapod , L'une des premires questions sur les matrices est : "pourquoi sont-elles tellement utilises en informatique ?". Intuitivement, il semble que la surcharge de aux boucles for et aux multiplications de matrices devrait plus ralentir l'application qu'autre chose. Cette objection ne tient pas compte de l'utilisation des registres CPU pour grer les compteurs et des caches de donnes qui optimisent l'accs mmoire. De plus, en suivant une approche mathmatique pour dfinir les algorithmes 3D, il est possible de prvoir et de planifier le design d'un systme d'animation 3D. Une telle approche permet trs simplement d'envisager l'implmentation de l'animation des personnages, des courbes splines, de la cinmatique inverse, ...
-8Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Nanmoins, une des objections qui revient frquemment est qu'il serait plus rapide de juste multiplier chaque paire de coordonnes par les coefficients de rotation pour cette axe, au lieu de raliser une multiplication vecteur / matrice. ie. Rotation en X transforme Y et Z Rotation en Y transforme X et Z Rotation en Z transforme X et Y Ce qui revient ceci : Soient un vertex V = (x, y, z), les angles de rotation (A, B et C) et les translations (D, E, F). L'algorithme est dfini comme suit :

sx cx sy cy sz cz

= = = = = =

sin(A) cos(A) sin(B) cos(B) sin(C) cos(C) x * cz + y * cz z y * sz x * sz

// Setup - une seule fois

x1 = y1 = z1 =

// Rotation de chaque vertex

x2 = x1 * cy + z1 * sy y2 = z1 z2 = z1 * cy - x1 * sy x3 = x2 y3 = y2 * cx + z1 * sx z3 = z2 * cx - x1 * sx xr = x3 + D yr = y3 + E zr = z3 + F // Translation de chaque vertex

Voici le taux de calcul pris par cet algorithme : Initialisation 6 fonctions trigonometriques 6 affectations Par sommet 12 affectations 12 multiplications 9 additions

Admettons qu'il est possible de raliser la mme chose par des multiplication de matrices... Pour une matrice 4x4, on a : Initialisation 6 fonctions trigonometriques 18 affectations 12 multiplications 6 soustractions Diffrence 0 -12 +12 +6 3 affectations 9 multiplications 6 additions Par sommet 0 -9 -3 -3 Diffrence

-9Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

En comparant les deux tables, on peut constater que la prparation d'une matrice de rotation cote au moins 12 multiplications et 12 affectations en plus. Nanmoins, alors que cela peut sembler trange, l'conomie vient du calcul de chaque vertex. En utilisant la multiplication de matrice, l'conomie faite en calculant juste 4 vertex rattrape la dpense faite plus haut !

Comment relier les matrices au systme de coordonnes ?


Auteurs : Hexapod , La relation entre les matrices 3x3 ou 4x4 et le systme de coordonnes est simple. Les 3 premires colonnes de la matrice dfinissent les vecteurs direction respectivement des axes X, Y et Z. Si une matrice 4x4 est dfinie en tant que :

Alors, le vecteur direction pour chaque axe est le suivant : Axe X = [A E I] Axe Y = [B F J] Axe Z = [C G K]

- 10 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Sommaire > Matrices > Arithmtique Qu'est ce que la matrice identit ?


Auteurs : Hexapod , La matrice identit est une matrice qui a autant de colonnes que de lignes, et pour laquelle tous les lments tels que i = j valent 1 et les autres 0. Par exemple :

Qu'est ce que la diagonale d'une matrice ?


Auteurs : Hexapod , La diagonale principale d'une matrice est l'ensemble des lments pour lesquels le numro de la ligne est gal celui de la colonne (Mij o i = j). Dans le cas de la matrice identit, seul les lments sur la diagonale sont mis la valeur 1, tandis que les autres sont 0.

Qu'est ce que la transpose d'une matrice ?


Auteurs : Hexapod , La transpose d'une matrice M, note MT, est la matrice gnre par l'inversion des lments de la matrice d'origine par rapport la diagonale : Mtij = Mji Cette opration est valable sur toutes les matrices, carres ou non. Soit M :

La transpose de M est :

- 11 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Si la matrice est une matrice de rotation, la transpose est la rotation inverse.

Comment ajouter deux matrices ?


Auteurs : Hexapod , L'addition peut s'exprimer comme suit : Rij = Mij + Lij Nanmoins, les deux matrices doivent tre de taille identique. Par exemple :

Comment soustraire deux matrices ?


Auteurs : Hexapod , Cette opration est aussi simple que l'addition : Rij = Mij - Lij Nanmoins, les deux matrices doivent tre de tailles identiques. Par exemple :

- 12 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Comment multiplier deux matrices ?


Auteurs : Hexapod , Il faut multiplier chaque lment d'une ligne de la premire matrice avec chaque lment d'une colonne de la seconde et faire la somme. On peut l'exprimer comme suit :

Si les deux matrices sont d'ordres : M = AxB et L = CxD Alors les deux valeurs B et C doivent tre identique. Dans ce cas, la matrice rsultante est d'ordre AxD. De plus, il est possible de multiplier une matrice 4x4 par une matrice 4xN, mais pas l'inverse. Par exemple, si M est dfinie par :

et L par :

- 13 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Alors, la taille de la matrice rsultante est 2x4 :

Comment lever une matrice une puissance quelconque ?


Auteurs : Hexapod , Une matrice peut tre leve n'importe quelle puissance entire. Nanmoins, il y a plusieurs restrictions. Pour chaque puissance, la matrice doit rester carre, ie. avoir le mme nombre de lignes et de colonnes. Par exemple, M-1 est l'inverse de la matrice. M0 gnre la matrice identit M1 ne modifie pas la matrice M2 lve la matrice au carr M3 lve la matrice au cube

Elever une matrice une puissance suprieure 1 revient la multiplier par elle-mme un nombre spcifique de fois. Par exemple, M2 = M x M M3 = M x M x M

- 14 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Elever la matrice identit n'importe quelle puissance conserve la matrice identit : In = I.

Comment multiplier un ou plusieurs vecteurs par une matrice ?


Auteurs : Hexapod , Le meilleur moyen de raliser cette tche est de traiter la liste de vecteurs comme une simple matrice, dont chaque vecteur represente un vecteur colonne. Si N vecteurs doivent tre multiplis par une matrice 4x4, ils peuvent tre traits comme une unique matrice 4xN : Soit la matrice :

Et la liste de vecteurs suivante :

Remarquez qu'une ligne de termes constants est ajoute la liste de vecteurs, tous 1. Cette ligne ne devrait pas exister. C'est simplement pour permettre la correspondance entre les ordres de M et de V. Exemple de multiplication :

- 15 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Pour chaque vecteur de la liste, il y aura un total de 12 multiplications, 16 additions et 1 division (pour la perspective). Si la matrice est une matrice de rotation ou de translation, la division peut tre annule.

- 16 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Sommaire > Matrices > Dterminants et inverses Qu'est ce que le dterminant d'une matrice ?
Auteurs : Hexapod , Le dterminant d'une matrice est un rel qui permet entre autre de savoir si la matrice admet ou non un inverse. S'il est nul, aucun inverse n'existe. Le dterminant n'est calculable que sur les matrices carres (possdant autant de lignes que de colonnes). Par exemple, soit la matrice un seul lment :

Pour une matrice de cette taille, le dterminant est simplement la valeur de l'lment. Du coup, l'inverse est simplement l'inverse de cet lment :

Si cette valeur est non nulle, l'inverse existe. Dans le cas de la matrice identit, l'inverse est la matrice identit. Nanmoins, si la valeur de l'lment est nulle, le dterminant est nul galement. Essayer de calculer la rciproque de zro gnre l'infini, ce qui entraine que cette matrice n'a pas d'inverse. Pour la matrice identit, le dterminant est toujours 1. Toute matrice avec un dterminant gal 1 est dite isotropique. Ainsi, toutes les matrices de rotations sont dites isotropiques, puisque leurs dterminant est toujours gal 1. Par exemple, soit M une matrice de rotation :

Voici le calcul de son dterminant :

- 17 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Comment calculer le dterminant d'une matrice ?


Auteurs : Hexapod , Le dterminant d'une matrice se calcule l'aide des rgles de Kramer, qui permet de le calculer en dcoupant la matrice en des matrices plus petites. La formule est la suivante, pour une matrice carre M de dimension n :

o submati,j(M) dfinit la matrice compose de toutes les lignes et de toutes les colonnes de M l'exception de la ligne i et de la colonne j. Pour les petites matrices la formule est immdiate. Par exemple pour les matrices 2x2 :

Et pour les matrices 3x3 :

Qu'est ce qu'une matrice isotrope ou anisotrope ?


Auteurs : Hexapod , Une matrice isotrope est une matrice pour laquelle les sommes des carrs des lignes ou colonnes sont gales.

- 18 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Une matrice qui n'est pas dans ce cas est dite anisotrope. Quand une matrice 3x3 ou 4x4 est utilise pour tourner ou mettre l'chelle un objet, il est parfois ncssaire d'agrandir ou de rtrcir un axe plus qu'un autre. Par exemple, ca peut tre utile de vouloir dformer un personnage de type cartoon vers un axe mais pas dans les autres... Voici une matrice de ce type :

Nanmoins, bien que ce type de matrice s'applique bien pour les vertex, il se peut trs bien qu'il y ait des problme avec les normales, en particulier en ombrage de Gouraud. En effet, les donnes vertex et les normales sont multiplies par la mme matrice, ce qui dforme les normales. N'tant plus normalises, elles peuvent perturber d'autres calculs comme l'ombrage (shading) ou l'limination des parties caches (back-face culling).

Qu'est ce que l'inverse d'une matrice ?


Auteurs : Hexapod , Etant donne une matrice M, l'inverse de cette matrice, not M-1, est la matrice qui vrifie cette expression :

O I est la matrice identit. Ainsi, multiplier une matrice par son inverse gnre la matrice identit. Nanmoins, plusieurs conditions doivent tre runies pour pouvoir calculer l'inverse d'une matrice. Celles-ci incluent que la hauteur et la largeur de la matrice soient identiques, et que le dterminant de la matrice soit non nul. L'inversion d'une matrice est une tche souvent ralise, par exemple pour retrouver l'inverse d'une transformation quelconque.

Comment calculer l'inverse d'une matrice quelconque ?


Auteurs : Hexapod , En fonction de la taille de la matrice, le calul de son inverse peut tre trivial ou extrmement compliqu. Par exemple, l'inverse d'une matrice 1x1 est juste la rciproque de l'lment :
- 19 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

La rsolution pour les matrices 2x2 ou plus peut tre ralise l'aide de Comment calculer l'inverse d'une matrice 2x2 ? ou via un Comment calculer l'inverse d'une matrice l'aide d'quations linaires ?. Nanmoins, dans certains cas comme les matrices Comment calculer l'inverse d'une matrice identit ? ou de Comment calculer l'inverse d'une matrice de rotation ?, l'inverse est dj connu ou peut tre dtermin l'aide de la transpose de la matrice.

Comment calculer l'inverse d'une matrice identit ?


Auteurs : Hexapod , L'inverse d'une matrice identit est la matrice identit :

La matrice identit a pour dterminant la valeur 1.

Comment calculer l'inverse d'une matrice de rotation ?


Auteurs : Hexapod , Voici la forme gnrale de l'inverse d'une matrice de rotation 3x3 :

A noter que s'il s'agit d'une matrice de rotation autour de X, Y ou Z, inverser la matrice revient calculer sa Qu'est ce que la transpose d'une matrice ?.

- 20 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Il existe galement une autre faon de faire, si l'angle et l'axe de rotation sont connus. Il suffit de prendre l'oppos de l'angle (-20 pour 20 par exemple) et de calculer une nouvelle matrice de rotation (voir Comment gnrer une matrice de rotation pour un axe et un angle donns ?).

Comment calculer l'inverse d'une matrice l'aide de Kramer ?


Auteurs : Hexapod , Il faut commencer par calculer le dterminant de la matrice (voir Comment calculer le dterminant d'une matrice ?). Si le dterminant est non nul, l'inverse de la matrice existe. Dans ce cas, la valeur de chaque lment de l'inverse est :

Cette formule est dduite de la formulation gnrale de l'inverse en fonction du dterminant :

Avec la commatrice de M dfinie par :

Le codterminant (co_det) de l'lement i,j de la matrice M, est le dterminant de la matrice M dont on supprime la ligne i et la colonne j. Cette srie de n2 sous-matrices sont celles nommes submat(M) dans les formules prcdentes. Bien que pratique pour comprendre comment est construit l'inverse d'une matrice, elle est cependant viter dans un programme car ncessitant des calculs normments coteux au niveau du dterminant. L'inversion et le calcul de dterminant peuvent donc en gnral tre effectus de manire beaucoup plus efficace, par exemple en utilisant une triangularisation ou une dcomposition L.U.

Comment calculer l'inverse d'une matrice 2x2 ?


Auteurs : Hexapod , Pour une matrice 2x2, les calculs sont moins complexes. Soit :

Le dterminant est :

- 21 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Et l'inverse se dfinit par :

Ceci peut tre dmontr par les rgles de Kramer. Soit :

Alors, le dterminant est :

Et l'inverse s'obtient par :

Donc l'inverse de la matrice est :

- 22 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Si le dterminant est non nul.

Comment calculer l'inverse d'une matrice 3x3 ?


Auteurs : Hexapod , Pour les matrices 3x3 ou plus, l'inverse peut tre calcule soit l'aide de Kramer, soit par la rsolution d'un ensemble d'quations linaires. Si ont applique les rgles de Kramer la matrice M :

Alors, le dterminant se calcule comme suit :

En supposant que ce dterminant est non nul, alors, l'inverse de la matrice est donne par :

Ceci peut s'implmenter l'aide d'une paire de fonctions 'C' :

VFLOAT m3_det(MATRIX3 mat) { VFLOAT det; det = mat[0] * (mat[4] * mat[8] - mat[7] * mat[5]) - mat[1] * (mat[3] * mat[8] - mat[6] * mat[5]) + mat[2] * (mat[3] * mat[7] - mat[6] * mat[4]); return det; }

void m3_inverse(MATRIX3 mr, MATRIX3 ma) { VFLOAT det = m3_det(ma); if (fabs(det) < 0.0005) { m3_identity(ma); return; } mr[0] = ma[4] * ma[8] - ma[5] * ma[7] / det; mr[1] = -(ma[1] * ma[8] - ma[7] * ma[2]) / det;

- 23 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

mr[2] =

ma[1] * ma[5] - ma[4] * ma[2]

/ det;

mr[3] = -(ma[3] * ma[8] - ma[5] * ma[6]) / det; mr[4] = ma[0] * ma[8] - ma[6] * ma[2] / det; mr[5] = -(ma[0] * ma[5] - ma[3] * ma[2]) / det; mr[6] = ma[3] * ma[7] - ma[6] * ma[4] / det; mr[7] = -(ma[0] * ma[7] - ma[6] * ma[1]) / det; mr[8] = ma[0] * ma[4] - ma[1] * ma[3] / det; }

Comment calculer l'inverse d'une matrice 4x4 ?


Auteurs : Hexapod , Les mmes mthodes peuvent tre appliques aux matrices 3x3 et aux matrices 4x4. Un moyen efficace est de rutiliser les fonctions 'C' utilises pour calculer le dterminant et l'inverse d'une matrice 3x3. Pour pouvoir utiliser les rgles de Kramer, il est ncssaire de dterminer les sous-matrices :

void m4_submat(MATRIX4 mr, MATRIX3 mb, int i, int j) { int ti, tj, idst, jdst; /* Parcours des lignes */ for (ti = 0; ti < 4; ti++) { /* Si la ligne courante est infrieure celle que l'on veut supprimer on garde l'indice tel quel */ if (ti < i) idst = ti; else /* Si la ligne courante est suprieure celle que l'on veut supprimer on prend l'indice - 1 */ if (ti > i) idst = ti - 1; /* Et bien sr si on se trouve sur la ligne supprimer, on ne fait rien */ /* Mme traitement avec les colonnes... */ for (tj = 0; tj < 4; tj++) { if (tj < j) jdst = tj; else if ( tj > j ) jdst = tj - 1; /* Si on ne se trouve pas sur la ligne ou la colonne supprimer, on recopie l'lment courant dans la sous-matrice, avec le bon indice */ if (ti != i && tj != j) mb[idst * 3 + jdst] = mr[ti * 4 + tj]; } } }

Le dterminant d'une matrice 4x4 peut tre calcul comme suit :

VFLOAT m4_det( MATRIX4 mr ) {

- 24 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

VFLOAT det, result = 0, i = 1; MATRIX3 msub3; int n; /* Parcours des colonnes */ for (n = 0; n < 4; n++, i *= -1) { /* Extraction de la sous-matrice obtenue en retirant la colonne n */ m4_submat(mr, msub3, 0, n); /* Calcul du dterminant de la sous-matrice */ det = m3_det(msub3); /* Ajout au rsultat selon la formule du dterminant */ result += mr[n] * det * i; } return result; }

Et l'inverse :

int m4_inverse(MATRIX4 mr, MATRIX4 ma) { VFLOAT mdet = m4_det(ma); MATRIX3 mtemp; int i, j, sign; /* Si le dterminant est nul, on ne peut pas inverser la matrice */ if (fabs(mdet) < 0.0005) return 0; for (i = 0; i < 4; i++) for (j = 0; j < 4; j++) { sign = 1 - ((i + j) % 2 ) * 2; m4_submat(ma, mtemp, i, j); mr[i + j * 4] = (m3_det(mtemp) * sign) / mdet; } return 1; }

Ces fonctions sont d'une utilit incroyable. Elles permettent le calcul de la matrice de base pour les splines, les rotations inverses et la rsolution d'quations matricielles.

Comment calculer l'inverse d'une matrice l'aide d'quations linaires ?


Auteurs : Hexapod , Soit M :

- 25 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

telle que l'inverse existe :

Alors on a :

Donc, la matrice inverse peut tre calcule par la rsolution d'un ensemble d'quations linaires :

- 26 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Sommaire > Matrices > Transformations Qu'est ce qu'une matrice de rotation ?


Auteurs : Hexapod , Une matrice de rotation est utilise pour tourner un ensemble de points dans un systme de coordonnes. Chaque point a de nouvelles coordonnes, mais leurs distances relatives reste inchange. Toutes les rotations sont dfinies l'aide des fonctions trigonomtriques sinus et cosinus. Pour un systme de coordonnes deux dimensions, la matrice de rotation est la suivante :

Quand l'angle A est nul, on gnre la matrice identit :

Si A vaut +90 degrs, on a la matrice :

Si l'angle vaut -90 degres :

Prendre l'oppos de l'angle revient transposer la matrice. Si la matrice de rotation est multiplie par sa transpose, le rsultat est la matrice identit.

Comment gnrer une matrice de rotation d'axe X ?


Auteurs : Hexapod , Utilisez la matrice 4x4 suivante :

- 27 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Comment gnrer une matrice de rotation d'axe Y ?


Auteurs : Hexapod , Utilisez la matrice 4x4 suivante :

Comment gnrer une matrice de rotation d'axe Z ?


Auteurs : Hexapod , Utilisez la matrice 4x4 suivante :

Qu'est ce que les angles d'Euler ?


Auteurs : Hexapod , Les angles d'Euler sont le nom donn un triplet d'angles de rotation (x, y, z) reprsentant respectivement les rotations autour des axes X, Y et Z. Exemples :

(0, 0, 0) gnrera la matrice identit (aucune rotation) (90, 0, 0) est une rotation de 90 autour de X (30, 0, 55) est une rotation de 30 autour de X, suivie d'une rotation de 55 autour de Z

- 28 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

(0, 80, 90) est une rotation de 80 autour de Y, suivie d'une rotation de 90 autour de Z

Qu'est ce que le tanguage (yaw), le roulis (roll) et le piqu (pitch) ?


Auteurs : Hexapod , Ces termes sontd'origine aronautique et correspondent aux rotations l'aide des Qu'est ce que les angles d'Euler ? (systme de coordonne euclidien), relativement la base locale d'un avion. Imaginez vous un avion. L'axe Z passe par la queue et l'avant de l'appareil. L'axe X part de l'aile gauche l'aile droite. L'axe Y pointe vers le haut de l'appareil. Ainsi le piqu devient la rotation autour de l'axe X, le tanguage devient la rotation autour de l'axe Y, et le roulis la rotation autour de l'axe Z.

Comment combiner les matrices de rotations ?


Auteurs : Hexapod , Les matrices de rotations se combinent en les multipliant entre elles. Attention l'ordre dans lequel vous les multipliez ! Sinon...

Qu'est ce que le gimbal lock ?


Auteurs : Hexapod , Le problme de la perte d'un degr de libert, le gmbal lock, arrive quand on utilise les Qu'est ce que les angles d'Euler ?. Comme la matrice de rotation finale dpend de l'ordre des multiplications, il est possible que parfois, l'une des rotations autour d'un axe soit confondue avec un autre axe de rotation. Pire encore, il est devient parfois impossible de tourner l'objet suivant un certain axe. C'est le gimbal lock ! Par exemple, supposons qu'un objet est tourn dans l'ordre Z, Y et X et que la rotation autour de Y soit de 90. Dans ce cas, la rotation suivant Z se fait correctement, puisque c'est la premire. L'axe Y tourne galement correctement. Nanmoins, aprs cette rotation, l'axe X et l'axe Z sont confondus.

- 29 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Du coup, toutes rotation autour de l'axe X tourne l'objet suivant Z ! Pire encore, il est devenu impossible de tourner l'objet autour de l'axe X.

Comment rgler le problme du gimbal lock ?


Auteurs : loka , gouessej , La seule solution ce problme est de transformer les axes de rotations suivants avec les rotations prcdentes. Ces transformations requirent un outil de combinaison de rotations quelconques, ce qui s'avre plus facile avec des Qu'est ce que les quaternions ? qu'avec des matrices. On ne peut pas dire que ce sont les quaternions qui eux seuls permettent d'viter le gimbal lock, il est tout fait possible de reproduire ce problme avec des quaternions. Autrement dit, si on note R[0x,a](objet) la rotation autour de l'axe 0x et d'angle a de l'objet, R[Oy,b] la rotation autour de l'axe Oy et d'angle b et R[Oz,c] la rotation autour de l'axe Oz d'angle c, pour combiner les 3 rotations axiales, on fait :
R(objet)=R[R[R[Ox,a](Oy),b]R[Ox,a](Oz),c](R[R[Ox,a](Oy),b](R[Ox,a](objet)))

On conserve ainsi le repre local associ l'objet qui change aprs chaque rotation appliqu celui-ci, on garde ainsi tous les degrs de libert.

Quel est la manire correcte de combiner les matrices de rotations ?


Auteurs : Hexapod , En ralit, il n'y a pas de faon correcte de combiner les matrices de rotation. Nanmoins, afin de prdire les rsultats de la combinaison des matrices, un peu d'organisation est ncssaire. Le moyen le plus simple de tourner un objet est de multiplier les matrices dans cette ordre :

O M est la matrice de rotation finale, et X, Y, Z les matrices de rotations individuelles. Nanmoins, quand la vue de la camra est value, l'ordre et le signe des rotations est invers. Par exemple, si vous tes debout, et que vous vous tourner vers la droite, tout ce que vous voyez dans votre champs de vision semblera tourner vers la gauche. Par consquent, le point de vue de la camra est modlis l'aide de l'ordre suivant :

- 30 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Ceci est l'inverse (ou la transpose) de la matrice de rotation de l'objet.

Comment gnrer une matrice de rotation partir d'angles d'Euler ?


Auteurs : Hexapod , A premire vue, la mthode la plus vidente pour gnrer une matrice de rotation partir d'un ensemble d'Qu'est ce que les angles d'Euler ? est de gnrer chaque matrice individuellement et de les multiplier ensembles :

m3_rotx(mat_x, m3_roty(mat_y, m3_rotz(mat_z, m3_mult(mat_tmp, m3_mult(mat_final,

vec -> angle_x); vec -> angle_y); vec -> angle_z); mat_z, mat_y); mat_tmp, mat_x);

Cet ensemble d'appels peut tre plac dans une routine spare :

m3_fromeuler(MATRIX *mat_final, VECTOR3 *euler)

Nanmoins, la ralision de cette squence d'appels est vraiment trs inefficace en terme de temps de calculs. Etant donn que chaque matrice de rotation 4x4 doit avoir 10 lments avec la valeur 0, 2 autres avec la valeur 1, et 4 autres avec des valeurs arbitraires, prs de 75% de chaque opration matricielle est en fait pure perte ! Ceci n'inclut pas l'initialisation des matrices... Un moyen plus efficace doit tre trouv. Heureusement, il existe un autre moyen d'aboutir la matrice finale. Si nos trois matrices sont combines dans un format algbrique, l'expression suivante est dfinie :

O : M est la matrice finale X est la matrice de rotation autour de l'axe X Y est la matrice de rotation autour de l'axe Y Z est la matrice de rotation autour de l'axe Z Soit les matrices associes :

- 31 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

O A, B sont le cosinus et le sinus de la rotation autour de l'axe X, C, D sont le cosinus et le sinus de la rotation autour de l'axe Y, E, F sont le cosinus et le sinus de la rotation autour de l'axe Z. Alors, l'expression :

Peut se partager en 2 multiplications de matrices :

Evaluons M' :

D'o M devient :

- 32 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

C'est la matrice de rotation finale. En tant que matrice 4x4 :

Les valeurs individuelles de A,B,C,D,E et F sont values en premier. Ensuite, on value BD et AD puisqu'ils sont frquent.. Donc, voici l'algorithme final :

A B C D E F AD BD mat[0] mat[1] mat[2] mat[4] mat[5] mat[6] mat[8] mat[9] mat[10]

= = = = = = = =

cos(angle_x); sin(angle_x); cos(angle_y); sin(angle_y); cos(angle_z); sin(angle_z); A * D; B * D;

= C * E; = -C * F; = -D; = -BD * E + A = BD * F + A = -B * C; = AD * E + B = -AD * F + B = A * C;

* F; * E; * F; * E;

mat[3] = mat[15] =

mat[7] = mat[11] = mat[12] = mat[13] = mat[14] = 0; 1;

A l'aide des multiplications de matrices, on aurait d faire 128 multiplications, 96 additions et 80 affectations. Avec cet algorithme, on a fait seulement 12 multiplications, 6 soustractions et 18 affectations !

- 33 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Donc, par l'utilisation de l'algorithme optimis, on ralise un gain de 1000% !

Comment gnrer des angles d'Euler partir d'une matrice de rotation ?


Auteurs : Hexapod , Cette opration est exactement l'oppos de celle vue plus haut. Soit une matrice de rotation :

O A, B sont le cosinus et le sinus de la rotation autour de l'axe X, C, D sont le cosinus et le sinus de la rotation autour de l'axe Y, E, F sont le cosinus et le sinus de la rotation autour de l'axe Z. En utilisant une structure de donne C pour une matrice 4x4, les valeurs d'index sont les suivants :

En comparant les deux tables, on constate que l'lment [2] a la valeur de -D, soit -sin(Y). Donc, la rotation autour de l'axe Y peut tre calcule l'aide d'un sinus inverse. Passer le rsultat la fonction cosinus nous donnera la valeur de C. Si C est non nul, alors la rotation en X et en Z peut tre obtenue des termes respectivement sur la troisime et la premire colonne :

/* Axe X */ M[6] = -B * C; M[10] = A * C; /* Axe Z */ M[0] = E * C; M[1] = -F * C;

Les angles de rotation peuvent tre obtenus en prenant chaque paire de valeurs divises par C et en passant le rsultat aux fonctions inverses correspondantes. Si C est nul, ces calculs sont impossibles. Dans ce cas, l'angle de rotation en Y est de -90 ou de 90. Donc D vaut 1 ou -1. Dans ce cas, un gimbal lock s'est produit. Les rotations en X et Z semblent avoir le mme axe. Lors du calcul de la matrice, on a :

- 34 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

D'o :

En arrangeant :

On peut voir la matrice sous cette forme :

O : V vaut BE - AF W vaut AE + BF Ces deux valeurs peuvent tre vues comme le sinus et le cosinus d'une seule rotation. L'algorithme final est donc :

angle_y = D = -asin(mat[2]); C = cos(angle_y); angle_y *= RADIANS; if (fabs(C) > 0.005) { trx = mat[10] / C; try = -mat[6] / C; angle_x

/* Calcul de l'Angle Y */

/* Gimbal lock ? */ /* Non, donc calcul de l'angle X */

= atan2(try, trx) * RADIANS;

- 35 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

trx try angle_z } else { angle_x trx try angle_z }

= mat[0] / C; = -mat[1] / C;

/* Calcul de l'angle Z */

= atan2(try, trx) * RADIANS; /* Gimbal lock = 0; = mat[5]; = mat[4]; */

/* Angle X 0 */ /* Calcul de l'angle Z */

= atan2(try, trx) * RADIANS;

angle_x = clamp(angle_x, 0, 360); angle_y = clamp(angle_y, 0, 360); angle_z = clamp(angle_z, 0, 360);

/* Modulo ;) */

Comment gnrer une matrice de rotation pour un axe et un angle donns ?


Auteurs : Hexapod , La seule faon de gnrer ce type de matrice de rotation est l'aide des quaternions. Voir Comment convertir un axe de rotation et un angle en un quaternion ? et Comment convertir un quaternion en matrice de rotation ?.

Comment gnrer une matrice de rotation pour rendre deux vecteurs colinaires ?
Auteurs : Hexapod , Quand on dveloppe une application d'animation, un requte commune est de trouver la matrice de rotation qui "mappe" un vecteur direction sur un autre. Ce problme peut tre visualis en considrant deux vecteurs directions attachs leurs base. Donc, l'entire totalit de l'espace de rotation forme une sphre unit. En thorie, il existe un nombre infini de rotations possibles pour rendre les deux vecteurs colinaires. Tous ces axes sont dans le plan pour lequel tous les points appartenant au plan sont gale distance des deux vecteurs. Nanmoins, une seule solution est intressante en pratique. C'est le chemin qui couvre la plus petite distance angulaire entre les deux vecteurs. L'axe de rotation de ce chemin se calcule l'aide du produit vectoriel entre les deux vecteurs :

L'angle de rotation est calcul l'aide du produit scalaire entre les deux vecteurs :

- 36 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Attention, si ceux-ci ne sont pas normaliss il faudra tenir compte de leur norme dans le calcul :

Cependant, l'angle obtenu n'est pas forcment correct : en effet un cosinus peut tre obtenu avec deux angles diffrents (cos(x) = cos(-x)). Il faudra donc trouver un moyen de dterminer s'il s'agit de x ou -x.

Comment utiliser les matrices pour convertir entre deux systmes de coordonnes ?
Auteurs : Hexapod , De faon similaire au problme prcdent, nous avons besoin de "confondre" deux systmes de coordonnes. Nanmoins, il s'agit de faire correspondre 3 axes au lieu d'un seul. Les deux systmes sont reprsents par des matrices 3x3 ou 4x4. Le problme est donc de trouver la matrice de rotation qui va raliser cette tche. On peut l'exprimer mathmatiquement comme :

O : Mfinale est la matrice du systme de coordonnes final, Morig est le systme de coordonnes original et Mrot est la matrice de rotation voulue. L'objectif est de trouver Mrot. Ceci peut tre fait en r-crivant l'quation comme suit :

Ainsi, la matrice de rotation peut tre calcule via la multiplication de la matrice finale avec l'inverse de la matrice de dpart. Une fois calcule, cette matrice de rotation peut tre conserve dans un quaternion.

Qu'est ce qu'une matrice de translation ?


Auteurs : Hexapod , Une matrice de translation sert positionner un objet dans l'espace sans le tourner. Les translations en 3D sous forme matricielle ne peuvent tre ralises qu'avec des matrices 4x4 (voir Qu'est ce qu'une matrice ?). Si la translation se dfinit par un vecteur (X, Y, Z), alors on a la matrice 4x4 suivante :

- 37 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Si le vecteur est (0, 0, 0) alors la matrice correspondante est l'identit, et l'objet n'est pas modifi.

Qu'est ce qu'une matrice de mise l'chelle ?


Auteurs : Hexapod , C'est une matrice qui permet de grossir ou de rapetisser un modle 3D. Si le vecteur de mise l'chelle est (X, Y, Z) alors la matrice qui correspond est la suivante :

Si le vecteur de mise l'chelle est (1, 1, 1), alors on obtient la matrice identit et l'objet ne change pas.

Qu'est ce que qu'une matrice de dformation ?


Auteurs : Hexapod , C'est une matrice qui permet de faire en sorte qu'un modle 3D apparaisse "pench", comme les caractres italiques par exemple. En 3 dimensions, 6 directions de dformation existent : Etirer X selon Y Etirer X selon Z Etirer Y selon X Etirer Y selon Z Etirer Z selon X Etirer Z selon Y

Ces 6 transformations peuvent se combiner dans une seule matrice :

- 38 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

O Sij reprsente une dformation de l'axe I selon l'axe J.

Comment raliser une interpolation linaire entre deux matrices ?


Auteurs : Hexapod , Etant donnes deux matrices de transformation, le problme est de trouver le moyen de dterminer les positions intermdiaires par une variable paramtrique t, avec t variant de 0.0 1.0. Ceci peut se faire en convertissant les deux matrices en Qu'est ce que les angles d'Euler ? ou sphrique (quaternions) et un vecteur translation. Dans les deux cas, chaque matrice est convertie en une paire de vecteurs 3D. L'interpolation entre chacun de ces deux vecteurs peut tre ralise via l'quation d'interpolation linaire classique :

O : Vr est le vecteur rsultant Va est le vecteur position de dpart Vb est le vecteur position finale Cette quation s'applique aussi bien aux vecteurs de la translation qu' celui de la rotation. Une fois dtermines, la translation et la rotation rsultantes sont converties dans la matrice intermdiaire voulue.

Comment raliser une interpolation cubique entre quatre matrices ?


Auteurs : Hexapod , Etant donnes quatres matrices, le problme consiste trouver un moyen pour dterminer les positions intermdiaires spcifies par la variable paramtrique t. Ceci peut tre ralis en faisant usage de l'interpolation cubique. Comme pour l'interpolation linaire, les quatres matrices sont converties dans leurs vecteurs rotations et translations correspondant (Euler ou sphrique). Chaque ensemble de 4 vecteurs est alors converti en un unique vecteur gomtrique G. A l'aide des mathmatiques des splines, ce vecteur est converti en une matrice d'interpolation M. Si G est dfini comme tel :

- 39 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Alors, la multiplication par la matrice de base :

Va gnrer une matrice d'interpolation 3x4 Mi :

Ceci peut tre implment l'aide d'une multiplication standard matrice-vecteur. L'interpolation peut tre faite par l'usage de la variable paramtrique t :

Le vecteur rsultant peut tre converti en une matrice de rotation ou de translation. Il doit tre not que les chemins de rotation gnrs peuvent sembler quelque peu acrobatiques. C'est normal dans le sens que l'algorithme essaye de trouver le chemin avec le minimum de rotations entre les 4 vecteurs. Des Qu'est ce que les angles d'Euler ? ou sphriques, ces derniers semblent en gnral tre plus "propres" pour cette interpolation.

- 40 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Sommaire > Quaternions Qu'est ce que les quaternions ?


Auteurs : Hexapod , Les quaternions permettent d'tendre la notion de rotation en 3 dimensions celle en 4 dimensions. Ils permettent ainsi d'viter le Qu'est ce que le gimbal lock ? et l'implmentation de rotation plus continue et plus prcise. Un quaternion est dfini via l'usage de 4 valeurs relles (x, y, z, w). Elles sont calcules par une combinaison des 3 coordonnes de l'axe de rotation et de l'angle correspondant.

Quel est le rapport entre les quaternions et l'animation 3D ?


Auteurs : Hexapod , Comme mentionn plus haut, les Qu'est ce que les angles d'Euler ? ont quelques dfauts ds l'ordre dans lequel sont ralises les rotations. Les quaternions solutionnent ce problme. Au lieu de tourner un objet via une srie de rotations successives, les quaternions permettent au programmeur de tourner un objet autour d'un axe arbitraire et d'un angle quelconque. La rotation est nanmoins toujours ralise par des calculs matriciels. Nanmoins, au lieu de multiplier les matrices ensembles, les quaternions les reprsentant sont multiplis. Le rsultat final est reconverti en la matrice dsire. Les quaternions offrent aussi l'avantage de permettre l'interpolation. Ceci permet des rotations plus souples et plus ralistes.

Comment calculer le conjugu d'un quaternion ?


Auteurs : Hexapod , Ceci peut tre fait en inversant le signe de la partie vectorielle du quaternion :

quaternion_conjugate(QUAT *qr, QUAT *qa) { qr->qw = qa->qw; qr->qx = -qa->qx; qr->qy = -qa->qy; qr->qz = -qa->qz; }

Comment calculer la norme d'un quaternion ?


Auteurs : Hexapod , La norme se calcule en multipliant le quaternion par son conjugu.

- 41 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Ce qui peut s'implmenter comme suit :

QFLOAT quaternion_magnitude(QUAT *qa) { return sqrt(qa->qw * qa->qw + qa->qx * qa->qx + qa->qy * qa->qy + qa->qz * qa->qz)); }

Comment normaliser un quaternion ?


Auteurs : Hexapod , Un quaternion non nul peut se normaliser de la mme manire qu'un vecteur non nul : on le divise par Comment calculer la norme d'un quaternion ?. Un quaternion dont la norme vaut 1 est appel quaternion unitaire.

Comment calculer l'inverse d'un quaternion ?


Auteurs : Hexapod , Calculer l'inverse d'un quaternion revient calculer son Comment calculer le conjugu d'un quaternion ?, dans le cas o celui-ci est Comment normaliser un quaternion ?. S'il n'est pas normalis, on calcule l'inverse de cette manire :

Comment multiplier deux quaternions ?


Auteurs : Hexapod , Soit deux quaternions Q1 et Q2, l'objectif est de calculer la rotation combine Qr :

Ceci peut se faire via cette expression :

O :

- 42 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

v1 w1 v2 w2

= = = =

(x,y,z) (w) (x,y,z) (w)

de de de de

Q1 Q1 Q2 Q2

Ceci peut s'implmenter comme suit :

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->scalar); v3_add(&va, &va, &vb); v3_add(&qr->vector, &va, &vc); quaternion_normalise(qr); }

Comment convertir un quaternion en matrice de rotation ?


Auteurs : Hexapod , Soit un quaternion Q :

Q = (X, Y, Z, W)

Alors, ce quaternion peut se convertir en une matrice de rotation 3x3 comme suit :

Si une matrice 4x4 est requise, alors la dernire ligne et la dernire colonne peuvent tre mises 0, et M3, 3 1. La matrice peut se gnrer via ces expression :

xx xy xz xw yy yz yw zz zw mat[0] mat[1]

= = = =

X X X X

* * * *

X; Y; Z; W;

= Y * Y; = Y * Z; = Y * W; = Z * Z; = Z * W; = 1 - 2 * ( yy + zz ); = 2 * ( xy - zw );

- 43 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

mat[2] mat[4] mat[5] mat[6]

2 * ( xz + yw );

= 2 * ( xy + zw ); = 1 - 2 * ( xx + zz ); = 2 * ( yz - xw );

mat[8] = 2 * ( xz - yw ); mat[9] = 2 * ( yz + xw ); mat[10] = 1 - 2 * ( xx + yy ); mat[3] = mat[7] = mat[11 = mat[12] = mat[13] = mat[14] = 0; mat[15] = 1;

Comment convertir une matrice de rotation en un quaternion ?


Auteurs : Hexapod , Une matrice de rotation peut se convertir l'aide de l'algorithme suivant. On commence par calculer la trace de la matrice, c'est--dire la somme de ses lments diagonaux :

Si la trace est positive, alors le calcul est instantan :

Si par contre la trace de la matrice est infrieure ou gale 0, alors il faut identifier l'lment le plus grand dans la diagonale principale de la matrice. En fonction de la position de cette valeur : Si c'est M0, 0 :

- 44 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Si c'est M1, 1 :

Si c'est M2, 2 :

- 45 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Le quaternion est finalement dfini par Q = (X, Y, Z, W).

Comment convertir un axe de rotation et un angle en un quaternion ?


Auteurs : Hexapod , Etant donns l'axe de rotation et l'angle, cet algorithme peut tre utilis pour gnrer un quaternion :

sin_a = sin(angle / 2) cos_a = cos(angle / 2) q->x q->y q->z q->w = = = = axis->x * sin_a axis->y * sin_a axis->z * sin_a cos_a

quaternion_normalise(q);

Il est ncssaire de Comment normaliser un quaternion ? le quaternion par la suite.

Comment convertir un quaternion en un axe de rotation et un angle ?


Auteurs : Hexapod , Un quaternion peut se re-convertir en un angle et un axe de rotation trs facilement, sachant que w est le cosinus du demi-angle, et que (x, y, z) reprsente l'axe de rotation :

/* Normalisation du quaternion */ quaternion_normalise(qr); /* Rcupration de l'angle de rotation */ angle = acos(qr->qw) * 2; /* vx vy vz Rcupration des composantes de l'axe de rotation */ = qr->qx; = qr->qy; = qr->qz;

/* Normalisation de l'axe de rotation */ norm = sqrt(vx * vx + vy * vy + vz * vz); if (norm > 0.0005) { vx /= norm; vy /= norm; vz /= norm; }

Comment convertir des angles de rotations sphriques en un quaternion ?


Auteurs : Hexapod , Un axe de rotation peut tre dfini par des coordonnes sphriques (latitude et longitude) et un angle de rotation. Dans ce cas, le quaternion peut tre calcul comme suit :

- 46 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

sin_a cos_a sin_lat cos_lat

= sin(angle / 2) = cos(angle / 2) = sin(latitude) = cos(latitude)

sin_long = sin(longitude) cos_long = cos(longitude) qx qy qz qw = = = = sin_a * cos_lat * sin_long sin_a * sin_lat sin_a * sin_lat * cos_long cos_a

Comment convertir un quaternion en des angles de rotations sphriques ?


Auteurs : Hexapod , Un quaternion peut se convertir en coordonnes sphriques via :

/* Rcupration de l'angle de rotation */ angle = acos(q->qw) * 2; /* vx vy vz Rcupration des composantes de l'axe de rotation */ = qr->qx; = qr->qy; = qr->qz;

/* Normalisation de l'axe de rotation */ norm = sqrt(vx * vx + vy * vy + vz * vz); if (norm > 0.0005) { vx /= norm; vy /= norm; vz /= norm; } /* Calcul de la latitude */ latitude = -asin(vy); /* Calcul de la longitude */ if (vx * vx + vz * vz < 0.0005) longitude = 0; else longitude = atan2(vx, vz); /* Si la longitude est ngative, on la ramne du ct positif */ if (longitude < 0) longitude += 2 * PI;

Comment convertir des angles d'Euler en un quaternion ?


Auteurs : Hexapod , La conversion d'Qu'est ce que les angles d'Euler ? en quaternion peut se faire l'aide de multiplication de quaternions. Chaque angle de rotation est converti en une paire angle-axe, chaque axe correspondant un axe Euclidien. Ces paires sont converties en quaternions qui sont multiplis ensemble. Implmentation :
- 47 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

quaternion_from_euler(QUATERNION *q, VFLOAT ax, VFLOAT ay, VFLOAT az) { VECTOR3 vx = {1, 0, 0}, vy = {0, 1, 0}, vz = {0, 0, 1}; QUATERNION qx, qy, qz, qt; quaternion_from_axisangle(qx, &vx, ax); quaternion_from_axisangle(qy, &vy, ay); quaternion_from_axisangle(qz, &vz, az); quaternion_multiply(&qt, &qx, &qy); quaternion_multiply(q, &qt, &qz); }

Comment utiliser des quaternions pour raliser une interpolation linaire entre matrices ?
Auteurs : Hexapod , Dans beaucoup d'applications, il peut tre ncessaire d'interpoler entre 2 positions de rotation d'un objet donn. Ces positions peuvent tre spcifies l'aide de l'animation par keyframe ou cinmatique inverse. Il est ncssaire d'avoir au moins deux matrices, la matrice de dpart et la matrice finale (MS et MF). En interpolation linaire, la matrice de rotation interpole est gnre en utilisant une quation paramtrique o t varie de 0.0 1.0. A t = 0, la matrice interpole est gale la matrice de dpart. A t = 1, la matrice interpole est gale la matrice de fin. Donc, la matrice de rotation interpole (MI) est spcifie par :

O F est une fonction d'interpolation. La premire tape est de calculer la matrice de rotation qui va convertir MS vers MF :

O : Ms est la matrice de dpart, Mf est la matrice finale, et T la matrice intermdiaire. Ensuite, il convient de convertir cette matrice en un axe et un angle de rotation l'aide des quaternions. Afin de gnrer la matrice de rotation dsire, il suffit de modifier l'angle de rotation en fonction de t et de reconstruire la matrice de rotation voulue. Exemple :

m4_transpose(mt, ms); m4_mult(ms, mt, mb);

/* Inversion */ /* Matrice de Rotation */

- 48 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

m4_to_axisangle(ms, axis, angle); /* Rotation axe/angle

*/

for (t = 0; t < 1.0; t += 0.05) { m4_from_axisangle(mi, axis, angle * t); /* Interpolation Finale */ /* ... ce que vous voulez ... */ }

o t est le facteur d'interpolation allant de 0.0 1.0.

- 49 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Sommaire > Trigonomtrie

- 50 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Sommaire > Trigonomtrie > Bases Qu'est-ce que la trigonomtrie ?


Auteurs : Thibaut Cuvelier , La trigonomtrie est la branche des mathmatiques qui tudie les relations entre les longueurs des cts des triangles et leurs angles, et, par extension, les fonctions trigonomtriques (sinus, cosinus et leurs drivs : tangente, cotangente, scante, coscante). La trigonomtrie est trs souvent utilise dans des domaines trs varis. Par exemple, elle est trs utile dans l'optique (pour les microscopes, par exemple) ou la physique newtonienne (lois des mouvements...), ou pour la triangulation, qui permet de localiser un point en mesurant les angles forms avec d'autres points de rfrence.

Quelles sont les mesures de l'angle ?


Auteurs : Thibaut Cuvelier , Il existe deux mesures principales de l'angle : le degr et le radian. Il existe aussi le quadrant, la mesure d'angle d'un angle droit. Un cercle dcrit un angle de 360, de 4q et de 2 rad.

est le symbole du degr, q celui du quadrant, et rad celui du radian.

Un radian est la mesure de l'angle dont la mesure de l'arc interceptant un cercle vaut le rayon de ce cercle. Un quadrant est le quart de l'angle form par un cercle. Un degr est le 360e de l'angle form par un cercle. Ceci permet d'crire les galits suivantes :

Ces galits permettent de facilement convertir une mesure d'angle des degrs en radians et inversment. Voici de telles fonctions avec leurs notations mathmatiques.

Et voici son implmentation en C99, compatible C++.

- 51 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

#define PI 3.141592653589793 inline long double deg2rad (float deg) { return deg / (180 / PI); } inline long double rad2deg (float rad) { return rad * (180 / PI); }

Il existe encore d'autres mesures d'angles, mais elles sont nettement moins utilises : le grade, le mil, la rvolution (ou rotation), le degr binaire, le radian binaire (bradian), l'angle horaire, le gradient...

Qu'est-ce que le cercle trigonomtrique ?


Auteurs : Thibaut Cuvelier ,

Le cercle trigonomtrique, ou cercle unit Le cercle trigonomtrique est le cercle dont le centre est le centre du repre et de rayon 1. C'est pourquoi il est aussi appel cercle unit : chacun de ses points se situe une unit du centre du repre. Ces points ont des abscisses et des ordonnes un peu particulires : elles correspondent au sinus et au cosinus de l'angle orient form par l'axe des abscisses et la droite passant par ce point et le centre du repre. Voici les quations paramtriques de ce cercle :

- 52 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Que sont les angles associs ?


Auteurs : Thibaut Cuvelier ,

Deux angles sont complmentaires si la somme de leurs mesures d'angle quivaut la mesure d'un angle droit.

Deux angles sont opposs si leurs mesures d'angles sont opposes.

- 53 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Deux angles sont supplmentaires si la somme de leurs mesures d'angle quivaut la mesure d'un angle plat.

Deux angles sont antisupplmentaires si l'un quivaut l'autre la mesure d'un angle plat prs. En effet, lors d'un travail en radian,

De mme,

- 54 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Qu'est-ce qu'un nombre trigonomtrique ?


Auteurs : Thibaut Cuvelier , Un nombre trigonomtrique est le rsultat d'une fonction trigonomtrique (sinus, cosinus, tangente, cotangente...). Par exemple :

Un nombre trigonomtrique peut tre calcul assez exactement par une machine, ou bien tre approch grce au cercle trigonomtrique. Dans la figure suivante, on a trac un angle. Pour en trouver le sinus, il suffit de tracer la parallle l'axe des cosinus passant par le point de contact entre la demi-droite bornant l'angle et le cercle trigonomtrique et de mesurer la distance entre l'axe des cosinus et cette droite.

Approximation d'un nombre trigonomtrique

partir d'un nombre trigonomtrique, comment calculer les autres ?


Auteurs : Thibaut Cuvelier , Il faut plusieurs relations entre les diffrents nombres trigonomtriques afin de pouvoir les exprimer les uns par rapport aux autres.

La relation fondamentale
- 55 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

La dfinition de la tangente

La dfinition de la cotangente

Lien entre tangente et cotangente

Dfinition de la scante

Dfinition de la coscante Avec ces quelques relations, vous pouvez sans problme trouver tous les nombres trigonomtriques de l'angle dont vous avez un nombre trigonomtrique.

La relation fondamentale exprime en fonction du cosinus pour obtenir facilement le sinus

La relation fondamentale exprime en fonction du sinus pour obtenir facilement le cosinus

La dfinition de la tangente en fonction du cosinus

- 56 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

La dfinition de la cotangente en fonction du sinus

Quels sont les nombres trigonomtriques des angles remarquables ?


Auteurs : Thibaut Cuvelier , Premirement, quels sont les angles remarquables ? En degrs : 0, 30, 45, 60, 90.

En radians :

rad,

rad,

rad,

rad,

rad.

Qu'ont-ils de particulier ? Il est possible de dmontrer leurs cosinus et sinus, pour obtenir une fraction (ir)rationnelle assez simple.

rad rad rad radrad Sinus

Cosinus

Comment implmenter une fonction trigonomtrique partir des sries entires ?


Auteurs : Thibaut Cuvelier , Une des manires les plus simples est d'utiliser les sries entires. Les voici.

Plus on dveloppe la srie, plus le rsultat devient prcis, mais lent calculer. Voici une implmentation du calcul du sinus par cette mthode en C99, compatible C++.
- 57 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Sinus
inline long double sin_part ( { if ( (pos % 2) == { return ( rad } else { return - ( rad } } long double rad, int pos ) 0 ) ^ (2 * pos + 1) ) / ( 2 * pos + 1);

^ (2 * pos + 1) ) / ( 2 * pos + 1);

long double sin ( long double rad, int precision ) { long double return = rad; while ( precision > 0 ) { return += sin_part ( rad, precision ); --precision; } return return; }

Et voici son pendant pour le cosinus par cette mthode en C99, compatible C++. Cosinus
inline long double cos_part ( { if ( (pos % 2) == { return ( rad } else { return - ( rad } } long double rad, int pos ) 0 ) ^ (2 * pos) ) / ( 2 * pos);

^ (2 * pos) ) / ( 2 * pos);

long double cos ( long double rad, int precision ) { long double return = 1; while ( precision > 0 ) { return += cos_part ( rad, precision ); --precision; } return return; }

- 58 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Ces implmentations ne sont pas prvues pour tre rapides, il s'agit juste de montrer comment faire. Un certain nombres d'optimisation peuvent tre envisages.

Comment implmenter une fonction trigonomtrique en utilisant l'algorithme CORDIC ?


Auteurs : Thibaut Cuvelier , Cet algorithme recherche les coordonnes de l'intersection de l'angle avec le cercle trigonomtrique. Il procde avec un vecteur , qu'il fait tourner pour qu'il atteigne l'angle recherch.

chaque itration, on calcule la multiplication du vecteur

avec une matrice de transformation,

En mettant le facteur

en vidence, on obtient :

Le facteur

peut valoir -1 ou +1 en fonction du sens de rotation. Si on restreint les valeurs de \gamma

afin que soit gal une puissance de 2. D'o :

, alors la multiplication par le facteur tangente devient une multiplication par

Le facteur peut tre ignor pendant l'itration, et factoris en un seul coefficient multiplicatif final. Ici, n reprsente le nombre d'itrations.

La limite de ce produit lorsque n tend vers l'infini est de 0,607 252 94.

- 59 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Aprs suffisamment d'itrations, l'angle form par le vecteur et l'axe des cosinus se rapprochera de l'angle dont on recherche les sinus et cosinus. La dernire tape consiste dterminer chaque itration le sens de rotation : trigonomtrique (anti-horaire) ou horaire. Ce rsultat influence la valeur de .

Tout simplement, on soustrait la mesure de l'angle la mesure de l'angle dsir. Si le rsultat est positif, on tourne dans le sens horloger. S'il est ngatif, on tourne dans le sens trigonomtrique. Cette tape peut tre dclare dichotomique.

Voici maintenant l'implmentation de cet algorithme en C99, compatible C++. CORDIC


#define ITER 15 #define K 0,60725294 double cos = 1; double sin = 0; double xNouveau; int i = 0; double beta = 0; // angle recherch while ( i < ITER ) { if(beta < 0) { xNouveau = cos + ( sin * pow(2, -i) sin -= cos * pow(2, -i); beta += atan( pow(2, -i) ); } else { xNouveau = cos - (sin * pow(2, -i)); sin += cos * pow(2, -i); beta -= atan( pow(2, -i) ); } cos = xNouveau; i++; } cos *= K; sin *= K;

);

Comment fonctionnent les look up tables ?


Auteurs : Thibaut Cuvelier , Une look up table (ou LUT) est un tableau statique chargement dynamique. Dit autrement, il s'agit d'une sorte de tableau qui est construit dynamiquement (typiquement au lancement du programme, quand il affiche son splash screen) dont l'accs aux donnes se fait comme s'il tait stock dans le binaire.

- 60 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Une LUT sert principalement acclrer le calcul de valeurs de fonctions prennant un certain temps calculer, surtout quand on en a besoin trs souvent (par exemple, une application devant calculer des milliers de cosinus par seconde pourra en profiter, ils seront dj calculs, il suffira d'aller les lire). Son fonctionnement est trs simple : il s'agit tout d'abord d'un conteneur un peu spcial. Il stocke des valeurs d'une fonction pour un paramtre prcis, ce paramtre servant d'indice au tableau (pour l'implmentation, on utilise gnralement un vecteur). Seulement, ces indices sont forcment entiers alors que les paramtres, surtout en trigonomtrie, ne sont que trs rarement entiers. Il faut donc un peu tricher cet endroit pour transformer ces flottants en entiers (un exemple est disponible ci-dessous). Une implmentation trs basique d'une LUT pour la fonction cosinus
#include <vector> #include <cmath> using namespace std; class lut { private: vector<float> m_lut; float m_min; float m_max; float m_precision; public: lut() {} ~lut() {} // L'intervalle dans lequel on devra calculer les valeurs prises par la fonction void setInterval (float min, float max) { this->m_min = min; this->m_max = max; } // Donne la prcision, la diffrence entre les paramtres de deux valeurs stockes void setPrecision (float p) { this->m_precision = p; } // Calcule les valeurs demandes void compute() { for(float x = this->m_min, int i = 0 ; x <= this->m_max ; x += this->m_precision, ++i) { this->m_lut[i] = cos(x); } // Le code est assez clair : pour toutes les valeurs entre this->m_min et this->m_max, // on calcule le cosinus de cette valeur et on l'inscrit dans la LUT. // Seulement, un vecteur n'aime pas trop les float comme indices, il faut donc tricher : // 0 -> this->m_min // 1 -> this->m_mix + this->m_precision // etc. // Problme : il faut retransformer les valeurs demandes en indices du vecteur. // Cependant, cela vite de crer son propre conteneur, ce qui n'est pas le but ici. // Ce code est loin d'tre optimal, il ne donne qu'une manire de faire, qui ne veut pas // tre la meilleure mais juste suffisamment simple comprendre. }

float get(float x) { // On veut forcment une valeur dans l'intervalle ; sinon, cette implmentation calcule cette valeur prcise m if ( ! (x > this->m_min && x < this->m_max) ) return cos(x);

- 61 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Une implmentation trs basique d'une LUT pour la fonction cosinus

// La valeur 0 correspond au minimum : si x vaut ce minimum, il doit valoir 0, on ne peut pas le crer autreme x -= this->m_min; // Toutes les valeurs ne sont pas disponibles : on divise donc par la prcision pour avoir une valeur comme ce x /= this->m_precision; // x est toujours un flottant, on veut un entier : il suffit de perdre les dcimales pour obtenir notre indice int i = floor(x); // vous auriez pu utiliser ceil ou une autre mthode pour rcuprer un entier // Maintenant, on retourne l'utilisateur le rsultat demand. return this->m_lut[i]; } };

Cette implmentation d'une LUT n'est pas forcment la meilleure possible ! Il ne s'agit que d'un exemple pour vous aider comprendre leur principe ; en ralit, vous devriez plutt prvoir une LUT plus rutilisable (notamment pas autant lie une fonction, ne pas mettre en dur la fonction dont vous calculez les images), plus optimise en fonction de vos besoins (vos indices seront peut-tre exclusivement entiers, un pan entier de cette implmentation peut ainsi tre vit). L'utilisation de cette LUT
lut m_lut; m_lut->setInterval(0, 1.57); // de 0 PI/2 m_lut->setPrecision(0.157); // soit PI/20 m_lut->compute(); cout << m_lut->get(0.157); // rcupre de la lut, valeur dj calcule cout << m_lut->get(0.158); // valeur en dehors de la lut, calcule ce moment-l

Cet exemple de LUT peut tre fortement amlior : on pourrait, par exemple, instaurer un systme d'interpolation pour les valeurs pour lesquelles rien n'est calcul. Il serait possible de coder son propre conteneur cet effet et d'autoriser alors l'utilisation d'indices flottants, comme par exemple ce qui est disponible avec les tableaux CUDA normaliss (ils n'autorisent que des indices entre 0 et 1). Utiliser une LUT n'a de sens que si vous devez obtenir trs souvent le rsultat d'une fonction ! S'il s'agit simplement de calculer trois cosinus sur toute la dure de vie de l'application, elle perdra beaucoup de temps crer cette LUT et prendra beaucoup de mmoire pour la stocker pour rien. Il n'est pas non plus intressant d'utiliser une LUT pour des oprations trs simples, l'accs un lment ayant un cot non ngligeable pour ce genre d'oprations.

- 62 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Sommaire > Trigonomtrie > Relations trigonomtriques Comment calculer le sinus ou le cosinus d'une somme ou d'une diffrence ?
Auteurs : Thibaut Cuvelier , Il existe six formules d'additions et de soustraction de base en trigonomtrie ; les voici dans une version condense.

Comment factoriser ou distribuer une expression trigonomtrique ?


Auteurs : Thibaut Cuvelier , On utilise gnralement en ce but les formules de Simpson, qui peuvent tre lues dans un sens ou dans l'autre afin d'obtenir les deux sens : distrubution ou factorisation. Au contraire des autres identits trigonomtriques, les variables utilises sont p et q.

- 63 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Comment calculer les nombres trigonomtriques d'un double d'angle ?


Auteurs : Thibaut Cuvelier , Ces formules sont des cas particuliers des formules d'addition et de soustraction d'angles. En effet : x + x = 2x.

Comment exprimer les nombres trigonomtriques en fonction de la tangente de la moiti d'un angle ?
Auteurs : Thibaut Cuvelier , Il suffit de transformer les identits prcdentes afin de faire ressortir des tangentes.

- 64 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Sommaire > Trigonomtrie > Triangles rectangles Quelles sont les relations entre les longueurs et les angles d'un triangle rectangle ?
Auteurs : Thibaut Cuvelier , Pour rfrence, prenons ce triangle rectangle.

Dans un triangle rectangle, la mesure d'un ct de l'angle droit est gale au produit de la mesure de l'hypotnuse par le cosinus de l'angle compris.

Dans un triangle rectangle, la mesure d'un ct de l'angle droit est gale au produit de la mesure de l'hypotnuse par le sinus de l'angle oppos.

La mesure d'un ct de l'angle droit est gale au produit de la mesure de l'autre ct de l'angle droit par la tangente de l'angle oppos ce ct. Ces formules sont aussi parfois exprimes en fonction du nombre trigonomtrique.

- 65 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Il ne faut pas oublier que, la somme des amplitudes des angles d'un triangle valant

, la somme des amplitudes des

angles aigus d'un triangle vaut

De mme, voici pour rappel le thorme de Pythagore.

Comment rsoudre un cas classique de triangle rectangle ?


Auteurs : Thibaut Cuvelier , Rsoudre un triangle, c'est calculer ses lments inconnus en fonction d'lments connus. On peut remarquer qu'il s'agit souvent de rsoudre le mme genre de triangles : c'est ce que l'on appelle des cas classiques. Les lments donns sont des angles du triangle et/ou des cts du triangle. Dans cette rponse, on considrera : comme l'hypotnuse ; comme un ct de l'angle droit ; comme l'autre ct de l'angle droit ; comme l'angle droit ; comme un angle aigu ; comme l'autre angle aigu.

Premier cas : on donne l'hypotnuse

et un angle aigu

- 66 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Deuxime cas : on donne un ct de l'angle droit

et un angle aigu

Troisime cas : on donne l'hypotnuse

et un ct de l'angle droit

Quatrime cas : on donne les deux cts de l'angle droit,

et

- 67 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Sommaire > Trigonomtrie > Triangles quelconques Qu'est-ce que la rgle des sinus ?
Auteurs : Thibaut Cuvelier , Les cts d'un triangle sont proportionnels aux sinus des angles opposs. Le facteur de proportionnalit est le diamtre du cercle circonscrit ce triangle.

Qu'est-ce que la rgle des cosinus (thorme de Pythagore gnralis, thorme d'Al-Kashi) ?
Auteurs : Thibaut Cuvelier , Le carr d'un ct d'un triangle est gal la somme des carrs des deux autres cts diminue du double produit de ces cts et du cosinus de l'angle qu'ils dlimitent. Pour rfrence, prenons ce triangle.

- 68 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

Comment calculer l'aire d'un triangle quelconque ?


Auteurs : Thibaut Cuvelier , L'aire d'un triangle vaut le demi-produit de deux cts et de l'angle form par ces deux cts. Ou, le double de l'aire d'un triangle est le produit de deux cts et de l'angle form par ces deux cts. Pour rfrence, prenons ce triangle.

Comment rsoudre un cas classique de triangle ?


Auteurs : Thibaut Cuvelier , Rsoudre un triangle, c'est calculer ses lments inconnus en fonction d'lments connus. On peut remarquer qu'il s'agit souvent de rsoudre le mme genre de triangles : c'est ce que l'on appelle des cas classiques. Les lments donns sont des angles du triangle et/ou des cts du triangle. Dans cette rponse, on considrera : , et comme les trois cts d'un triangle ; ,

- 69 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

et comme les trois angles du triangle. Premier cas : on donne les trois cts, , et . Trois jeux de formules existent pour rsoudre ce cas. Afin de faciliter les calculs, posons :

- 70 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/

On peut aussi rsumer ce cas classique d'une autre manire. On utilise uniquement le thorme d'Al-Kashi sur chacun des cts afin de trouver les angles. Si l'on utilisait la rgle des sinus par aprs, plusieurs solutions seraient possibles pour chaque angle, il faudrait faire une disjonction de cas. Il faut aussi vrifier que le triangle soit possible ! Pour cela, une simple proprit : dans un triangle, la longueur de tout ct doit tre infrieure la somme des longueurs deux autres. Deuxime cas : on donne deux cts ainsi que l'angle compris entre ces deux cts. Grce au thorme d'Al-Kashi, on peut facilement trouver la longueur du troisime ct. Le mme thorme peut tre employ pour les deux derniers angles. Troisime cas : on donne un ct et les deux angles adjacents ce ct. Comme la somme des amplitudes des angles d'un triangle est constante, on peut facilement calculer le dernier angle. Les deux derniers cts s'obtiennent par la rgle des cosinus ou par la rgle des sinus. Quatrime cas : on donne deux cts, . Deux valeurs de sont possibles : et et et l'angle oppos l'un d'eux, . .

Le dernier angle accepte donc aussi deux valeurs : et . Nous pouvons donc calculer le dernier ct : . Plusieurs cas sont possibles avec ces donnes : deux triangles peuvent correspondre, tout aussi bien que un seul, ou bien zro !

- 71 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://jeux.developpez.com/faq/math/