Я бы подошел к этой проблеме, используя уменьшение точки DP.Существует несколько разновидностей этой процедуры, и самый распространенный не самый лучший для того, что вы пытаетесь сделать, но в итоге этот подход приведет к наилучшему качеству.
Классическая операция DP требует массиваиз точек, которые образуют ломаную линию и удаляют любые точки, которые не повредят форму за пределами определенного фактора.Этот фактор является единицей измерения, основанной на ваших данных, поэтому в вашем случае он, вероятно, будет в пикселях.Как вы можете себе представить, выбор фактора является наиболее сложной частью использования DP, если только вы не хотите просто удалять точки из многоугольника, которые вы можете легко измерить, не важны.времени, вы хотите удалить точку, которая меньше всего влияет на форму многоугольника.Вы должны быть в состоянии взять типичные рекурсивные примеры DP и заставить его сломаться после первой итерации по точкам, чтобы он удалял одну точку за раз.Затем вы оцените свою форму, чтобы увидеть, соответствует ли она вашим требованиям.Если результат не является идеальным, вы убираете еще одно очко и переоцениваете его до тех пор, пока у вас не останется три очка.Если нет идеального результата, вы можете принять форму с лучшим результатом и, возможно, использовать второй алгоритм, который заставляет его соответствовать требованиям.
http://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm