结合 Eigen 的 .transpose() 和其他操作



当我打开他们的MATLAB到libigl+Eigen的转换表时,我正在阅读libigl的文档。在那里(第17排,或第一排红色(,它站着:

不要试图在这样的表达式中组合.transpose()

C = A + B.transpose();

相反,他们会这样做:

SparseMatrixType BT = B.transpose();
SparseMatrixType C = A+BT;

为什么?我在Eigen的文档中找不到任何关于它的信息。

在我的代码中,我有这样的东西:

class Point {
public:
Point() : rot_matrix(Eigen::Matrix3d::Identity()), cm_set(Eigen::Vector3d::Zero()) {}
const Eigen::Matrix3d & rot_matrix() const { return rot_matrix; }
const Eigen::Matrix3d & cm_set() const { return cm_set; }
private:
Eigen::Matrix3d rot_matrix;
Eigen::Vector3d cm_set;
};

auto other = Point();
const Vector3d point = other.rot_matrix().transpose()*other_cm + other.cm_set();

这会导致程序错误吗?

根据Eigen文档,transpose()的唯一限制是

m = m.transpose();

因此

MatrixType res = A + B.transpose();

合法吗

相关内容

  • 没有找到相关文章

最新更新