c++ - Eigen C++:将 2D 极坐标转换为笛卡尔坐标的最佳方法
问题描述
我目前正在做:
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
just (例如将多个角度加在一起而不处理 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)};
}
推荐阅读
- powershell - 从与 powershell 脚本相同的目录安装 .MSI 文件,而不设置静态文件路径
- javac - Javac 找不到源代码 - windows
- windows - 为什么说 Windows NT 内核是混合模型?
- powerbuilder - 哪个更快 - Powerbuilder 中的数据存储或结构?
- java - 具有课程对象和先决条件的Java递归
- python - Flask/HTML 问题:来自 html 中输入文本框的请求在哪里到达 Flask 中的 app.route?
- python - Python:使用导入的表(.txt 文件)并编辑要省略的某些值
- python - 熊猫:计算日期时间戳之间的先前记录之间的运行差异
- ios - 将自定义单元格插入 TableView
- jquery - StickyBits 不粘