Немного больше информации о желаемом входе и выходе может быть полезным.
Например, если вы просто пытаетесь поместить полигоны в треугольники, вероятно, сработает веер треугольника. Если вы пытаетесь разрезать многоугольник на маленькие кусочки, вы можете создать какие-то марширующие квадраты.
Хорошо, я сделал неверное предположение - я предполагал, что марширующие квадраты будут больше похожи на марширующие кубы. Оказывается, это совсем другое, и совсем не то, что я имел в виду ..: |
В любом случае, чтобы прямо ответить на ваш вопрос, я не знаю ни одной простой библиотеки, которая делает то, что вы ищете. Я согласен с юзабилити CGAL.
Алгоритм, о котором я думал, - это в основном разбиение полигонов линиями, где линии являются сеткой, так что вы в основном получаете четырехугольники. Если бы у вас было пересечение многоугольников, реализация была бы простой. Другим способом решения этой проблемы является обработка 2-го многоугольника как функции и наложение сетки точек. Затем вы просто делаете что-то похожее на марширующие кубы ... если все 4 точки находятся в многоугольнике, сделайте квад, если 3 в треугольнике, 2 в прямоугольнике и т.д. Если вам нужны многоугольники, выглядящие немного неравномерно, вы можете рандомизировать расположение точек сетки.
С другой стороны, вы могли бы сделать подразделение в стиле кошачьего кларка, но пропустить сглаживание. Алгоритм в основном заключается в добавлении точки в центр тяжести и в середину каждого ребра. Затем для каждого угла исходного многоугольника вы создаете новый меньший многоугольник, который соединяет среднюю точку ребра, предшествующую углу, углу, средней точке следующего ребра и центроиду. Это мозаичное пространство, и у него будут углы, похожие на ваш входной многоугольник.
Итак, множество вариантов, и мне нравятся мозговые штурмы, но я до сих пор не знаю, для чего вы планируете использовать это. Это для создания разрушаемых сеток? Вы делаете какую-то обработку сетки, которая требует меньших элементов? Пытаетесь избежать артефактов затенения Гуро? Это что-то, что работает как предварительный процесс или в реальном времени? Насколько важна точность? Чем больше информации, тем лучше предложения.