【问题标题】:Row wise cross product Eigen逐行交叉积特征
【发布时间】:2017-04-08 10:24:41
【问题描述】:

我正在尝试在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 方法。 任何帮助都会很棒!

【问题讨论】:

    标签: c++ eigen


    【解决方案1】:

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

    【讨论】:

    • 也可以使用缩写Eigen::MatrixX3d dir(N, 3);
    • 想通了。不过感谢您的回答!
    • 我还需要循环执行此操作吗?此外,我将矩阵声明出函数并通过引用使用矩阵调用函数。它仍然给我同样的错误。
    • @RickM。你有想过吗?你最后做了什么? for 循环? xkcd 一如既往的相关,xkcd.com/979
    猜你喜欢
    • 2013-11-08
    • 2020-07-04
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    • 2013-05-29
    • 2015-11-13
    • 2018-10-17
    • 2021-08-27
    相关资源
    最近更新 更多