[英]Eigen: Perform an 3D rotation around an axis W and anchored at a point P
我想创建一个函数,它接收一个角度、两个向量,其中一个是定义旋转轴方向的单位向量,另一个是要旋转的向量和定义锚定位置的点 P回转。
为了在 Eigen 中实现这一点,我想我必须使用几何模块,不幸的是,我认为这个模块的文档不是很好,我无法理解它。
我的想法是将旋转变换AngleAxis<float>
与两个平移结合起来,但我不明白我该怎么做。 我只能像这样定义旋转矩阵:
VectorXf m1(3);
Matrix3f m;
m1(0)=2;
m1(1)=1;
m1(2)=2;
m = AngleAxisf(M_PI, m1);
但是,我永远无法创建翻译矩阵或使用他们在模块文档中提到的表达式的串联。
如果您能提供任何帮助/建议,我将不胜感激。
我提前致谢。
要表示旋转加平移,您需要一个 3x4 或 4x4 矩阵。 使用 Eigen,您可以直接连接旋转和平移,如下所示:
Vector3f w = ...; // rotation axis
Vector3f c = ...; // center of rotation
Affine3f A = Translation3f(c) * AngleAxisf(theta, w) * Translation3f(-c);
Affine3f
是一个Eigen::Transform 。 它封装了一个Matrix4f
,您可以使用A.matrix()
获得它。 您也可以直接使用Affine3f
对象来变换点。 有关详细信息,请参阅手册。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.