/ / Quaternion do rotačnej matice - som slepý, alebo to robím zle? - c ++, matica, rotácia, štvorkolky, pásovec

Kvartérka na rotačnú maticu - som slepý alebo len robí to zle? - c ++, matica, rotácia, quaternions, armadillo

Wolfram Alpha mi to povie q=(7.0711e-01,1.5272e-16,-7.0711e-01,0e+00) je jedna rotácia a výsledok dáva zmysel v kontexte údajov použitých na generovanie kvartéru (analytická najmenšia štvorcová bodová registrácia na niektorých jednoduchých testovacích údajoch ...).

Môj kód mi dáva inú odpoveď, ale ja sompauza, prečo. Niekoľkokrát som bol nad svojím kódom, ale nič som si nevšimol. To by mohlo byť len ja potrebujem spať, a to by mohlo byť super zrejmé zajtra, ale ja si nie som istý.

kód:

// given a column vector q known to be a unit quaternion
double xx = q[0]*q[0], xy = q[0]*q[1], xz = q[0]*q[2], xw = q[0]*q[3];
double yy = q[1]*q[1], yz = q[1]*q[2], yw = q[1]*q[3];
double zz = q[2]*q[2], zw = q[2]*q[3];

arma::mat rotation;

// yes, I know I could get rid of some of these multiplications
rotation << (1 - 2 * yy - 2 * zz) << (2 * xy - 2 * zw) << (2 * xz + 2 * yw)
<< arma::endr
<< (2 * xy + 2 * zw) << (1 - 2 * xx - 2 * zz) << (2 * yz - 2 * xw)
<< arma::endr
<< (2 * xz - 2 * yw) << (2 * yz + 2 * xw) << (1 - 2 * xx - 2 * yy)
<< arma::endr;

// and now I have the wrong result

Môj výsledok:

-2.2204e-16   2.1598e-16  -1.0000e+00
2.1598e-16  -1.0000e+00  -2.1598e-16
-1.0000e+00  -2.1598e-16   2.2204e-16

Výsledok Wolfram Alpha

odpovede:

1 pre odpoveď č. 1

Použite w, x, y, z pre wolfram alfa a x, y, z, w pre váš kód.

http://www.wolframalpha.com/input/?i=quaternion%280e%2B00%2C7.0711e-01%2C1.5272e-16%2C-7.0711e-01%29