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

VulGAR Power

Новичок
Пользователь
Баллы
11
JP-8gQkDPqU.jpg


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

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

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

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

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

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

IUYs2_LIt0g.jpg


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

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

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

IUYs2_LIt0g.jpg


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

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

Других вариантов особо нет - в WG нет функции "присоединения" области
 
Последнее редактирование:
Ну, это уже алгоритмическая задачка, а не вопрос по WorldGuard. Если хорошенько подумать - можно реализовать алгоритм вычленения общего периметра исходя из двух других. Он несложный - достаточно в двух массивах координат найти две подряд точки с одинаковыми координатами.
Не исключаю также, что алгоритм решения такой задачи уже есть в интернете.
Не помню правда, как полигоны работают с высотой (Y), но уверен, что это тоже решаемо.

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

Других вариантов особо нет - в WG нет функции "присоединения" области
Понял, спасибо за ответ)
 
Сел за этот алгоритм, понял, что если подряд совпадает 2 точки, то нужно убрать эти две точки из зеленой территории и вставить оставшиеся между этими точками. Но это не всегда работает. Такой алгоритм зависит от того, в какую сторону идут точки.

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

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

Других вариантов особо нет - в WG нет функции "присоединения" области
Слушай, а случаем нельзя никак проверять какая точка ближайшая? Потому что это было бы решением.
 
Слушай, а случаем нельзя никак проверять какая точка ближайшая? Потому что это было бы решением.
Найти расстояние между двумя точками и из этих найти найменьшее. Это еще в школе решали такие задачи.
 
Последнее редактирование:
Не вижу ничего странного. Если для вас незнание - странность, то стало быть мы все странные.
Спасибо за ответ)
 
Предлагаю заодно ознакомиться с методом distanceSquired. Конкретно в данной задаче он вряд ли нужен, но в будущем наверняка пригодится - так сказать "для общего развития". Данный метод не извлекает квадратный корень из дистанции, благодаря чему даёт сильный профит в скорости выполнения при большом кол-ве вычислений. Отлично подходит, например, для сравнения двух расстояний (больше/меньше).

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

Если представить шестиугольники на координатной плоскости, то получится, что некоторые регионы идут по часовой стрелке, а другие против. От этого тоже зависит то, куда и какие точки вписывать. Возможно, было бы не так трудно, если бы я знал как определить по часовой или против часовой идет регион или область, но это по-моему уже какой-то бред и есть способ легче, но я до него еще не дошел.
Посиди ещё немного над кодом. Я думаю, со временем ты сам найдешь решение.
Это будет гораздо полезней для повышения навыков программиста, чем если я предложу тебе своё решение
 
Предлагаю заодно ознакомиться с методом distanceSquired. Конкретно в данной задаче он вряд ли нужен, но в будущем наверняка пригодится - так сказать "для общего развития". Данный метод не извлекает квадратный корень из дистанции, благодаря чему даёт сильный профит в скорости выполнения при большом кол-ве вычислений. Отлично подходит, например, для сравнения двух расстояний (больше/меньше).


Посиди ещё немного над кодом. Я думаю, со временем ты сам найдешь решение.
Это будет гораздо полезней для повышения навыков программиста, чем если я предложу тебе своё решение
Посмотрю обязательно. Спасибо, что с такой внимательностью)
 
Если для вас незнание - странность, то стало быть мы все странные.
Странно то, что многие ленятся искать любую информацию в интернете.

В данном случае это школьная формула.
upload_2022-2-28_20-15-14.png
 
Странно то, что многие ленятся искать любую информацию в интернете.

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