Проблемы выполнения операций объединения на многоугольниках с общими ребрами в геометрии наддува

Я пытаюсь использовать геометрию наддува, чтобы построить постоянный путь транспортного средства с расчетами самопересечений. Столкнулся с проблемами с результатом булевых операций над полигонами (точнее, мультиполигоном).

Вот мой путь mpolygon на каком-то шаге:
введите описание изображения здесь

На каждом шаге я использую две точки x, y (с плавающей точкой) — слева и справа смещенные на половину постоянной ширины от текущего местоположения автомобиля. Назовем x-y линию отрезком.

Когда местоположение транспортного средства обновляется, я создаю добавленный mpolygon, используя старые точки x, y и новые, (исправьте это действительно) и union_ it с путем mpolygon (таким образом, путь mpolygon становится длиннее).

Иногда (особенно для достаточно больших значений ширины) может происходить пересечение нового сегмента с предыдущим. В этом случае я создаю добавленный mpolygon как два многоугольника, используя вычисленную точку пересечения с bg :: пересечение двух отрезков: oldx-oldy line и x-y line.
введите описание изображения здесь
И когда я объединяю его с путём mpolygon, появляются первые признаки проблемы:
введите описание изображения здесь
Результатом являются два полигона в mpolygon, а не тот, который я ожидал. Появляется не всегда, но довольно часто.

Следующий шаг и снова пересечение нового сегмента с предыдущим и снова построение двух полигонов в добавленном mpolygon
введите описание изображения здесь

Результат объединения — один полигон в mpolygon:
введите описание изображения здесь

И последний шаг
введите описание изображения здесь

Эти почти нулевые области могут появиться как «часть» внешнего кольца одного многоугольника или как отдельные многоугольники в mpolygon внутри другого самого большого (правило модели торможения mpolygon).

Я предполагаю, что это в конце начало, вызывая наложение недопустимых исключений ввода (которые я получаю) при выполнении пересечения или union_ с таким mpolygon на следующих шагах.

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

Кто-нибудь сталкивался с такими проблемами? Есть ли какое-либо решение таких проблем? Может быть, в других библиотеках геометрии?

Извините за длинное описание.
Заранее большое спасибо за помощь.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]