作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想创建一个函数来接收一个角度,两个 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/
我是一名优秀的程序员,十分优秀!