Задача: Необходимо проверить граничит ли поселение с выбранным поселением. Если нет, выдать ошибку. Иначе просто либо объединяем или передаем.
Алгоритм: Короче берутся стороны одного многоугольника и проверяют на пересечение отрезков стороны другого многоугольника. Должно выдать число точек пересечения больше 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.00 по обе стороны. И теперь работает норм. Но сами точки пересечения определяются норм отрезками, в то время как в условии пересечения отрезки удлинены +1/-1. Чтобы в условие попало, иначе просто не проходит пересечение отрезок, хер знает почему.
Вторая проблема, теперь у меня больше точек пересечения, чем должно быть. В одной точке находит несколько точек пересечения. Например, вместо двух находит 4:
x1 = 1281 y1= -64 этот явно лишний
x2 = 1280 y2= -64
x3 = 1280 y3= 64
x4 = 1281 y4 = 64 лишний
Они все лежат в одной точке, но погрешность координаты плюс/минус 1. Так определили формулы пересечения с погрешностями
Эх. удлинил отрезок +1 в стороны, но все равно не проходит иногда. Наверное надо еще больше растянуть.
Все проблема решена. Оказывается дело в формуле определения пересечения отрезков. Как-то шалит она, случайно другую использовал. Оказывается надо заменить в условиях "меньше или равно" на "меньше" и "больше или равно" на "больше". И отрезки удлинить на 1 в каждую сторону, иначе это условие не прокатит. Вроде норм, но надо потестить.
все чекнул. норм.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован MpW
Условие пересечения отрезков работает иногда не стабильно. Поэтому я в условии записываю отрезок, который будет удлинен на 1.00 по обе стороны. И теперь работает норм. Но сами точки пересечения определяются норм отрезками, в то время как в условии пересечения отрезки удлинены +1/-1. Чтобы в условие попало, иначе просто не проходит пересечение отрезок, хер знает почему.
Вторая проблема, теперь у меня больше точек пересечения, чем должно быть. В одной точке находит несколько точек пересечения. Например, вместо двух находит 4:
x1 = 1281 y1= -64 этот явно лишний
x2 = 1280 y2= -64
x3 = 1280 y3= 64
x4 = 1281 y4 = 64 лишний
Они все лежат в одной точке, но погрешность координаты плюс/минус 1. Так определили формулы пересечения с погрешностями