Eigen:无法对 Vector2i 使用norm()

mal*_*0_o 5 eigen

我不能这样做:

Vector2i vec(0, 1, 2);
cout << vec.norm() << endl;
Run Code Online (Sandbox Code Playgroud)

因为它给出了一个编译器错误,其中提到:THIS_FUNCTION_IS_NOT_FOR_INTEGER_NUMERIC_TYPES在一些失败的断言中。

我可以做:

Vector2i i_vec(0, 1, 2);
Vector2f f_vec;
f_vec = i_vec.cast<float>();
cout << f_vec.norm() << endl;
Run Code Online (Sandbox Code Playgroud)

这显然有效。

norm问题:没有为 定义该方法的任何原因吗VectorXi

也许 Eigen 使用 的元素类型Vector来确定 的返回类型norm()(在这种情况下,norm()不会为 的返回类型定义是有意义的int)?

只是好奇。

Eug*_*e B 5

如果我norm()正确地记得函数的操作,它会取某些输入的平方根。显然,平方根在许多情况下不是整数。另一方面,如果我记得 eigen 包的逻辑,一旦声明了特定元素的矩阵 ( int, double, complex<double>),它就仅适用于这种类型的元素。所以你的建议是完全正确的。

  • 为了完成答案,让我补充一下,您不需要创建一个临时的:`i_vec.cast&lt;float&gt;().norm()`,并且您还可以计算平方范数:`i_vec.squaredNorm()`和如果需要的话,然后取平方根。 (3认同)