//rotation d'un vecteur #include #include #include using namespace std; //declaration des fonctions void prodMat(double matrice1[][3], double matrice2[][3], double matriceR[][3]); void imprimeMat(double matrice[][3]); int main() { double vecteur[3] = {0.}; cout << "Entrez les 3 coordonees du vecteur :\n"; for (int k=0; k<3 ; k++) cin >> vecteur[k]; double angles[3] = {0.}; cout << "Entrez les 3 angles d'Euler de la rotation (en degrees) :\n"; for (int k=0; k<3 ; k++) { cin >> angles[k]; angles[k] *= M_PI/180.0; //angles en radians } //d'abord il faut calculer les matrices de rotation: //matD pour l'ax z, matC pour l'ax x', et matB pour l'ax z' double matD[3][3]={0.}; double matC[3][3]={0.}; double matB[3][3]={0.}; matD[0][0] = matD[1][1] = cos(angles[0]); matD[0][1] = -sin(angles[0]); matD[2][2] = 1.0; matD[1][0] = -1.0 * matD[0][1]; matC[0][0] = 1.0; matC[1][2] = -sin(angles[1]); matC[2][1] = -1.0 * matC[1][2]; matC[2][2] = matC[1][1] = cos(angles[1]); matB[0][0] = matB[1][1] = cos(angles[2]); matB[0][1] = -sin(angles[2]); matB[1][0] = -1.0 * matB[0][1]; matB[2][2] = 1.0; //la matrice de rotation est donne par matRot = matB*matC*matD //on calcule le produit matriciel de deux matrices a chaque fois double matM[3][3] = {0.}; double matRot[3][3] = {0.}; prodMat(matC,matD,matM); //matM = matC*matD prodMat(matB,matM,matRot); //matRot = matB*matC*matD = matB*matM cout << "\nLa matrice de rotation est :" << endl; imprimeMat(matRot); double vecteurR[3] = {0.}; cout << "Le vecteur apres la rotation est :" << endl; for (int i=0; i<3; i++) { for (int j=0; j<3; j++) vecteurR[i] += matRot[i][j] * vecteur[j]; cout << vecteurR[i] << endl; } return 0; } //definition de la fonction qui calcule le produit de deux matrices void prodMat(double matrice1[][3], double matrice2[][3], double matriceR[][3]) { for(int i=0; i<3; i++) for(int j=0; j<3; j++) for(int k=0; k<3; k++) matriceR[i][j] += matrice1[i][k]*matrice2[k][j]; } //definition de la fonction qui imprime une matrice void imprimeMat(double matrice[][3]) { const int n=3; cout << setw(5) << "/" << setw(n*12+5) << "\\" << endl; for(int i=0; i