我想创建一个接收角度的函数,两个向量,其中一个是定义旋转轴方向的单位向量,另一个是要旋转的向量和定义锚点的点P旋转的位置。
要在Eigen中实现这一点,我想我必须使用几何模块,不幸的是,我认为这个模块的文档不是很好,我无法理解它。
我的想法是将旋转变换AngleAxis<float>
与两个翻译结合起来,但我不明白我该怎么做。我只设法定义了这样的旋转矩阵:
VectorXf m1(3);
Matrix3f m;
m1(0)=2;
m1(1)=1;
m1(2)=2;
m = AngleAxisf(M_PI, m1);
但是,我永远无法创建翻译矩阵或使用他们在模块文档中提到的表达式的连接。
我很感激你能给予的任何帮助/建议。
我提前感谢。
答案 0 :(得分:1)
要表示旋转加翻译,您需要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
对象来转换点。有关详细信息,请参阅manual。