特征交叉产品铸造

时间:2017-05-15 13:12:36

标签: c++ matrix eigen

对于Eigen.cross的参数必须在编译时知道大小为3.(例如,将矩阵声明为Eigen::Matrix<float, 3, 1> ...

现在我想知道投射动态矩阵会不会受到伤害?例如:

Eigen::Matrix<float, -1, 1> a(3), b(3), c(3);
...
typedef Eigen::Matrix<float, 3, 1> vector3_t;
c = ((vector3_t)a).cross((vector3_t)b);

我无法真正看到这一点。是否可能涉及隐藏的复制机制?

1 个答案:

答案 0 :(得分:2)

您的解决方案可能会产生副本,但由于操作本身都是内联的并且非常简单,因此它可能几乎完全被优化(只有这样才能确保查看编译器生成的程序集)

要避免复制,可以尝试

typedef Eigen::Ref<const vector3_t> vector3_cr;
c = vector3_cr(a).cross(vector3_cr(b));

但是,在您的情况下,从一开始就将abc声称为vector3_t是不是有缺点?