Sfortunatamente ci sono diverse convenzioni su come definire queste cose (e il rollio, il beccheggio, l'imbardata non sono proprio gli angoli di Eulero), quindi dovrete stare attenti.
Se definiamo passo = 0 per orizzontale (z = 0) e di imbardata come senso antiorario dall'asse x, allora il vettore di direzione sarà
x = cos(yaw)*cos(pitch)
y = sin(yaw)*cos(pitch)
z = sin(pitch)
noti che non ho usato rotolo; questo è il vettore di unità di direzione, non specifica l'atteggiamento. È abbastanza facile scrivere una matrice di rotazione che trasporterà le cose nella cornice dell'oggetto volante (se vuoi sapere, per esempio, dove punta la punta dell'ala sinistra sta puntando), ma è davvero una buona idea specificare prima le convenzioni. Puoi dirci di più sul problema?
EDIT: (ho in mente di tornare a questa domanda per due anni e mezzo.)
Per la matrice rotazione completa, se usiamo la convenzione di cui sopra e vogliamo che il vettore prima di imbardare, poi lanciare, poi rotolare, per ottenere le coordinate finali nel frame delle coordinate del mondo, dobbiamo applicare le matrici di rotazione nell'ordine inverso.
primo rullo:
| 1 0 0 |
| 0 cos(roll) -sin(roll) |
| 0 sin(roll) cos(roll) |
poi passo:
| cos(pitch) 0 -sin(pitch) |
| 0 1 0 |
| sin(pitch) 0 cos(pitch) |
poi imbardata:
| cos(yaw) -sin(yaw) 0 |
| sin(yaw) cos(yaw) 0 |
| 0 0 1 |
Combinateli, e la matrice di rotazione totale è:
| cos(yaw)cos(pitch) -cos(yaw)sin(pitch)sin(roll)-sin(yaw)cos(roll) -cos(yaw)sin(pitch)cos(roll)+sin(yaw)sin(roll)|
| sin(yaw)cos(pitch) -sin(yaw)sin(pitch)sin(roll)+cos(yaw)cos(roll) -sin(yaw)sin(pitch)cos(roll)-cos(yaw)sin(roll)|
| sin(pitch) cos(pitch)sin(roll) cos(pitch)sin(roll)|
Così per un vettore unitario che inizia in corrispondenza dell'asse x, le coordinate finali saranno:
x = cos(yaw)cos(pitch)
y = sin(yaw)cos(pitch)
z = sin(pitch)
E per il versore che inizia in corrispondenza dell'asse y (ala-punta sinistra), le coordinate finali sarà:
x = -cos(yaw)sin(pitch)sin(roll)-sin(yaw)cos(roll)
y = -sin(yaw)sin(pitch)sin(roll)+cos(yaw)cos(roll)
z = cos(pitch)sin(roll)
FWIW, ci sono sei formula diversa per normalizzati (da -PI a PI) soluzioni Eulero seconda ordine rotazione (e infinito più varianti considerando angoli avvolgere intorno a 2 * PI). A seconda del caso d'uso, potrebbe essere necessario utilizzare una delle formule alternative per ottenere il risultato desiderato. – Adisak
Quali sarebbero le equazioni se avessimo bisogno di rollare? – ApproachingDarknessFish
@ApproachingDarknessFish le equazioni sarebbero esattamente le stesse, poiché il rotolo fa ruotare il vettore su se stesso, che non ha alcun effetto su di esso. –