1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Как добавить территорию региону

Тема в разделе "Разработка плагинов для новичков", создана пользователем VulGAR Power, 27 фев 2022.

  1. Автор темы
    VulGAR Power

    VulGAR Power Новичок Пользователь

    Баллы:
    11
    [​IMG]

    Набросал тут небольшой рисунок для того, чтобы было понятно что я хочу.
    Делаю плагин, в котором мне нужна функция, которая бы добавляла территорию региону.

    Допустим, есть у нас регион (изображен красным на рисунке) и есть территория, которую я хочу включить в этот регион (зеленый квадрат). Мне нужно, чтобы зеленая территория вошла в красный регион, чтобы все это стало единым регионом.

    Есть ли какой-то метод для такого случая? Или нужно самому писать?

    Сложность еще в том, что мне нужно соединить не кубоиды, а полигональные регионы, представляющие собой шестиугольники.
     
  2. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
  3. Автор темы
    VulGAR Power

    VulGAR Power Новичок Пользователь

    Баллы:
    11
    Про redefine слышал, но это не то, ведь он не добавляет территорию в регион, а меняет территорию региона на выделенную область.

    То есть, чтобы его использовать нужно писать какую-то логику построения регионов из точек. Потому что я не могу просто взять точки одного региона и точки второго региона, после чего соединить, иначе получится непонятно что.

    Это допустимо, если регион - кубоид, но у меня он полигональный шестиугольник.

    [​IMG]

    Опять же - красный шестиугольник это регион. в который я хочу добавить зеленый шестиугольник. Проблема в том, что точки могут быть расположены как угодно, из-за чего я не могу просто написать в ряд точки старого региона и зеленой области. Уже думал над такой логикой, но это очень трудно, из-за чего ищу сейчас какие-нибудь лазейки для более легкой реализации задуманного.
     
  4. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Ну, это уже алгоритмическая задачка, а не вопрос по WorldGuard. Если хорошенько подумать - можно реализовать алгоритм вычленения общего периметра исходя из двух других. Он несложный - достаточно в двух массивах координат найти две подряд точки с одинаковыми координатами.
    Не исключаю также, что алгоритм решения такой задачи уже есть в интернете.
    Не помню правда, как полигоны работают с высотой (Y), но уверен, что это тоже решаемо.

    Альтернативное решение - это создавать отдельный регион и назначать ему те же параметры, что и у исходного региона - флаги, список участников и владельцев и так далее.

    Других вариантов особо нет - в WG нет функции "присоединения" области
     
    Последнее редактирование: 28 фев 2022
  5. Автор темы
    VulGAR Power

    VulGAR Power Новичок Пользователь

    Баллы:
    11
    Понял, спасибо за ответ)
     
  6. Автор темы
    VulGAR Power

    VulGAR Power Новичок Пользователь

    Баллы:
    11
    Сел за этот алгоритм, понял, что если подряд совпадает 2 точки, то нужно убрать эти две точки из зеленой территории и вставить оставшиеся между этими точками. Но это не всегда работает. Такой алгоритм зависит от того, в какую сторону идут точки.

    Если представить шестиугольники на координатной плоскости, то получится, что некоторые регионы идут по часовой стрелке, а другие против. От этого тоже зависит то, куда и какие точки вписывать. Возможно, было бы не так трудно, если бы я знал как определить по часовой или против часовой идет регион или область, но это по-моему уже какой-то бред и есть способ легче, но я до него еще не дошел.
     
  7. Автор темы
    VulGAR Power

    VulGAR Power Новичок Пользователь

    Баллы:
    11
    Слушай, а случаем нельзя никак проверять какая точка ближайшая? Потому что это было бы решением.
     
  8. NuaN

    NuaN Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    NuaN
    Найти расстояние между двумя точками и из этих найти найменьшее. Это еще в школе решали такие задачи.
     
  9. Автор темы
    VulGAR Power

    VulGAR Power Новичок Пользователь

    Баллы:
    11
    А как, собственно, найти расстояние между двумя точками?
     
  10. NuaN

    NuaN Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    NuaN
    Эмм... Странный вопрос))
    1. Найти формулу для этого.
    2. Переписать это в код на Java

    ИЛИ

    1. В ядре есть такая штука:
    Код:
    location1.getDistance(location2)
    Все просто как дважды два :)
     
    Последнее редактирование: 28 фев 2022
  11. Автор темы
    VulGAR Power

    VulGAR Power Новичок Пользователь

    Баллы:
    11
    Не вижу ничего странного. Если для вас незнание - странность, то стало быть мы все странные.
    Спасибо за ответ)
     
  12. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Предлагаю заодно ознакомиться с методом distanceSquired. Конкретно в данной задаче он вряд ли нужен, но в будущем наверняка пригодится - так сказать "для общего развития". Данный метод не извлекает квадратный корень из дистанции, благодаря чему даёт сильный профит в скорости выполнения при большом кол-ве вычислений. Отлично подходит, например, для сравнения двух расстояний (больше/меньше).

    Посиди ещё немного над кодом. Я думаю, со временем ты сам найдешь решение.
    Это будет гораздо полезней для повышения навыков программиста, чем если я предложу тебе своё решение
     
  13. Автор темы
    VulGAR Power

    VulGAR Power Новичок Пользователь

    Баллы:
    11
    Посмотрю обязательно. Спасибо, что с такой внимательностью)
     
  14. NuaN

    NuaN Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    NuaN
    Странно то, что многие ленятся искать любую информацию в интернете.

    В данном случае это школьная формула.
    upload_2022-2-28_20-15-14.png
     
  15. Автор темы
    VulGAR Power

    VulGAR Power Новичок Пользователь

    Баллы:
    11
    Ну, если бы я не спросил, то вы бы мне не сказали куда более удобную функцию, связанную именно с моей темой
     

Поделиться этой страницей