c++ - Eigen :围绕轴 W 执行 3D 旋转并锚定在点 P

标签 c++ rotation eigen

我想创建一个函数来接收一个角度,两个 vector ,其中一个是定义旋转轴方向的单位 vector ,另一个是要旋转的 vector 和一个定义 anchor 的点 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 对象来变换点。查看manual了解详情。

关于c++ - Eigen :围绕轴 W 执行 3D 旋转并锚定在点 P,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38274455/

相关文章:

c++ - 为什么 emplace_back() 会这样?

c++ - 为什么在宏中使用明显无意义的 do-while 和 if-else 语句?

c++ - 与 *this 级联,返回对类常量的引用

javascript - 在网格上将矩形元素旋转 90 度

javascript - HTML5 Canvas : How to make a loading spinner by rotating the image in degrees?

c++ - 特征:访问矩阵中的分散元素

c++ - std::mem_fun 与 std::mem_fn

android - Drawable 围绕其中心旋转 Android

c++ - include <Eigen/Dense> 成功, include <Eigen> 失败

c++ - 访问矩阵的列作为特征中的 vector