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