本征,从给定点旋转带有四元数的 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
如果quat
和point2
已知之前你也可以计算
quat * point + (point2 - quat * point2)
其中括号内的部分可以预先计算。
我有两个 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
如果quat
和point2
已知之前你也可以计算
quat * point + (point2 - quat * point2)
其中括号内的部分可以预先计算。