Sono un fisico, ho imparato un po 'di programmazione e ho incontrato molte persone che usano i quaternioni per le rotazioni invece di scrivere cose in forma matrice / vettoriale.
In fisica, ci sono ottime ragioni per cui non usiamo i quaternioni (nonostante la bizzarra storia che viene occasionalmente raccontata su Hamilton / Gibbs / ecc.). La fisica richiede che le nostre descrizioni abbiano un buon comportamento analitico (questo ha un significato definito con precisione, ma in alcuni modi piuttosto tecnici che vanno ben oltre ciò che viene insegnato nelle normali classi introduttive, quindi non entrerò nei dettagli). Si scopre che i quaternioni non hanno questo comportamento piacevole, quindi non sono utili, e i vettori / matrici sì, quindi li usiamo.
Tuttavia, limitatamente alle rotazioni rigide e alle descrizioni che non utilizzano alcuna struttura analitica, le rotazioni 3D possono essere descritte in modo equivalente in entrambi i modi (o in pochi altri modi).
In generale, vogliamo solo una mappatura di un punto X = (x, y, z) con un nuovo punto X '= (x', y ', z') soggetto al vincolo che X 2 = X ' 2 . E ci sono molte cose che lo fanno.
Il modo ingenuo è disegnare semplicemente i triangoli che questo definisce e usare la trigonometria, o usare l'isomorfismo tra un punto (x, y, z) e un vettore (x, y, z) e la funzione f (X) = X 'e una matrice MX = X ', o usando i quaternioni, o proiettando fuori componenti del vecchio vettore lungo quello nuovo usando qualche altro metodo (x, y, z) T. (a, b, c) (x', y ', z '), ecc.
Da un punto di vista matematico, queste descrizioni sono tutte equivalenti in questa impostazione (come un teorema). Hanno tutti lo stesso numero di gradi di libertà, lo stesso numero di vincoli, ecc.
Allora perché i quaternioni sembrano preferiti ai vettori?
I soliti motivi che vedo non sono il blocco del gimbal o problemi numerici.
L'argomento del blocco del gimbal non sembra strano, poiché questo è solo un problema di angoli di eulero. È anche solo un problema di coordinate (proprio come la singolarità a r = 0 in coordinate polari (lo Jacobiano perde rango)), il che significa che è solo un problema locale e può essere risolto cambiando le coordinate, ruotando fuori dalla degenerazione, o utilizzando due sistemi di coordinate sovrapposti.
Sono meno sicuro dei problemi numerici, dal momento che non so in dettaglio come sarebbero implementati entrambi (e qualsiasi alternativa). Ho letto che ri-normalizzare un quaternione è più facile che farlo per una matrice di rotazione, ma questo è vero solo per una matrice generale; una rotazione ha vincoli aggiuntivi che banalizzano questo (che sono incorporati nella definizione di quaternioni) (In effetti, questo deve essere vero poiché hanno lo stesso numero di gradi di libertà).
Allora qual è la ragione per l'uso di quaternioni su vettori o altre alternative?