Я хотел бы преобразовать одну букву в вогнутый многоугольник, на котором я позже смогу запустить алгоритм триангуляции, чтобы представить его в виде кратных выпуклых многоугольников. Однако я просто понятия не имею, как мне достичь своей цели.
Это мой нынешний подход к решению проблемы:
- Найти контрольные точки (векторы) внешнего контур

Создайте путь, соединив эти внешние контрольные точки друг с другом и сформировав из него вогнутый многоугольник

Запустите на нем алгоритм триангуляции, чтобы разбить вогнутый многоугольник на множество меньших выпуклых многоугольников (треугольников)

Точки, возвращаемые приведенный ниже фрагмент кода фактически является контрольными точками, необходимыми для алгоритма интерполяции bezier для рисования буквы. Таким образом, они не представляют векторы и в основном находятся за пределами формы (из-за характера алгоритма).
face = Face("C:\\Windows\\Fonts\\Arial.ttf")
face.set_char_size( 48*64 )
face.load_char('A')
slot = face.glyph
outline = slot.outline
points = numpy.array(outline.points, dtype=[('x',float), ('y',float)])
x, y = points['x'], points['y']
Приведенный выше фрагмент взят из примера freetypes glyph-vector.py
.
Итак, первое, с чем я борюсь, это получение набора точек / векторов, которые представляют внешний контур буквы. Как я могу создать / прочитать их с помощью freetype?
Обратите внимание: мне не нужно использовать freetype, поэтому любая другая возможность / библиотека (C ++, python) также подойдет. Любая помощь в этом очень ценится!