Che cos'è un quaternione?


50

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?



Storicamente, penso che i quaternioni siano arrivati ​​per primi, e in seguito i prodotti punto e croce sono stati derivati ​​dai quaternioni.

2
Ho trovato questo articolo animato molto istruttivo: acko.net/blog/animate-your-way-to-glory-pt2/#quaternions
AShelly

In matematica pura, credo che i quaternioni siano 3 numeri complessi come i² = j² = k² = ijk
Vinz243,

I quaternioni sono il modo migliore per interpolare uniformemente le rotazioni. La sola interpolazione delle matrici di rotazione non funziona, perché di conseguenza non otterrai sempre una matrice di rotazione. L'interpolazione degli angoli di Eulero non provoca una rotazione regolare. Quindi, per animare le rotazioni, come è necessario nella computer grafica o nella robotica, i quaternioni sono la strada da percorrere. E c'è un'estensione utile, ma in qualche modo non quella usata spesso, chiamata dual quaternions che ti permette di rappresentare la trasformazione e la rotazione
Tobias B

Risposte:


43

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:

  1. un asse di rotazione (sotto forma di un vettore tridimensionale)
  2. quanto lontano girare attorno a quell'asse

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.


6
Il blocco del gimbal non è un problema nei quaternioni se inizi dai quaternioni e finisci con i quaternioni, il blocco del gimbal si attiva quando hai un passaggio che si converte in angoli di eulero o indietro.
maniaco del cricchetto,

2
I quaternioni non sono asse + angolo, sono 3 numeri complessi e una scala.
transistor09

11
@ transistor09 credi di avere entrambi ragione? La parte immaginaria a 3 componenti di un'unità quaternione può essere interpretata come un vettore unitario lungo l'asse di rotazione, ridimensionato dal seno di metà dell'angolo di rotazione. La parte reale dell'unità quaternione è il coseno di metà dell'angolo di rotazione. Quindi hai ragione nel dire che non è esattamente un formato dell'asse angolare, ma è vero che i componenti di un quaternione possono essere interpretati come un asse e una misura (non lineare) di quanto lontano girare attorno a quell'asse.
DMGregory

2
Potresti anche menzionare quali vantaggi hanno i quaternioni rispetto a una matrice di rotazione: sono più veloci da combinare. Quando si combinano le rotazioni, moltiplicare due quaternioni richiede meno operazioni rispetto alla moltiplicazione di matrici.
Ripristina Monica il

3
In realtà, nello spazio 2D, i numeri complessi sono l'analogo esatto. Moltiplica un punto 2D con un numero complesso e lo hai ruotato - in effetti, è esattamente lo stesso della solita rotazione sin / cos (che dovrebbe essere ovvio se capisci i numeri complessi abbastanza bene). Questo può essere sfruttato un po ', ma alla fine la grafica 2D non è così intensa per le prestazioni di oggi, quindi non ti dà molti miglioramenti se non ti senti davvero a tuo agio con numeri complessi (che la maggior parte delle persone decisamente non lo sono - come evidenziato dal codice incredibilmente povero basato sul quaternione là fuori: D).
Luaan,

13

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:

  • In Qt . I quat facilitano l'interpolazione tra le rotazioni, come nella funzione slerp .

  • ROS li usa per trasformare le pose dei robot.

  • Nel motore di dinamica Bullet

  • Per un'applicazione molto sofisticata, vedi qui per il loro uso nella meccanica classica 3D.


" Ogni volta che ci sono rotazioni 3D, è buona norma utilizzare i quaternioni." è leggermente troppo forte. Quasi sempre è meglio; ci sono situazioni in cui le alternative sono appropriate. (Come esempio di imperfezione, l'ennesima radice di un Quaternione è multivalore)
Yakk,

1
I quaternioni sono un bene da usare e un dolore da attuare. Puoi andare d'accordo senza di loro se sei a conoscenza del gimbal-lock.
Hatoru Hansou,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.