Поговорим про тригонометрию

Версия Minecraft
1.12.2

ReyMagos

Тег-бомбастер
412
7
121
Есть предмет который при нажатии правой кнопкой что-то делает через два блока перед взглядом игрока (допустим спавнит партиклы). Составил такую схему:
фото (1).JPG
Тут я делю весь обзор на 4 части и в каждой высчитываю угол от ближайшей абциссы. float yaw = entityLiving.rotationYaw > 0 ? abs(entityLiving.rotationYaw) % 360.0F : 360 - abs(entityLiving.rotationYaw) % 360.0F; и во всех случаях возвращает нормальный угол поворота. Соответственно для каждой части я знаю гипотенузу (2 блока) и угол альфа (равен yaw - 90 * номер части, чтобы построить прямоугольный треугольник) и с помощью sin и cos высчитываю катеты (x и z). Также я ставлю знак '-' если направление с отрицательным значением абциссы. Получился примерно такой код:
Java:
        double axisX = 0;
        double axisZ = 0;
        float yaw = entityLiving.rotationYaw > 0 ? abs(entityLiving.rotationYaw) % 360.0F : 360 - abs(entityLiving.rotationYaw) % 360.0F;
        if (yaw < 90 && yaw >= 0) {
            axisX = 2 * -MathHelper.sin(yaw);
            axisZ = 2 * MathHelper.cos(yaw);
        }
        if (yaw < 180 && yaw >= 90) {
            axisX = 2 * -MathHelper.cos(yaw - 90);
            axisZ = 2 * -MathHelper.sin(yaw - 90);
        }
        if (yaw < 270 && yaw >= 180) {
            axisX = 2 * MathHelper.sin(yaw - 180);
            axisZ = 2 * -MathHelper.cos(yaw - 180);
        }
        if (yaw < 360 && yaw >= 270) {
            axisX = 2 * MathHelper.cos(yaw - 270);
            axisZ = 2 * MathHelper.sin(yaw - 270);
        }
        worldIn.spawnParticle(EnumParticleTypes.FLAME, entityLiving.posX + axisX, entityLiving.posY + entityLiving.height, entityLiving.posZ + axisZ, 0.0D, 0.0D, 0.0D);
Но происходит всякая фигня (партиклы появляются где попало). Я натыкал sendMessage, посмотрел резы. Сравнил с калькулятором. Не сошлось. Посмотрел, как это реализуется в EntityThrowable. Поменял везде Math.sin(), Math.cos() на MathHelper.sin(), MathHelper.cos(). Не помогло. И вот сижу думаю в чём проблема. Кто может помочь?
 
Последнее редактирование:

ReyMagos

Тег-бомбастер
412
7
121
Я делаю примерно то же самое, что и в EntityThtowable.
Java:
        float f = -MathHelper.sin(rotationYawIn * 0.017453292F) * MathHelper.cos(rotationPitchIn * 0.017453292F);
        float f1 = -MathHelper.sin((rotationPitchIn + pitchOffset) * 0.017453292F);
        float f2 = MathHelper.cos(rotationYawIn * 0.017453292F) * MathHelper.cos(rotationPitchIn * 0.017453292F);
 
Сверху