Вы хотите, чтобы вы заказали результат P1, P2, ... P13?
Если это так, вам нужно найти convex hull пунктов. Прогуливаясь по окружности корпуса, вы дадите вам порядок точек, которые вам нужны.
В практическом смысле взгляните на documentation OpenCV - вызов convexHull
с помощью clockwise=true
дает вам вектор очков в том порядке, в котором вы хотите. Ссылка предназначена для C++, но там есть API C и Python. Другие пакеты, такие как Matlab, должны иметь аналогичную функцию, так как это общая геометрическая проблема для решения.
EDIT
После того, как вы получите ваш выпуклую оболочку, вы можете итеративно свернуть его с внешней стороны, чтобы получить оставшиеся очки. Ваши итерации прекратятся, когда в корпусе больше нет пикселей. Вы должны настроить функцию сворачивания таким образом, что чем ближе точки включены первые, то есть такие, которые вы получите:
и нет:
В обеих диаграммах, зеленый оригинальная выпуклая оболочка, другие цвета - обвалы.
Нет, у меня всего 20 точек, от P1 до P20 и его значений x и y, и это не означает, что от P1 до P20, которые разбросаны по плоскости, я хочу, чтобы эти точки были в порядке от P1 до P20 или от P20 до P1.Спасибо .......... – Pritesh
Так почему же выпуклый корпус ** не **, что вы хотите? – misha
Выпуклый корпус удаляет вогнутые точки. в моем случае (см. изображение) он удалит точки с P2 на P7, что нежелательно. – Pritesh