//rotation d'un vecteur #include #include #include using namespace std; int main() { double vecteur[3] = {0.}; cout << "Entrez les 3 coordonees du vecteur :" << endl; 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'axe z, MatC pour l'axe x', et MatB pour l'axe 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.}; //matC*matD -> matM for (int i=0; i<3; i++) for (int j=0; j<3; j++) for (int k=0; k<3; k++) matM[i][j] += matC[i][k] * matD[k][j]; //matB*matM -> matRot for (int i=0; i<3; i++) for (int j=0; j<3; j++) for (int k=0; k<3; k++) matRot[i][j] += matB[i][k] * matM[k][j]; cout << "\nLa matrice de rotation est :" << endl; cout << setw(5) << "/" << setw(3*12+5) << "\\" << endl; for (int i=0; i<3; i++) { cout << setw(5) << "|"; for (int j=0; j<3; j++) cout << setw(12) << setprecision(5) << matRot[i][j]; cout << setw(5) << "|" << endl; } cout << setw(5) << "\\" << setw(3*12+5) << "/" << endl; cout << "Le vecteur apres la rotation est :" << endl; double vecteurR[3]={0.0}; 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; }