我是 Eigen 新手,正在尝试在 inputMatrix 的第二列和第三列上使用 atan2() 函数。
atan2 函数用红色下划线表示,告诉我“类 Eigen::Matrix 没有成员“atan2””
,如果我尝试以下操作,我会收到不同的错误:
阿坦2(Z)
-或-
atan2(A.array(), B.array())
再次,作为 Eigen 的新手,我的理解是我需要在矩阵上使用 .array 来执行操作,但我觉得我在下面这样做了。请告诉我我做错了什么。
Eigen::MatrixXd sampleFunction(Eigen::MatrixXd inputMatrix)
{
Eigen::MatrixXd Z, A, B, V;
A = inputMatrix.col(1);
B = inputMatrix.col(2);
Z = (A.array(), B.array());
V = Z.atan2();
return V;
}
只是为了澄清 tan 有两种不同的三角函数。
atan2()
计算所有四个象限。
atan()
仅计算一象限和四象限。
现在,
eigen
仅支持atan()
。它计算反正切。
这就是您收到错误的原因
"class Eigen::Matrix has no member "atan2""
。
但是,使用头文件
#include <cmath>
或 #include <valarray>
,您可以使用函数 atan2()
。 valarray
还包括atan2()
。
例如使用头文件
#include <valarray>
#include <iostream>
#include <valarray>
int main()
{
double y[] = { 2.0, 1.6, -3.8, 2.3 };
double x[] = { 3.0, -2.4, 2.0, -1.8 };
std::valarray<double> ycoords(y, 4);
std::valarray<double> xcoords(x, 4);
//Results go to valarray
std::valarray<double> res = atan2(ycoords, xcoords);
// print results of atan2() function
std::cout << "results:";
for (size_t i = 0; i < res.size(); ++i)
std::cout << ' ' << res[i];
std::cout << ' ';
return 0;
}
现在有了这个MR:将atan2的矢量化实现添加到Eigen。,你可以直接使用这一行:
V = A.array().atan2(B.array());
但是Eigen自从合并以来还没有发布任何新版本,所以你可能需要使用eigen-master或者等待
3.4.0
之后的新版本。