球坐标转换给出错误的极角

Spherical coordinate conversion gives wrong polar angle

这是我的转换代码

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);

原点 = 400, 400, 400

点 = 100, 100, 100

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

Math.toDegrees();

我的转换算法给出了与本网站相同的方位角和半径http://keisan.casio.com/exec/system/1359533867

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

谁能告诉我怎么了?

atan() 无法 return 角度的正确象限。您正在传递它 yDif / xDif,即 -300 / -300 或 1,因此它将给出与 300 / 300 相同的值。

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