Как вычислить направление в котором игрок поставил блок

Версия Minecraft
1.7.10
Нужно вычислить направление(СЕВЕР, ЮГ, ЗАПАД, ВОСТОК в плоскости XZ) в котором был поставлен блок относительно игрока
имея координаты игрока и блока.
 

Вложения

  • Screenshot_30.png
    Screenshot_30.png
    9.3 KB · Просмотры: 18
Решение
Можно измерить абсолютный угол между игроком и блоком, и через него уже сторону света. Если вкратце, то считаешь угол через Math#atan2, туда нужно тоже передавать дельты координат(x= blockX - playerX, y = blockZ - playerZ). И переводишь радианы в градусы. далее считаешь уже, если угол в пределах 0-90 градусов, то одна сторона, если в пределах 90-180 то другая, и т.д.
Можно измерить абсолютный угол между игроком и блоком, и через него уже сторону света. Если вкратце, то считаешь угол через Math#atan2, туда нужно тоже передавать дельты координат(x= blockX - playerX, y = blockZ - playerZ). И переводишь радианы в градусы. далее считаешь уже, если угол в пределах 0-90 градусов, то одна сторона, если в пределах 90-180 то другая, и т.д.
 
Можно измерить абсолютный угол между игроком и блоком, и через него уже сторону света. Если вкратце, то считаешь угол через Math#atan2, туда нужно тоже передавать дельты координат(x= blockX - playerX, y = blockZ - playerZ). И переводишь радианы в градусы. далее считаешь уже, если угол в пределах 0-90 градусов, то одна сторона, если в пределах 90-180 то другая, и т.д.
Я так понимаю этот код делает то, что мне нужно
Java:
    public enum Side {EAST, SOUTH, WEST, NORTH};
    public static Side get2dOrientation(double x1, double z1, double x2, double z2) {
        double dx = x1 - x2;
        double dz = z1 - z2;
        double angle = Math.atan2(dz, dx) / Math.PI * 180 + 180;

        if (angle < 45 || angle > 315) {
            return Side.EAST;
        } else if (angle < 135) {
            return Side.SOUTH;
        } else if (angle < 225) {
            return Side.WEST;
        } else {
            return Side.NORTH;
        }
    }
 
269
8
19
Если ты так делаешь то градусы наверное было лучше указsывать типа что допустим
if angel > 0 && angel <90)
и потом следующию
if angel >90 && angel <180
if angel >180 && angel <270
if angel >270 && angel <360



Я так понимаю этот код делает то, что мне нужно
Java:
    public enum Side {EAST, SOUTH, WEST, NORTH};
    public static Side get2dOrientation(double x1, double z1, double x2, double z2) {
        double dx = x1 - x2;
        double dz = z1 - z2;
        double angle = Math.atan2(dz, dx) / Math.PI * 180 + 180;

        if (angle < 45 || angle > 315) {
            return Side.EAST;
        } else if (angle < 135) {
            return Side.SOUTH;
        } else if (angle < 225) {
            return Side.WEST;
        } else {
            return Side.NORTH;
        }
    }
 
Сверху