Ответ 1
Я не знаю, даст ли это оптимальный ответ, но он хотя бы даст ответ:
- Вычислить триангуляцию Delaunay для данного многоугольника. Существуют стандартные алгоритмы, которые будут выполняться очень быстро для 100 вершин или меньше (см., Например, эту библиотеку здесь.) Использование Delaunay триангуляция должна гарантировать, что у вас не слишком много длинных тонких треугольников.
- Разделите любые неправильные треугольники на два прямоугольных треугольника, отбросив высоту от самого большого угла к противоположной стороне.
- Поиск треугольников, которые вы можете объединить в прямоугольники: любые два конгруэнтных прямоугольных треугольника (а не зеркальные изображения), которые разделяют гипотенузу. Я подозреваю, что в общем случае их не будет слишком много, если только у вашего неправильного многоугольника не будет много прямых углов.
Я понимаю, что много деталей, чтобы заполнить, но я думаю, что начать с триангуляции Делоне, вероятно, путь. Триангуляции Делоне в плоскости могут быть рассчитаны эффективно и обычно выглядят вполне "естественными".
ИЗМЕНИТЬ ДОБАВИТЬ: поскольку мы находимся в специальном эвристике, в дополнение к жадным алгоритмам, обсуждаемым в других ответах, вы также должны рассмотреть какую-то стратегию разделения и завоевания. Если форма не является выпуклой, как ваш пример, разделите ее на выпуклые фигуры, многократно вырезая из вершинной верхушки в другую вершину таким образом, чтобы она приблизилась к делению пополам угла рефлекса. Как только вы разделили фигуру на выпуклые кусочки, я бы подумал о том, чтобы разделить выпуклые кусочки на куски с красивыми "основаниями", куски с по крайней мере одной стороной, имеющей два острых или прямых угла на ее концах. Если у какой-либо части нет такой "базы", вы должны разделить ее пополам по диаметру части и получить две новые части, каждая из которых имеет "базу" (я думаю). Это должно свести проблему к решению выпуклых многоугольников, которые являются своеобразными трапециевидными, а оттуда жадный алгоритм должен преуспеть. Я думаю, что этот алгоритм будет отделять оригинальную форму довольно естественным образом, пока вы не дойдете до своего рода трапециевидных фрагментов.