本征,从给定点旋转带有四元数的 Vector3d?

Eigen, rotate a Vector3d with a quaternion, from a given point?

我有两个 3d 点,如 Eigen::Vector3d

我需要将第二个点旋转一个四元数,围绕第一个点'

我通常用它来旋转矢量:

Eigen::Vector3d point; //point to rotate
Eigen::Quaterniond quat, p2; //quat to rotate by, temp

p2.w() = 0;
p2.vec() = point;
Eigen::Quaterniond rotatedP1 = quat * p2 * quat.inverse();
Eigen::Vector3d rotatedPoint = rotatedP1.vec();

这有效,但它会围绕零旋转点。

如何围绕另一个点旋转该点? 好像第一个点在旋转,第二个点'parented'到它

在下图中,我正在绕绿轴旋转,我希望它绕红轴旋转,方法是将 point2 以某种方式传递给函数。

要将向量 point 绕原点旋转 quat,您只需编写 quat * point(因为 * 运算符相应地重载了)。

要围绕不同的点旋转,您需要移动该点,然后旋转并将其移回。

 quat * (point - point2) + point2

如果quatpoint2已知之前你也可以计算

 quat * point + (point2 - quat * point2)

其中括号内的部分可以预先计算。