/ / Otáčajte jednotkový vektor daným kvartérom - java, opengl, matematika, rotácia, kvaterniony

Otočte jednotku vektorom na zadanú hodnotu Quaternion - java, opengl, math, rotation, quaternions

Pokúšam sa vypočítať jednotkový vektor, ktorý ukazuje na moju kameru s otvoreným okom. Ako by som vzhľadom na rotačný kvartér (w, x, y, z) vypočítal rotáciu jednotkového vektora okolo tohto kvartéru?

V tomto prípade môže byť jednotkový vektor obmedzený na (0,0, -1).

EDIT: Konečné riešenie

Pre rotáciu (0,0,1):

vec.x=2*x*z - 2*y*w;
vec.y=2*y*z + 2*x*w;
vec.z=1 - 2*x*x - 2*y*y;

Všimnite si, že matica musí byť transponovaná pre použitie s OpenGL.

odpovede:

3 pre odpoveď č. 1

Skonvertujte kvartér na rotačnú maticu 3x3 a použite túto rotáciu na váš vektor.

Pre jednotku (w, x, y, z) quaternion, táto matica je:

      ( 1 - 2 * ( y * y + z * z )      2 * ( x * y - z * w )      2 * (x * z + y * w ) )
R = (     2 * ( x * y + z * w )  1 - 2 * ( x * x + z * z )      2 * (y * z - x * w ) )
(     2 * ( x * z - y * w )      2 * ( y * z + x * w )  1 - 2 * (x * x + y * y ) )

Ak má váš vektor takú jednoduchú formu, ako je (0, 0, -1), nebudete musieť počítať všetkých 9 koeficientov rotačnej matice, pretože výsledok násobenia maticových vektorov používa iba niektoré z koeficientov (posledný stĺpec R).