Beruflich Dokumente
Kultur Dokumente
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 !
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 page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://jeux.developpez.com/faq/math/
-4Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://jeux.developpez.com/faq/math/
-5Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://jeux.developpez.com/faq/math/
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 page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
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.
float matrice[10][10];
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];
-7Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
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 :
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++)
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
= = = = = =
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 page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
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 !
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 page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://jeux.developpez.com/faq/math/
La transpose de M est :
- 11 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://jeux.developpez.com/faq/math/
- 12 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://jeux.developpez.com/faq/math/
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 page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://jeux.developpez.com/faq/math/
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 page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://jeux.developpez.com/faq/math/
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 page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
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 page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
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 :
- 17 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://jeux.developpez.com/faq/math/
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 :
- 18 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
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).
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.
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.
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 page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
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 ?).
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.
Le dterminant est :
- 21 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://jeux.developpez.com/faq/math/
- 22 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://jeux.developpez.com/faq/math/
En supposant que ce dterminant est non nul, alors, l'inverse de la matrice est donne par :
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 page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://jeux.developpez.com/faq/math/
mr[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; }
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]; } } }
- 24 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
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.
- 25 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://jeux.developpez.com/faq/math/
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 page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://jeux.developpez.com/faq/math/
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.
- 27 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://jeux.developpez.com/faq/math/
(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 page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
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
- 29 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
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.
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.
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 page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://jeux.developpez.com/faq/math/
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 :
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 page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
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 :
Evaluons M' :
D'o M devient :
- 32 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://jeux.developpez.com/faq/math/
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 :
= = = = = = = =
* F; * E; * F; * E;
mat[3] = mat[15] =
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 page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
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. 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 :
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 page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://jeux.developpez.com/faq/math/
D'o :
En arrangeant :
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 */
- 35 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://jeux.developpez.com/faq/math/
= mat[0] / C; = -mat[1] / C;
/* Calcul de l'angle Z */
/* Modulo ;) */
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 page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
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.
- 37 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
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.
Si le vecteur de mise l'chelle est (1, 1, 1), alors on obtient la matrice identit et l'objet ne change pas.
- 38 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://jeux.developpez.com/faq/math/
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.
- 39 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://jeux.developpez.com/faq/math/
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 page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://jeux.developpez.com/faq/math/
quaternion_conjugate(QUAT *qr, QUAT *qa) { qr->qw = qa->qw; qr->qx = -qa->qx; qr->qy = -qa->qy; qr->qz = -qa->qz; }
- 41 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://jeux.developpez.com/faq/math/
QFLOAT quaternion_magnitude(QUAT *qa) { return sqrt(qa->qw * qa->qw + qa->qx * qa->qx + qa->qy * qa->qy + qa->qz * qa->qz); }
O :
- 42 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://jeux.developpez.com/faq/math/
v1 w1 v2 w2
= = = =
de de de de
Q1 Q1 Q2 Q2
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); }
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 page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://jeux.developpez.com/faq/math/
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;
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 page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://jeux.developpez.com/faq/math/
Si c'est M1, 1 :
Si c'est M2, 2 :
- 45 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://jeux.developpez.com/faq/math/
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);
/* 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; }
- 46 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://jeux.developpez.com/faq/math/
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
/* 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;
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 :
- 48 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://jeux.developpez.com/faq/math/
*/
for (t = 0; t < 1.0; t += 0.05) { m4_from_axisangle(mi, axis, angle * t); /* Interpolation Finale */ /* ... ce que vous voulez ... */ }
- 49 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://jeux.developpez.com/faq/math/
- 50 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://jeux.developpez.com/faq/math/
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.
- 51 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
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...
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 page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://jeux.developpez.com/faq/math/
On utilise gnralement le sens trigonomtrique pour parcourir ce cercle : il est oppos au sens horloger. On parle aussi exceptionnellement du sens senestre (par opposition dextre).
Deux angles sont complmentaires si la somme de leurs mesures d'angle quivaut la mesure d'un angle droit.
- 53 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
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 page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://jeux.developpez.com/faq/math/
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.
La relation fondamentale
- 55 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://jeux.developpez.com/faq/math/
La dfinition de la tangente
La dfinition de la 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.
- 56 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://jeux.developpez.com/faq/math/
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.
Cosinus
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 page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
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);
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 page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
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.
En mettant le facteur
en vidence, on obtient :
Le facteur
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 page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
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.
);
- 60 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
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 page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://jeux.developpez.com/faq/math/
// 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 page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
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'addition et de soustraction de base en trigonomtrie ; les voici dans une version condense.
- 63 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://jeux.developpez.com/faq/math/
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 page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
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 page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://jeux.developpez.com/faq/math/
Il ne faut pas oublier que, la somme des amplitudes des angles d'un triangle valant
et un angle aigu
- 66 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://jeux.developpez.com/faq/math/
et un angle aigu
et un ct de l'angle droit
et
- 67 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
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 page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://jeux.developpez.com/faq/math/
- 69 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
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 page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
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, et et l'angle oppos l'un d'eux, .
. Deux valeurs de
sont possibles :
et
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 page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2012 Developpez LLC. Tous 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' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://jeux.developpez.com/faq/math/