Eigen C++:将 2D 极坐标转换为笛卡尔坐标的最佳方法

Eigen C++: Best Way To Convert 2D Polar To Cartesian

我目前在做:

Eigen::Vector2d polar(2.5, 3 * M_PI / 4);
Eigen::Vector2d cartesian = polar.x() * Vector2d(cos(polar.y()), sin(polar.y()));

但我不确定这是否是使用 Eigen 的正确方法,或者是否有更好的内置方法。

谢谢!

如果您想坚持使用 Eigen,我觉得这很合适。

一般来说,由于极坐标表示有角度,因此最好避免使用 Eigen::Vector2d 只是为了减少将来可能犯的错误(比如将多个角度加在一起而不处理事实上 0 == 2*PI)。也许你可以用结构代替:

struct Polar { double range; double angle; };
struct Cartesian { double x; double y; };

Cartesian to_cartesian(const Polar& p) {
    double c = cos(p.angle);
    double s = sin(p.angle);
    return {p.range * c, p.range * s};
}

Polar to_polar(const Cartesian& c) {
    return {std::sqrt(c.x * c.x + c.y * c.y), std::atan2(c.y, c.x)};
}