C++ 将角度转换为坐标

C++ Convert angles to coordinates

本文关键字:坐标 转换 C++      更新时间:2023-10-16

我目前正在尝试使用Mathworks的Matlab公式将2个角度转换为x,y,z,Sph2Cart。

http://www.mathworks.com/help/techdoc/ref/sph2cart.html

算法:

x = r .* cos(elevation) .* cos(azimuth)
y = r .* cos(elevation) .* sin(azimuth)
z = r .* sin(elevation)

在C++

clax = 1 * cos((Altitude/360)*(2*XM_PI)) * cos((Azimuth/360)*(2*XM_PI));
clay = 1 * sin((Altitude/360)*(2*XM_PI));
claz = 1 * cos((Altitude/360)*(2*XM_PI)) * sin((Azimuth/360)*(2*XM_PI));

但无论高度和方位角是多少,克拉克斯、粘土和克拉兹要么是 0 要么是 1。

确信我犯了一个错误,之后我会笑我是多么愚蠢。但真的,我不知道为什么这不起作用,为什么这些值只为每个值给出 1 或 0......

您很可能将

clax声明为某种整数类型(例如 intlong , ...否则,AltitudeAzimuth可能会声明为整数类型。在这种情况下,您总是会在三角函数的参数中得到2*pi的倍数。

不确定这是否有帮助,但对我有用....

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
    double XM_PI = 3.14159;
    double Altitude = 32;
    double Azimuth = 24;
    double clax = 1 * cos((Altitude/360)*(2*XM_PI)) * cos((Azimuth/360)*(2*XM_PI));
    double clay = 1 * sin((Altitude/360)*(2*XM_PI));
    double claz = 1 * cos((Altitude/360)*(2*XM_PI)) * sin((Azimuth/360)*(2*XM_PI));
    std::cout << "clax=" << clax << endl;
    std::cout << "clay=" << clay << endl;
    std::cout << "claz=" << claz << endl;
}

答:

clax=0.774731
clay=0.529919
claz=0.344932

正如其他人所说,确保所有变量都是浮点/双精度的。还要检查什么是XM_PI。如果它以某种方式为 0,这将解释您的结果。

问题很可能是Altitude/360Azimuth/360的除法,当AltitudeAzimuth是整数时。这将执行整数除法,您将丢失分数。作为说明性示例,请尝试此代码

#include <iostream>
#include <cmath>
int main()
{
    int angle = 90;
    std::cout << std::sin((angle/360)*(2*M_PI)) << std::endl;
    std::cout << std::sin((angle/360.0)*(2*M_PI)) << std::endl;
    std::cout << std::sin((angle/360.0)*(2.0*M_PI)) << std::endl;
    return 0;
}

哪些输出

0
1
1

请注意,第一个零显然不正确。

要修复代码,只需将整数常量从 360 更改为双精度常量 360.0