Dopo aver visto come calcolare la matrice di rotazione dati gli angoli di eulero, oggi vediamo l’operazione opposta ponendoci sempre l’obiettivo di sviluppare una soluzione in C# che sia crossplatform per calcolare gli angoli di eulero partendo da una matrice di rotazione.

Matrice di Rotazione in Angoli di Eulero

Il codice da considerare tiene di conto di 3 parametri di ingresso:

  • la matrice di rotazione, espressa come array multidimensionale di double;
  • la sequenza di rotazione degli assi con cui vogliamo effettuare la trasformazione;
  • le unità di misura degli angoli di eulero che vogliamo calcolare.
Copy to Clipboard

Anche in questa versione del codice, utilizziamo due enum per organizzare meglio il codice, dalla linea 1 alla 5 per definire le due tipologie di angoli supportate (radianti e gradi), dalla 7 alla 12 per le varie sequenze di rotazione degli assi (ZYX, ZYZ, XYZ).

Per terminare facciamo un semplice test, partiamo dal calcolare la matrice della rotazione definita come [33, 67, 32], dove ciascun valore descrive rispettivamente le rotazioni rispetto all’asse X, Y e Z.

A questo punto, concludiamo lo sviluppo, effettuando il calcolo a ritroso (riga 17) e stampando gli angoli di eulero risultanti che sono uguali a quelli di partenza.

Copy to Clipboard

Se lanciamo il programma appena scritto, vedremo che il risultato finale, fintanto che utilizziamo rotazioni di tipo XYZ e ZYZ, sarà proprio un vettore di double contenente i valori [33, 67, 32].

Conclusioni

Come già visto nell’articolo precedente, la matrice di rotazione è un operatore matriciale che consente di ruotare un vettore attorno ad un dato asse nello spazio. Si tratta di uno strumento molto utile in diversi campi applicativi, come in robotica nella risoluzione dei problemi di cinematica inversa o nelle trasformazione di sistemi di riferimento.

In questo articolo abbiamo presentato, quindi, una soluzione in C# che permette di ricavare gli angoli di eulero partendo da una matrice di rotazione nota.