Как найти угол между 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));
→ Ссылка