Esiste un algoritmo esistente per convertire una rappresentazione di quaternione di una rotazione in una rappresentazione dell'angolo di Eulero? L'ordine di rotazione per la rappresentazione di Eulero è noto e può essere una qualsiasi delle sei permutazioni (cioè xyz, xzy, yxz, yzx, zxy, zyx). Ho visto algoritmi per un ordine di rotazione fisso (di solito la direzione della NASA, banca, convenzione di rotolamento) ma non per ordine di rotazione arbitrario.Esiste un algoritmo per convertire le rotazioni di quaternioni in rotazioni di Eulero?
Inoltre, poiché ci sono più rappresentazioni dell'angolo di Eulero di un singolo orientamento, questo risultato sarà ambiguo. Questo è accettabile (perché l'orientamento è ancora valido, potrebbe non essere proprio quello che l'utente si aspetta di vedere), tuttavia sarebbe ancora meglio se ci fosse un algoritmo che ha preso i limiti di rotazione (cioè il numero di gradi di in considerazione della libertà e dei limiti di ogni grado di libertà) e ha fornito la rappresentazione "più ragionevole" di Eulero a fronte di tali vincoli.
Ho la sensazione che questo problema (o qualcosa di simile) possa esistere nei domini IK o di dinamiche del corpo rigido.
risolto: Ho appena realizzato che potrebbe non essere chiaro che ho risolto questo problema seguendo algoritmi di Ken Shoemake dalla grafica gemme. All'epoca ho risposto alla mia domanda, ma a me capita che non sia chiaro che l'ho fatto. Vedere la risposta, sotto, per maggiori dettagli.
Giusto per chiarire - io so come convertire da un quaternione al cosiddetto 'Tait-Bryan' rappresentazione - quello che mi stava chiamando la convenzione 'NASA'. Questo è un ordine di rotazione (assumendo la convenzione che l'asse 'Z' è attivo) di zxy. Ho bisogno di un algoritmo per tutti gli ordini di rotazione.
Probabilmente la soluzione, quindi, è prendere la conversione ordine zxy e derivarne altre cinque conversioni per gli altri ordini di rotazione. Credo che speravo ci fosse una soluzione più "globale". In ogni caso, sono sorpreso di non essere stato in grado di trovare soluzioni esistenti là fuori.
Inoltre, e questo forse dovrebbe essere una questione separata del tutto, qualsiasi conversione (supponendo un ordine rotazione nota, ovviamente) sta per selezionare una rappresentazione Eulero, ma ci sono infatti molti. Ad esempio, dato un ordine di rotazione di yxz, le due rappresentazioni (0,0,180) e (180,180,0) sono equivalenti (e darebbero lo stesso quaternione). C'è un modo per limitare la soluzione usando limiti sui gradi di libertà? Come fai in IK e le dinamiche del corpo rigido? Nell'esempio precedente, se vi fosse solo un grado di libertà attorno all'asse Z, la seconda rappresentazione può essere ignorata.
ho rintracciato un articolo che potrebbe essere un algoritmo in this pdf ma devo confessare che trovo la logica e la matematica un po 'difficile da seguire. Sicuramente ci sono altre soluzioni là fuori? L'ordine di rotazione arbitraria è davvero così raro? Sicuramente tutti i principali pacchetti 3D che consentono l'animazione scheletrica insieme all'interpolazione di quaternioni (ad esempio Maya, Max, Blender, ecc.) Devono aver risolto esattamente questo problema?
Le persone di solito sono abbastanza pigre da cercare di conformarsi ad un tipo di standard. La mia ipotesi non istruita sarebbe quindi che difficilmente riusciresti a trovare una fonte per più di due o tre delle diverse permutazioni. –
Si potrebbe cercare qualcos'altro, poiché gli angoli di Eulero ha una rappresentazione numerica infinita per ogni soluzione. –
Vorrei _love_ non essere costretto a utilizzare gli angoli di Eulero per la rappresentazione, ma per il dominio in cui sto lavorando (animazione 3D) sono il modo standard in cui presentare le rotazioni all'utente. E a causa del problema inerente a loro (blocco cardanico, ecc.) È necessario che anche l'ordine di rotazione sia modificabile. –