2009-11-06 10 views
6

I quaternioni sono utili per interpolare le rotazioni tra di loro. Fin qui tutto bene.Posso interpolare la rotazione da due Quaternions creati da Yaw/Pitch/roll?

Se ho un gioco in rete, sarà sufficiente trasferire la rotazione come vettore3f o dovrei usare un quaternione? Per rendere il gioco più fluido, potrei dover interpolare tra l'ultima rotazione inviata e quella corrente.

Ma posso interpolare le rotazioni tra due Quaternioni che sono stati creati da imbardata/passo/rotolo?

Quaternion a = Quaternion.FromYawPitchRoll(x1,y1,z1); 

Quaternion b = Quaternion.FromYawPitchRoll(x2,y2,z2); 

a.Interpolate(b, value); // will this work correctly? 

risposta

6

Sì. Il problema con gli angoli di Eulero è il blocco del giunto cardanico, che alcuni orienta gli ioni finiscono con un grado di libertà in meno. Quando converti dagli angoli di Eulero in un quaternario, quel problema è risolto. È possibile convertire quasi tutte le rappresentazioni degli assi 3D in forma di quaternioni e viceversa, senza alcuna perdita di informazioni. Le matrici devono essere isotropiche (senza scala o taglio) e i vettori devono essere di lunghezza unitaria.

L'interpolazione lineare tra quaternioni è denominata slerp. L'interpolazione quadratica tra quaternioni si chiama squadra. Poiché i quaternioni sono solo numeri complessi con tre parti immaginarie, le stesse equazioni che funzionano su numeri reali e vettori si applicano ai quaternioni. Ricordati solo di usare le regole corrette quando fai moltiplicazione, aggiunta, registro ed esponenziazione. Può aiutare a immaginare che le parti immaginarie i, j e k formano insieme un vettore di assi, mentre la parte reale è una scala.

+0

Dovresti menzionare (come ha fatto @Justicle) che plain-ol 'lerp funziona bene per i quaternioni in molti casi. –

+0

Ho letto che le rotazioni di Eulero non sono univoche, quindi non puoi interpolarle tra di loro. La loro conversione in quaternioni li rende davvero non ambigui, il che mi sembra un po 'illogico. – codymanix

+0

@codymanix: Forse, ma è il caso. Non puoi nemmeno _utilizzare gli angoli di eulero direttamente.Poiché i quaternioni hanno un ulteriore grado di libertà, evitano l'intero problema con il blocco cardanico, indipendentemente dalla rappresentazione precedente o da ciò che viene convertito in seguito. Angoli di Eulero -> quaternion -> matrix è interamente kosher. –

5

È possibile interpolare tra quaternioni. Una volta ho scritto un generatore di animazioni di fotogrammi chiave basato su quaternioni che ha generato fotogrammi per sistemi di rendering da alcuni punti specifici. Non riesco a condividere il codice perché è classificato :-(

C'è stato un documento negli atti SIGGRAPH negli anni '80 su questo argomento Il vantaggio principale dei quaternioni è che non c'è singolarità come con gli angoli di Eulero .

Ah, ecco il riferimento:

Shoemaker, Ken “Animazione di rotazione con le curve quaternioni”, SIGGRAPH '85, San Francisco, 22-26 luglio 1985, vol 19, No. 3, 1985.. ACM 0-89791-166-0/85/007/0245, pp. 245-254.

+0

I quaternioni non soffrono di blocco del giunto cardanico, ma hanno un'ambiguità. [1, i, j, k] e [-1, i, j, k] rappresentano lo stesso orientamento. Trovo strano che -1 rappresenti 360 gradi di rotazione nel piano complesso, invece del solito 180, come per i vettori :-) –

+2

Questo non è proprio ambiguo quando viene usato come fotogramma chiave. (1,0,0,0) -> (0,0,0,0) -> (1,0,0,0) rappresenta un altro movimento (1,0,0,0) -> (0,0 , 0,0) -> (- 1,0,0,0) sebbene la posizione iniziale e finale e anche la posizione intermedia siano uguali. – WorldSEnder

4

Sì e no. Ecco una buona discussione: http://number-none.com/product/Understanding%20Slerp,%20Then%20Not%20Using%20It/

Nota che non importa davvero come hai ottenuto i quaternioni, si applicano le stesse regole.

Modifica: Ho usato il codice sorgente presentato nel documento su un numero di progetti e posso garantire per questo.

+0

Non tanto una discussione quanto una persona che ha chiaramente preso una decisione ;-) Se si utilizzano i quaternioni per l'interpolazione, è necessario accontentarsi di alcune delle proprietà bizzarre. Penso che possiamo dare all'autore della domanda il beneficio del dubbio; che ci ha pensato fino in fondo. Una buona lettura tuttavia. –

+0

"discussione" è una parola educata per "rant" :-) – Justicle

+0

Sì, sto solo educatamente rompendo le palle ;-) Fine settimana finalmente! –

Problemi correlati