在两个特征矩阵上使用 atan2() 函数时出现错误

问题描述 投票:0回答:2

我是 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;
}
c++ matrix eigen
2个回答
0
投票

只是为了澄清 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;
}

0
投票

现在有了这个MR:将atan2的矢量化实现添加到Eigen。,你可以直接使用这一行:

V = A.array().atan2(B.array());

但是Eigen自从合并以来还没有发布任何新版本,所以你可能需要使用eigen-master或者等待

3.4.0
之后的新版本。

© www.soinside.com 2019 - 2024. All rights reserved.