Помогите Как рассчитать шар?

Статус
Закрыто для дальнейших ответов.

Bezobrazie

Активный участник
Пользователь
Баллы
46
Имя в Minecraft
MySoulIsCry
Мне нужно рассчитать шар по кордам имея радиус, пытался подсмотреть в
WorldEdit, но не могу там разобраться и вообще не могу найти там класс который отвечает за расчет шара. И мб есть какая-то библиотека которая рассчитывает шар и выдает корды. Мне это нужно чтобы спавнить партиклы которые должны образовать шар.
 
Вот смотрю на код и разобраться не могу, читал тот топик уже 4 раза и не могу найти как изменить радиус.
как работает сам код я отдаленно понимаю. с математикой у меня очень плохо. Щас у меня эта тема рисует мне сферу радиусом наверное 1 блок. но мне понятно нужно больше. Укажи мне пожалуйста где я должен это менять, я уже потеребил каждую переменную)


PHP:
        for (double i = 0; i <= Math.PI; i += Math.PI / 50) {
            double radius = Math.sin(i);
            double y = Math.cos(i);
            for (double a = 0; a < Math.PI * 2; a+= Math.PI / 50) {
                double x = Math.cos(a) * radius ;
                double z = Math.sin(a) * radius;
                location.add(x, y, z);
                location.getWorld().playEffect(location, Effect.HAPPY_VILLAGER, 0);
                location.subtract(x, y, z);
            }
        }
 
Вот смотрю на код и разобраться не могу, читал тот топик уже 4 раза и не могу найти как изменить радиус.
как работает сам код я отдаленно понимаю. с математикой у меня очень плохо. Щас у меня эта тема рисует мне сферу радиусом наверное 1 блок. но мне понятно нужно больше. Укажи мне пожалуйста где я должен это менять, я уже потеребил каждую переменную)


PHP:
        for (double i = 0; i <= Math.PI; i += Math.PI / 50) {
            double radius = Math.sin(i);
            double y = Math.cos(i);
            for (double a = 0; a < Math.PI * 2; a+= Math.PI / 50) {
                double x = Math.cos(a) * radius ;
                double z = Math.sin(a) * radius;
                location.add(x, y, z);
                location.getWorld().playEffect(location, Effect.HAPPY_VILLAGER, 0);
                location.subtract(x, y, z);
            }
        }
В своей сути, эти два цикла представляют из себя два круга. Внешний цикл "создает" вертикальный круг, и по нему идет координата Y и переменная radius. Вложенный же - горизонтальный, и соответственно, отвечает за X и Z. Переменная radius отвечает не за радиус всей сферы, а за радиус круга X Z. T.к. цикл вложен, этот круг создается раз за разом с разным радиусом, а т.к. меняется и Y, то и на разной высоте.
Далее значения X Y Z добавляются к твоей центральной локации (location.add(x, y, z)), и чтобы ничего не сбивалось, отнимаются вновь. К слову, этого можно избежать, заменив эти три строки на одну world.spawnParticle(Particle.VILLAGER_HAPPY, loc.getX() + x, loc.getY() + y, loc.getZ() + z, 1) (world следует взять от локации до внешнего цикла).

Переходя к изначальному вопросу - для того, чтобы увеличить радиус, достаточно дополнительно умножить переменные x y z на желаемый радиус перед добавлением их к локации.
 
В своей сути, эти два цикла представляют из себя два круга. Внешний цикл "создает" вертикальный круг, и по нему идет координата Y и переменная radius. Вложенный же - горизонтальный, и соответственно, отвечает за X и Z. Переменная radius отвечает не за радиус всей сферы, а за радиус круга X Z. T.к. цикл вложен, этот круг создается раз за разом с разным радиусом, а т.к. меняется и Y, то и на разной высоте.
Далее значения X Y Z добавляются к твоей центральной локации (location.add(x, y, z)), и чтобы ничего не сбивалось, отнимаются вновь. К слову, этого можно избежать, заменив эти три строки на одну world.spawnParticle(Particle.VILLAGER_HAPPY, loc.getX() + x, loc.getY() + y, loc.getZ() + z, 1) (world следует взять от локации до внешнего цикла).

Переходя к изначальному вопросу - для того, чтобы увеличить радиус, достаточно дополнительно умножить переменные x y z на желаемый радиус перед добавлением их к локации.
Спасибо огромное.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх