Wolfram Alpha告诉我q=(7.0711e-01,1.5272e-16,-7.0711e-01,0e+00)
是一个旋转,结果在用于生成四元数的数据的上下文中是有意义的(在一些简单的测试数据上基于分析最小二乘点的注册......)。
我的代码给了我一个不同的答案,但我很难过为什么。我已经多次使用我的代码,但我没有发现任何东西。那可能只是我需要睡觉,明天可能会非常明显,但我不确定。
代码:
// 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
我的结果:
-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
答案 0 :(得分:1)
为wolfram alpha使用w,x,y,z顺序,为代码使用x,y,z,w。
http://www.wolframalpha.com/input/?i=quaternion%280e%2B00%2C7.0711e-01%2C1.5272e-16%2C-7.0711e-01%29