Выпуклая декомпозиция сложного многоугольника?
Как с моей 2D-физической системой (box2D), так и с OpenGL, сложные полигоны должны быть разложены на выпуклые многоугольники. Обеспечение соответствия моделей этому легко. Тем не менее, я также хотел бы отредактировать полигоны по мере продвижения моделирования, поэтому мне нужен динамический способ разлома существующих полигонов на большее количество полигонов, которые все еще выпуклые.
Я надеюсь, что этот рисунок поможет описать, что я хочу:
![image aid]()
Мой вопрос: существует ли существующая библиотека, которая может это сделать? И если нет, то какова была бы наименее подверженная ошибкам способ сделать это сама?
(Я просматривал Boost, у которого есть как геометрия, так и модуль Polygon, но документация для меня слишком эзотерична, чтобы узнать, может ли я делать то, что я хочу.)
Ответы
Ответ 1
Я думаю, этот - это то, что вы ищете.
Что касается нахождения пересечения, то это всего лишь небольшая алгебра; для любых двух сегментов линии легко выводить соответствующие строки ( "рост над пробегом" и т.д.),
y = a1 * x + b1
y = a2 * x + b2
то точка пересечения (x ', y') равна
x '= (b2 - b1)/(a1 - a2)
y '= a1 * x' + b1
Теперь, конечно, что точка пересечения линий, чтобы определить, что сегменты линии действительно пересекаются, вам нужно будет провести простую проверку диапазона с координатами x, y.