【发布时间】:2018-07-12 23:35:02
【问题描述】:
我对 Eigen 在组合转换时使用的顺序有点困惑。
translate() 和 pretranslate() 有什么区别?
因为在实践中我这样做时会得到不同的结果:
Eigen::Affine3d t_res = Eigen::Affine3d::Identity();
t_res.pretranslate(t1)
.translate(t2)
.rotate(t3);
...还有这个:
Eigen::Affine3d t_res = Eigen::Affine3d::Identity();
t_res.translate(t1)
.translate(t2)
.rotate(t3);
另外,对于最后一个代码 sn-p,Eigen 是否这样做
t_res = (t1 * ( t2 * t3 ))
或者这个
t_res = ((t1 * t2) * t3 )
?
【问题讨论】:
-
C++ 执行操作数的顺序有时是神秘的或根本没有定义,但在这种情况下它是从左到右的。每个函数的输出是执行下一个函数的对象。由于每个函数的输出都是对
*this的引用,因此该对象正在从左到右的链中修改自己。
标签: c++ matrix linear-algebra eigen