球面坐标转换会产生错误的极角

时间:2017-02-23 10:08:06

标签: coordinates coordinate-systems coordinate-transformation polar-coordinates spherical-coordinate

这是我的转换代码

double xDif = point.getX() - origin.getX();
double yDif = point.getY() - origin.getY();
double zDif = point.getZ() - origin.getZ();
double radius = Math.sqrt((xDif * xDif) + (yDif * yDif) + (zDif * zDif));
double azimuthalAng = Math.acos(zDif / radius);
double polarAng = Math.atan(yDif / xDif);
return new SpherePoint(radius, azimuthalAng, polarAng);

origin = 400,400,400

点= 100,100,100

所以,矢量= -300,-300,-300

Math.toDegrees();

我的转化算法给出了与本网站http://keisan.casio.com/exec/system/1359533867

相同的方位角和半径

但网站给了我一个-135的极角,而我的算法给了45

谁能告诉我什么是错的?

1 个答案:

答案 0 :(得分:0)

atan()无法返回角度的正确象限。您传递的是yDif / xDif,即-300 / -300或1,因此它将提供与300/300相同的值。

大多数语言都有一个函数atan2(yDif, xDif),它会给出正确的值。它还将处理xDif为0的情况。