Не всегда работает проверка точек пересечения
Задача: Необходимо проверить граничит ли поселение с выбранным поселением. Если нет, выдать ошибку. Иначе просто либо объединяем или передаем.
Алгоритм: Короче берутся стороны одного многоугольника и проверяют на пересечение отрезков стороны другого многоугольника. Должно выдать число точек пересечения больше 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 в каждую сторону, иначе это условие не прокатит. Вроде норм, но надо потестить.

все чекнул. норм.


Просмотров: 40

XGM Bot #1 - 4 дня назад 0
Голосов: +0 / -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".

МрачныйВорон #2 - 4 дня назад (изм. ) 0
Голосов: +0 / -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 в каждую сторону, иначе это условие не прокатит. Вроде норм, но надо потестить.

все чекнул. норм.