我在有实时轮播数据的应用程序中使用Eigen
。
我有两个对象在3d空间中旋转,并在XYZ轴上旋转。
我需要做的是将一个对象的Z轴旋转添加到另一个对象的旋转。 如果我使用欧拉角,但是使用四元数,这将很简单。
如何使用Eigen
将一个四元数的单个轴添加到另一个?
例如,我有两次轮换。
Eigen::Quaternionf quatA(w1,x1,y1,z1);
Eigen::Quaternionf quatB(w2,x2,y2,z2);
让我们说这些等于以下XYZ顺序的欧拉角:
rotA = 10,20,30;
rotB = 20,30,40;
我需要做的是使用以下方法创建第三轮:
rotC = XB, YB, (ZA + ZB)
= 20, 30, 70;
我可以不转换为欧拉角吗?
我可以简单地创建另一个这样的四元数吗?
float newZ = z1 + z2;
Eigen::Quaternionf quatC(w1,x1,y1,newZ);
还是我需要做类似的事情?
quatB.x() = 0;
quatB.y() = 0;
quatC = quatA * quatB;
或:
quatA.vec().z() = quatA.vec().z() + quatB.vec().z();
谢谢。