我试图在一个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); }但是我想做一个本征方法。任何帮助都会很好!
发布于 2017-04-08 02:24:41
.cross的参数必须在编译时知道大小为3。尝试将矩阵声明为Eigen::Matrix<double, Eigen::Dynamic, 3> dir(N, 3);,等等。
https://stackoverflow.com/questions/43283444
复制相似问题