Задача: Необходимо проверить граничит ли поселение с выбранным поселением. Если нет, выдать ошибку. Иначе просто либо объединяем или передаем.
Алгоритм: Короче берутся стороны одного многоугольника и проверяют на пересечение отрезков стороны другого многоугольника. Должно выдать число точек пересечения больше 1.
Если точка пересечения 1, значит, касается уголком. Это не сможет объединиться два поселения.
Проблема: я реализовал систему большую. И вроде работает хорошо, доволен. Однако, иногда почему то не все точки пересечения выявляет. Бывает вообще не видит что поселения граничат. См. абилку присоединение.
Я думаю либо это математические погрешности, в чем я сомневаюсь. Либо это вариковская jass проблема с точностью плавающих чисел. Не знаю.
Кому будет не понятно. вот ссылка все разжевано
Требуется помощь мозговитых

Принятый ответ

Короче нашел причину, но не уверен. Пошел на маленькую хитрость.
Условие пересечения отрезков работает иногда не стабильно. Поэтому я в условии записываю отрезок, который будет удлинен на 1.00 по обе стороны. И теперь работает норм. Но сами точки пересечения определяются норм отрезками, в то время как в условии пересечения отрезки удлинены +1/-1. Чтобы в условие попало, иначе просто не проходит пересечение отрезок, хер знает почему.
Вторая проблема, теперь у меня больше точек пересечения, чем должно быть. В одной точке находит несколько точек пересечения. Например, вместо двух находит 4:
x1 = 1281 y1= -64 этот явно лишний
x2 = 1280 y2= -64
x3 = 1280 y3= 64
x4 = 1281 y4 = 64 лишний
Они все лежат в одной точке, но погрешность координаты плюс/минус 1. Так определили формулы пересечения с погрешностями
Эх. удлинил отрезок +1 в стороны, но все равно не проходит иногда. Наверное надо еще больше растянуть.

Все проблема решена. Оказывается дело в формуле определения пересечения отрезков. Как-то шалит она, случайно другую использовал. Оказывается надо заменить в условиях "меньше или равно" на "меньше" и "больше или равно" на "больше". И отрезки удлинить на 1 в каждую сторону, иначе это условие не прокатит. Вроде норм, но надо потестить.

все чекнул. норм.
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
19
4 года назад
0
Похожие вопросы:

ответ
Вот это чо за рак мозга? Какие еще локалки в фильтре с ифами? Ну с таким не удивительно что не работает.
Да всё работает, вообще-то
quq_CCCP:
Примерно так слабо?
И в чём смысл делать глобалку, а не просто писать тогда уж сразу GetFilterUnit( )
Я сдеал локалку, чтобы вместо GetFilterUnit( ) писать то, что мне нужно, в данном случае CLONE
quq_CCCP:
Потом клонов от способностей ищут не так,
Да так и я их могу найти
Точнее не совсем так, я их искал через Юнит входит в Область ( Игровая зона )
Но искать их в другом триггере и сдругим событием мне нафиг не нужно.
Мне нужно найти иллюзии сразу в триггере со способностью, чтобы потом не было геморроя
========================
И ещё раз повторюсь, что при повторном использовании способности, 2 прошлые иллюзии (да и вообще в принципе если рядом с гером будут другое любое ко-во иллюзий) перемещаются к противнику. Но две новосозданные остаются на месте.
Так же повторюсь, что когда проверка была IsUnitIllusion == false, то иллюзии определяло как не иллюзии!
Все кто пытались помочь, похоже проигнорировали это замечание...
========================
Мой вывод таков: Иллюзиям, призванным через стандартную Способность (Предмет: Иллюзии) присваивается статус иллюзий слегка позже, чем происходит проверка.
С другой стороны, скорее всего это может и можно как-то обойти, ведь есть карты примеры, где подобное работает нужным образом.
О том, как устроены чёртовы способности близов стоит только догадываться =\
К счастью Способность (Предмет: Иллюзии) не наносит 0.00 урона, и за это близам огромное спасибо (что у меня в очередной раз не бомбануло)
А вообще, проще по-моему сделать свою игру, чем нормальную карту в варкрафте -_-
ответ
Лол. Вопрос можно закрывать. В событии "юнит умирает" я очень редко проверял тип юнита на дамми(а их у меня много). Спасибо отладка, тебя создал господь.
ответ
"Black Soul"
Открыть редактор реестра (Windows + R, ввести regedit).
Перейти по пути HKEY_CURRENT_USER\SOFTWARE\Blizzard Entertainment\WorldEdit.
Найти строку Tool Windows и удалить ее.
Но проблема повторится, если зайти в редактор 1.32. При ее возникновении нужно заново удалить строку "Tool Windows".

0
27
4 года назад
Отредактирован MpW
0
Короче нашел причину, но не уверен. Пошел на маленькую хитрость.
Условие пересечения отрезков работает иногда не стабильно. Поэтому я в условии записываю отрезок, который будет удлинен на 1.00 по обе стороны. И теперь работает норм. Но сами точки пересечения определяются норм отрезками, в то время как в условии пересечения отрезки удлинены +1/-1. Чтобы в условие попало, иначе просто не проходит пересечение отрезок, хер знает почему.
Вторая проблема, теперь у меня больше точек пересечения, чем должно быть. В одной точке находит несколько точек пересечения. Например, вместо двух находит 4:
x1 = 1281 y1= -64 этот явно лишний
x2 = 1280 y2= -64
x3 = 1280 y3= 64
x4 = 1281 y4 = 64 лишний
Они все лежат в одной точке, но погрешность координаты плюс/минус 1. Так определили формулы пересечения с погрешностями
Эх. удлинил отрезок +1 в стороны, но все равно не проходит иногда. Наверное надо еще больше растянуть.

Все проблема решена. Оказывается дело в формуле определения пересечения отрезков. Как-то шалит она, случайно другую использовал. Оказывается надо заменить в условиях "меньше или равно" на "меньше" и "больше или равно" на "больше". И отрезки удлинить на 1 в каждую сторону, иначе это условие не прокатит. Вроде норм, но надо потестить.

все чекнул. норм.
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.