Я пытаюсь использовать геометрию наддува, чтобы построить постоянный путь транспортного средства с расчетами самопересечений. Столкнулся с проблемами с результатом булевых операций над полигонами (точнее, мультиполигоном).
Вот мой путь 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_, но не решает проблему полностью.
Кто-нибудь сталкивался с такими проблемами? Есть ли какое-либо решение таких проблем? Может быть, в других библиотеках геометрии?
Извините за длинное описание.
Заранее большое спасибо за помощь.
Задача ещё не решена.
Других решений пока нет …