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

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

Вложения

tox1cozZ

aka Agravaine
Модератор
Сообщения
6,818
Лучшие ответы
412
Реакции
1,901
int direction = MathHelper.floor_double((player.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;
 
Сообщения
1,864
Лучшие ответы
50
Реакции
345
Можно измерить абсолютный угол между игроком и блоком, и через него уже сторону света. Если вкратце, то считаешь угол через Math#atan2, туда нужно тоже передавать дельты координат(x= blockX - playerX, y = blockZ - playerZ). И переводишь радианы в градусы. далее считаешь уже, если угол в пределах 0-90 градусов, то одна сторона, если в пределах 90-180 то другая, и т.д.
 
Сообщения
1,864
Лучшие ответы
50
Реакции
345
Да ну, рассчитай мне направление взгляда, имя только координаты игрока
 
Сообщения
19
Лучшие ответы
0
Реакции
0
Можно измерить абсолютный угол между игроком и блоком, и через него уже сторону света. Если вкратце, то считаешь угол через 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;
        }
    }
 
Сообщения
1,864
Лучшие ответы
50
Реакции
345
Да, ты правда как-то странно сторону определяешь.
 
Сообщения
237
Лучшие ответы
6
Реакции
12
Если ты так делаешь то градусы наверное было лучше указ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;
        }
    }
 
Сверху