C++ 将角度转换为坐标
C++ Convert angles to coordinates
我目前正在尝试使用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
声明为某种整数类型(例如 int
, long
, ...否则,Altitude
或Azimuth
可能会声明为整数类型。在这种情况下,您总是会在三角函数的参数中得到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/360
和Azimuth/360
的除法,当Altitude
和Azimuth
是整数时。这将执行整数除法,您将丢失分数。作为说明性示例,请尝试此代码
#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
。
相关文章:
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 在 OpenGL 中将笛卡尔世界坐标转换为球面局部坐标
- 如何将鼠标坐标转换为"mm"
- 如何将 QTabWidget 坐标转换为其子坐标?
- 将 2D 图像坐标转换为 z = 0 的 3D 世界坐标
- 如何将世界坐标转换为相机图像坐标
- 将鼠标坐标转换为世界空间坐标
- 将画布坐标转换为外部微件的坐标
- 将 2D 屏幕坐标转换为 3D 世界坐标
- 如何将像素坐标转换为世界坐标
- 如何从 GLUT 坐标转换为窗口坐标
- 将点云的坐标转换为点云库中的另一个坐标,从而使地平面成为X-O-Y平面?
- 将 X Y 坐标转换为拉特长等距柱状投影C++
- 将 3D 坐标转换为 3ds 中的 2D 最大值
- 将屏幕鼠标坐标转换为窗口坐标
- Opengl 屏幕到地图坐标转换
- 在 OpenGL 中将 3D 坐标转换为屏幕坐标
- 将双点坐标转换为字符串
- gluUnProject试图将鼠标坐标转换为opengl坐标的奇怪行为
- 从视口坐标转换为[-1,1]^2顶点[ENGGL]