行明智的交叉乘积Eigen

时间:2017-04-07 16:55:12

标签: c++ eigen

我正在尝试在一个Eigen::MatrixXd dir的每一行与Eigen::MatrixXd v0v2的相应行之间进行交叉产品,并将结果保存在另一个Eigen::MatrixXd pvec中。

pvec的初始化:Eigen::MatrixXd pvec(v0v2.rows(), 3);

我尝试过这种肮脏的方法:

for(size_t i = 0; i < v0v2.rows(); i++){ pvec.row(i) = dir.row(i).cross(v0v2.row(i)); }

我收到此错误:THIS_METHOD_IS_ONLY_FOR_VECTORS_OF_A_SPECIFIC_SIZE

我认为这是因为列主要/行主要问题所以我添加了.transpose(),但这也无济于事。 我总是可以做一个更脏的个人交叉产品元素,比如这样:

Vec3 crossProduct(const Vec3<T> &v) const { return Vec3<T>(y * v.z - z * v.y, z * v.x - x * v.z, x * v.y - y * v.x); } 但我想做一个Eigen方法。 任何帮助都会很棒!

1 个答案:

答案 0 :(得分:1)

.cross的参数必须在编译时知道为3。 尝试将您的矩阵声明为Eigen::Matrix<double, Eigen::Dynamic, 3> dir(N, 3);等等。