对于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);
我无法真正看到这一点。是否可能涉及隐藏的复制机制?
答案 0 :(得分:2)
您的解决方案可能会产生副本,但由于操作本身都是内联的并且非常简单,因此它可能几乎完全被优化(只有这样才能确保查看编译器生成的程序集)
要避免复制,可以尝试
typedef Eigen::Ref<const vector3_t> vector3_cr;
c = vector3_cr(a).cross(vector3_cr(b));
但是,在您的情况下,从一开始就将a
,b
,c
声称为vector3_t
是不是有缺点?