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



这是我的转换代码

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

point = 100、100、100

so,vector = -300,-300,-300

math.todegrees();

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

相同的具有相同角度和半径

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

谁能告诉我怎么了?

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

大多数语言都具有atan2(yDif, xDif)的函数,该功能将提供正确的值。它还将处理xDif为0的情况。

最新更新