我目前正在调查Eigen::Isometry3f
, 定义为typedef Transform<float,3,Isometry> Isometry3f;
.
例如,我不能分配一个Affine3f
对此Isometry3f
,这有利于保持等轴测完整。 (原因是,Mode
在赋值运算符中检查Transform
.)
但是我可以 - 通过Transform::operator(...)
,哪些快捷方式Transform::m_matrix(...)
- do
Eigen::Isometry3f iso;
iso.setIdentity();
iso(1, 1) = 2; //works (but should not ?!)
从而破坏等距。
Q1:
不应该Transform::operator(...)
被禁止或至少发出警告?如果你真的想搞砸你仍然可以使用Transform.matrix()(1,1) = 2
...
Q2:
是否还有其他陷阱可能导致我不小心破坏我的等轴测图?
Q3:
如果还有其他陷阱:这样做的目的是什么Mode==Isometry
?不就是为了保证封闭性/安全性吗?
主要目的Mode==Isometry
是为了提高某些操作的速度,例如反转或提取旋转部分。它本质上是说“我,用户,向 Eigen 保证底层矩阵代表等距”。因此,请勿自行拍摄,责任由用户承担。您还可以通过用坏矩阵替换线性部分来破坏初始等距:
iso.linear() = Matrix3f::Random();
检查等距并不便宜,因此在各处添加检查会破坏最初的目的。也许,添加一个bool Transform::checkIsometry()
将有助于跟踪用户代码中的问题,但这超出了 SO 的范围。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)