Matrice inverse [Résolu]

vladisback 61 Messages postés dimanche 19 novembre 2000Date d'inscription 5 août 2008 Dernière intervention - 25 juil. 2005 à 10:40 - Dernière réponse : Aekq 2 Messages postés dimanche 12 février 2006Date d'inscription 15 février 2006 Dernière intervention
- 15 févr. 2006 à 14:27
bonjour, j'utilise pour mes transformation des matrices 4x3:
Xx Yx Zx Tx
Xy Yy Zy Ty
Xz Yz Zz Tz

(Identique au matrice directX excepté une quatrieme ligne dont je n'ai pas besoin)

Je voudrai savoir comment obtenir la matrice inverse, j'ai fait pas mal de recherche sur google mais n'ai trouvé que des méthodes qu'étant encore jeune et n'ayant pas encore étudié les matrices je ne comprend pas...
je voudrais donc le résultat direct pour une matrice comme celle ci.
en espérant que vous puissiez m'aider, merci d'avance.
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
vladisback 61 Messages postés dimanche 19 novembre 2000Date d'inscription 5 août 2008 Dernière intervention - 25 juil. 2005 à 13:32
3
Merci
c bon j'ai trouvé, voici le code si quelqu'un est interessé:


void InvMatrixFunc(double Matrix[4][4])
{

double t[6]={0,0,0,0,0,0};
double CoffactMatrix [4][4];
double td;

// calcul des cofacteurs de la ligne 1


t[0]=Matrix[2][2]*Matrix[3][3] - Matrix[3][2]*Matrix[2][3];
t[1]=Matrix[2][1]*Matrix[3][3] - Matrix[3][1]*Matrix[2][3];
t[2]=Matrix[2][1]*Matrix[3][2] - Matrix[3][1]*Matrix[2][2];
t[3]=Matrix[2][0]*Matrix[3][3] - Matrix[3][0]*Matrix[2][3];
t[4]=Matrix[2][0]*Matrix[3][2] - Matrix[3][0]*Matrix[2][2];
t[5]=Matrix[2][0]*Matrix[3][1] - Matrix[3][0]*Matrix[2][1];

CoffactMatrix[0][0]=Matrix[1][1]*t[0] - Matrix[1][2]*t[1] + Matrix[1][3]*t[2];
CoffactMatrix[0][1]=Matrix[1][0]*t[0] - Matrix[1][2]*t[3] + Matrix[1][3]*t[4];
CoffactMatrix[0][2]=Matrix[1][0]*t[1] - Matrix[1][1]*t[3] + Matrix[1][3]*t[5];
CoffactMatrix[0][3]=Matrix[1][0]*t[2] - Matrix[1][1]*t[4] + Matrix[1][2]*t[5];

// calcul du determinant

td=Matrix[0][0]*CoffactMatrix[0][0] - Matrix[0][1]*CoffactMatrix[0][1] + Matrix[0][2]*CoffactMatrix[0][2] - Matrix[0][3]*CoffactMatrix[0][3];

// Form1->Edit1->Text=FloatToStr(td);
// test du determiant : si non nul on continue

if(td==0)
{
cout<<"\ndeterminant null!!!"<<endl<<endl;

Matrix[0][0]=1;
Matrix[0][1]=0;
Matrix[0][2]=0;
Matrix[0][3]=0;
Matrix[1][0]=0;
Matrix[1][1]=1;
Matrix[1][2]=0;
Matrix[1][3]=0;
Matrix[2][0]=0;
Matrix[2][1]=0;
Matrix[2][2]=1;
Matrix[2][3]=0;
Matrix[3][0]=0;
Matrix[3][1]=0;
Matrix[3][2]=0;
Matrix[3][3]=1;

return;
}

// calcul des cofacteurs de la ligne 2
CoffactMatrix[1][0]=Matrix[0][1]*t[0] - Matrix[0][2]*t[1] + Matrix[0][3]*t[2];
CoffactMatrix[1][1]=Matrix[0][0]*t[0] - Matrix[0][2]*t[3] + Matrix[0][3]*t[4];
CoffactMatrix[1][2]=Matrix[0][0]*t[1] - Matrix[0][1]*t[3] + Matrix[0][3]*t[5];
CoffactMatrix[1][3]=Matrix[0][0]*t[2] - Matrix[0][1]*t[4] + Matrix[0][2]*t[5];

// calcul des cofacteurs de la ligne 3
t[0]=Matrix[0][2]*Matrix[1][3] - Matrix[1][2]*Matrix[0][3];
t[1]=Matrix[0][1]*Matrix[1][3] - Matrix[1][1]*Matrix[0][3];
t[2]=Matrix[0][1]*Matrix[1][2] - Matrix[1][1]*Matrix[0][2];
t[3]=Matrix[0][0]*Matrix[1][3] - Matrix[1][0]*Matrix[0][3];
t[4]=Matrix[0][0]*Matrix[1][2] - Matrix[1][0]*Matrix[0][2];
t[5]=Matrix[0][0]*Matrix[1][1] - Matrix[1][0]*Matrix[0][1];

CoffactMatrix[2][0] =Matrix[3][1]*t[0] - Matrix[3][2]*t[1] + Matrix[3][3]*t[2];
CoffactMatrix[2][1] =Matrix[3][0]*t[0] - Matrix[3][2]*t[3] + Matrix[3][3]*t[4];
CoffactMatrix[2][2]=Matrix[3][0]*t[1] - Matrix[3][1]*t[3] + Matrix[3][3]*t[5];
CoffactMatrix[2][3]=Matrix[3][0]*t[2] - Matrix[3][1]*t[4] + Matrix[3][2]*t[5];

// calcul des cofacteurs de la ligne 4
CoffactMatrix[3][0]=Matrix[2][1]*t[0] - Matrix[2][2]*t[1] + Matrix[2][3]*t[2];
CoffactMatrix[3][1]=Matrix[2][0]*t[0] - Matrix[2][2]*t[3] + Matrix[2][3]*t[4];
CoffactMatrix[3][2]=Matrix[2][0]*t[1] - Matrix[2][1]*t[3] + Matrix[2][3]*t[5];
CoffactMatrix[3][3]=Matrix[2][0]*t[2] - Matrix[2][1]*t[4] + Matrix[2][2]*t[5];

// inversion
td=1/td;
Matrix[0][0]=CoffactMatrix[0][0]*td;
Matrix[0][1]=-CoffactMatrix[1][0]*td;
Matrix[0][2]=CoffactMatrix[2][0]*td;
Matrix[0][3]=-CoffactMatrix[3][0]*td;
Matrix[1][0]=-CoffactMatrix[0][1]*td;
Matrix[1][1]=CoffactMatrix[1][1]*td;
Matrix[1][2]=-CoffactMatrix[2][1]*td;
Matrix[1][3]=CoffactMatrix[3][1]*td;
Matrix[2][0]=CoffactMatrix[0][2]*td;
Matrix[2][1]=-CoffactMatrix[1][2]*td;
Matrix[2][2]=CoffactMatrix[2][2]*td;
Matrix[2][3]=-CoffactMatrix[3][2]*td;
Matrix[3][0]=-CoffactMatrix[0][3]*td;
Matrix[3][1]=CoffactMatrix[1][3]*td;
Matrix[3][2]=-CoffactMatrix[2][3]*td;
Matrix[3][3]=CoffactMatrix[3][3]*td;

return;
}


source originale:
http://forum.hardware.fr/hardwarefr/Programmation/Inverse-matrice-sujet-27393-2.htm

Merci vladisback 3

codes-sources a aidé 82 internautes ce mois-ci

Commenter la réponse de vladisback
vladisback 61 Messages postés dimanche 19 novembre 2000Date d'inscription 5 août 2008 Dernière intervention - 25 juil. 2005 à 10:43
0
Merci
Aie désolé j'avais cherché sur google mais pas sur le site et jvois qu'il y a pas mal de choses la dessus et je pense y trouvé mon bonheur.
merci quand meme et encore désolé
Commenter la réponse de vladisback
cosmobob 706 Messages postés mardi 30 décembre 2003Date d'inscription 27 janvier 2009 Dernière intervention - 25 juil. 2005 à 11:19
0
Merci
salut,

est ce que tu te rends compte que tu veux inverser une matrice qui est pas carrée?



a+
Commenter la réponse de cosmobob
vladisback 61 Messages postés dimanche 19 novembre 2000Date d'inscription 5 août 2008 Dernière intervention - 25 juil. 2005 à 13:06
0
Merci
oui oui je sai, mais en fait je vais utiliser une 4x4, par contre j'ai regardé les exemples sur ce site sa a l'air plutot chiant (les exemples font avec des matrices de n'importe quel taille) donc si quelqu'un a un exemple juste pour les 4x4 je suis preneur, merci!

PS: les inversion de matrices non carrée sa existe (si si chercher bien sa existe) mais c'est extrémement difficile a réaliser.
Commenter la réponse de vladisback
Aekq 2 Messages postés dimanche 12 février 2006Date d'inscription 15 février 2006 Dernière intervention - 15 févr. 2006 à 14:27
0
Merci
Salut,
J'ai lu votre demande de recherche de code d'inversion de matrice;
Je porte à ta connaissance que mathématiquement l'inversion n'est possible que pour des matrice carrées.
Cordiallement
Commenter la réponse de Aekq

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.