0

Это мой код для преобразованияСферическая преобразование координат дает неправильный полярный угол

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

может кто-нибудь сказать мне, что случилось?

ответ

0

atan() не может вернуть правильный квадрат для угла. Вы передаете его yDif/xDif, который -300/-300, или 1, так что это даст такое же значение, как это было бы для 300/300

Большинство языков имеют функцию atan2(yDif, xDif) которая даст правильное значение. В нем также будет рассмотрен случай, когда xDif равен 0.

+0

Большое вам спасибо! Я этого не заметил! – Stan