定义了
Eigen::MatrixXf normal_1,normal_2;
double slope_angle=(abs(normal_1*normal_2))/((normal_1*normal_1)*(normal_2*normal_2));
编译后
报错
error: no matching function for call to 'abs(const Eigen::Product<Eigen::Matrix<float,-1,-1>,Eigen::Matrix<float,-1,-1>,0>)'
该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
根据错误信息,可以看到编译器无法找到匹配的 abs
函数。这是因为 abs
函数的参数类型不是 Eigen::Product
类型,而是标准 C++ 内置类型,例如 int
、float
、double
等。
在你的代码中,abs
函数的参数是 abs(normal_1*normal_2)
,这个表达式的类型是 Eigen::Product<Eigen::Matrix<float,-1,-1>,Eigen::Matrix<float,-1,-1>,0>
,它是两个 Eigen::Matrix
类型的矩阵乘积,而不是标准 C++ 内置类型。
要解决这个问题,可以考虑使用 Eigen 库提供的数学函数来计算矩阵的绝对值。例如,可以使用 norm()
函数来计算矩阵的 Frobenius 范数,然后再取绝对值。下面是一个示例代码:
Eigen::MatrixXf normal_1, normal_2;
double norm_product = (normal_1 * normal_2).norm();
double slope_angle = std::abs(norm_product) / ((normal_1 * normal_1).norm() * (normal_2 * normal_2).norm());
在这个示例中,我们使用了 norm()
函数来计算矩阵的 Frobenius 范数,然后再使用标准 C++ 库提供的 abs()
函数来计算绝对值。
希望这个解决方案可以帮助你解决问题。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢
数值运算的需求是多种多样的。Eigen为这些不同的需求进行分类,并以头文件的形式进行区分。
这样用户只需要包含应用需要的头文件即可。
总结如下: