Это старый, возможно, заброшенный вопрос, но он заставил меня задуматься над этим. Вы не ищете выпуклый корпус, вы хотите сохранить форму многоугольников, но просто избавляетесь от точек, которые лежат между «ребрами» вдоль линии.
Решение может состоять в том, чтобы пройти через соседние точки и вычислить линейный наклон первого и второго, затем сохранить это значение наклона, рассчитать наклон второго и третьего, если наклон pt1-pt2 равен наклону pt2-pt3, тогда pt2 является избыточным в формировании линии и, таким образом, может быть удален. Продолжайте петлю до тех пор, пока не вернетесь к pt1.
Это обеспечит сохранение вашей вогнутой формы, но лишние лишние точки будут удалены.