Che cos'è un quaternione e fa come funzionano? Inoltre, quali vantaggi ottieni usando tre punti su un piano 2D? Infine, quando si considera buona pratica usare i quaternioni?
Che cos'è un quaternione e fa come funzionano? Inoltre, quali vantaggi ottieni usando tre punti su un piano 2D? Infine, quando si considera buona pratica usare i quaternioni?
Risposte:
Matematicamente, un quaternione è un numero complesso con 4 dimensioni. Ma nello sviluppo del gioco, i Quaternioni sono spesso usati per descrivere una rotazione nello spazio 3d codificando:
Nota che queste informazioni sono codificate con seni e coseni all'interno del quaternione, quindi in generale non dovresti provare a impostare o leggere esplicitamente i componenti interni del quaternione (xyzw). È facile fare un errore in questo modo e ottenere un risultato non significativo. Una libreria matematica per quaternioni di solito fornisce funzioni per operare su quaternioni (ad es. Convertendole in e da angoli di Eulero o angolo-asse), il che assicura che la matematica sia corretta e abbia il vantaggio di rendere il codice più facile da leggere e comprendere.
Un modo alternativo per descrivere le rotazioni è descrivendo fino a che punto girare attorno ai 3 assi fissi 'x, ye z (aka angoli di Eulero) che richiede solo 3 numeri invece di 4 ed è solitamente più intuitivo da usare. Tuttavia, gli angoli di eulero sono soggetti a un problema chiamato gimbal-lock : quando si ruota di 90 ° attorno a un asse, gli altri due assi diventano equivalenti. Con i quaternioni, questo problema non si verifica.
Un altro modo per esprimere le rotazioni nello spazio 3d è con una matrice di trasformazione 4x4 . Ma con una matrice di trasformazione non puoi solo ruotare, ma anche ridimensionare, tradurre e inclinare. Quando si desidera solo la rotazione, una matrice sarebbe eccessiva e un quaternione una soluzione molto più rapida e semplice.
Questo problema è rilevante solo nello spazio 3d. Nello spazio 2d, hai solo un asse di rotazione. Qualsiasi rotazione può essere espressa con un singolo numero in virgola mobile o un singolo numero complesso, quindi non si ha questo problema. Mentre puoi teoricamente esprimere una rotazione su un piano 2d con un quaternione in cui l'asse punta verso (o fuori) dal piano, di solito è eccessivo.
Questo è da aggiungere alla risposta di @ Philipp.
Inoltre, quali vantaggi ottieni usando tre punti su un piano 2D?
Non hai davvero bisogno di quaternioni se tutto ciò che ti interessa è ruotare sul piano, cioè attorno all'asse z. In questo caso, tutto ciò di cui hai bisogno è l'angolo di imbardata e puoi sfruttare il fatto che le rotazioni successive intorno all'asse z commutano. Quindi puoi applicare le tue rotazioni nell'ordine che desideri.
La situazione è diversa se si ruota su un piano che non è il piano XY. Questa rotazione equivale alla rotazione attorno a un asse 3D arbitrario. Ora hai due scelte:
ruotare il piano in 3D in modo che coincida con il piano XY e quindi imbardare e trasformarsi indietro, oppure
pensa alla tua rotazione come all'inizio in 3D.
La seconda scelta è più facile da codificare. Come ha detto @Philipp, i quaternioni evitano il blocco del gimbal (se si evitano conversioni intermedie di RPY o asse / angolo).
Infine, quando si considera buona pratica usare i quaternioni?
Ogni volta che ci sono rotazioni 3D, è buona norma usare i quaternioni.
Per esempio: