Как найти угол между 2 точками в 3-х мерном пространстве?
У меня есть 2 точки, камера, и точка полигона. Мне надо найти горизонтальный и вертикальный угол между ними. Надо что бы ответ был в диапазоне от -180 до 180
Точка - это объект класса Point3D (x,y,z)
Я пробовал это:
public static double calculateHorizontalAngle(Point3D camera, Point3D point3D) {
int distX = (int) (camera.x-point3D.x);
int distZ = (int) (camera.z-point3D.z);
double distance = Math.sqrt(distX*distX+distZ*distZ);
double angle = Math.toDegrees(Math.acos(distZ/distance));
if (distX>0) angle=-angle+90;
else if (distX<0) angle-=90;
return angle;
}
Но смог вычислить угол только по горизонтали, а как мне вычислить вертикаль?
Ответы (1 шт):
Автор решения: rotabor
→ Ссылка
Если вы правильно вычислили один угол, то второй будет
int distY = (int) (camera.y-point3D.y);
int distZ = (int) (camera.z-point3D.z);
double distanceY = Math.sqrt(distY*distY+distZ*distZ);
double angleY = Math.toDegrees(Math.acos(distZ/distanceY));