Sono qui che il mio spirito finirà! Sto lavorando sulla riduzione del lag nel mio sparatutto in prima persona, e ora è solo un caso di aggiungere qualche estrapolazione. Posso estrapolare la posizione; ottenendo le ultime due posizioni e la velocità da esse, quindi aggiungendo la velocità alla posizione esistente (* delta time). Tuttavia, non posso fare lo stesso per la rotazione. Per impostazione predefinita, gli angoli sono Eulero, ma posso (e lo faccio) convertirli in quaternioni in quanto possono subire il blocco del gimball. Come estrapolare un nuovo orientamento da 2 orientamenti precedenti? Ho tempo tra i pacchetti, 2 pacchetti e l'orientamento corrente.Come posso estrapolare una nuova rotazione quaternion da due pacchetti precedenti?
risposta
Se si rappresentano i due orientamenti come vettori, il prodotto vettoriale incrociato di essi vi darà l'asse di rotazione e il prodotto punto vettoriale può essere utilizzato per trovare l'angolo di rotazione.
È quindi possibile calcolare una velocità angolare nello stesso modo in cui è stata calcolata la velocità scalare e utilizzarla per calcolare la rotazione estrapolata attorno all'asse determinato in precedenza.
ho trovato una buona risposta qui: http://answers.unity3d.com/questions/168779/extrapolating-quaternion-rotation.html
ho adattato il codice per le mie esigenze e funziona abbastanza bene!
Per i due quaternioni qa, qb, ciò fornirà interpolazione ed estrapolazione utilizzando la stessa formula. t è la quantità di interpolazione/estrapolazione, t di 0,1 = 0,1 della via da qa-> qb, t = -1 -> estrapola un intero passo da qa-> qb indietro, ecc. Ho usato le funzioni autodefinite per consentire l'uso dei quaternioni/axisAngle con OpenCV cv :: Mat ma credo che sceglierò Eigen per che invece
Quat qc = QuaternionMultiply(qb, QuaternionInverse(qa)); // rot is the rotation from qa to qb
AxisAngle axisAngleC = QuaternionToAxisAngle(qc); // find axis-angle representation
double ang = axisAngleC.angle; //axis will remain the same, changes apply to the angle
if (ang > M_PI) ang -= 2.0*M_PI; // assume rotation to take the shortest path
ang = fmod(ang * t,2.0*M_PI); // multiply angle by the interpolation/extrapolation factor and remove multiples of 2PI
axisAngleC.angle = ang;
return QuaternionMultiply(AxisAngleToQuaternion(axisAngleC),qa); // combine with first rotation
Salve, mi dispiace per ressurect un vecchio filo tale. Sto lottando con questo stesso problema (ottenendo velocità angolare da Eigen :: Quaterniond e aggiungendolo con il tempo CurrentQuat + VelocityQuat *). L'hai mai usato con C++/Eigen? Cosa significa 'fmod' in quanto sopra? Grazie! – anti
Ciao, sì, ho usato questo sotto C++ ma non con Eigen (usato le mie lezioni nei giorni). @ fmod: http://www.cplusplus.com/reference/cmath/fmod –
- 1. Ottieni rotazione euler da Quaternion?
- 2. Converti Quaternion rotazione in matrice di rotazione?
- 3. Animazione rotazione cubo Quaternion
- 4. Quaternion matematica per rotazione?
- 5. Vettore di direzione da Quaternion?
- 6. Componente di una rotazione quaternion attorno ad un asse
- 7. Posso interpolare la rotazione da due Quaternions creati da Yaw/Pitch/roll?
- 8. Ottenere quaternion per ruotare tra due vettori
- 9. Converti quaternion da sistema destrorso a sinistrorso
- 10. Come posso "estrapolare" i valori da una matrice multidimensionale in modo intelligente?
- 11. Come escludere le versioni precedenti della dipendenza da Maven e usarne una nuova versione?
- 12. Sfogliare gli errori di compilazione precedenti durante una nuova compilation?
- 13. Modo efficiente per calcolare una matrice di rotazione 3x3 dalla rotazione definita da due vettori 3D
- 14. I pacchetti R compilati sono compatibili con le versioni precedenti?
- 15. Fotocamera Quaternion. Come faccio a ruotare correttamente?
- 16. Come ottenere versioni precedenti di pacchetti usando MSYS2?
- 17. Come posso iniziare una nuova riga HTML da PHP?
- 18. Come posso creare una nuova finestra da QML?
- 19. Come posso creare una nuova attività da IntelliJ?
- 20. Come aprire una nuova applet da un'applet
- 21. simulare a rotazione due dadi
- 22. selenio, come posso selezionare una nuova finestra
- 23. Come posso creare una nuova annotazione?
- 24. Utilizzo di Log4J 1. *, come posso scrivere due pacchetti su due file separati?
- 25. Come posso creare due nuove sezioni mutabili da una sezione?
- 26. Come posso restituire due valori da una funzione in Python?
- 27. Come posso aprire una nuova finestra usando jQuery?
- 28. OpenGL quaternioni rotazione matrice
- 29. combinare due immagini in una nuova immagine
- 30. Come ottenere l'URL di due pagine precedenti in php
ringrazio molto –