Вы можете отсортировать точки по их x координатам по возрастанию, а при наличии связи - по y координате по возрастанию.
Первые две точки - это «левая» сторона: одна с большим y - «верхняя», а другая - «нижняя».
Последние два пункта - "правая" сторона, та же сделка.
Это не будет работать для алмаза, хотя! (Но что в любом случае "слева вверху" на бриллианте?)
Как правило, для набора выпуклых можно вычислить центр тяжести (значение x является средним значением всех значений x, значение y является средним значением всех значений y).
Затем вы можете вычислить аргумент (то есть угол) линии между центроидом и точкой, равный arctan2
из (y_pt-y_centroid,x_pt-x_centroid)
.
Если затем вы отсортируете точки по их аргументам, они будут в порядке против часовой стрелки, где -pi - это точка западного направления компаса, 0 - это восток, и снова оборачивается до + pi - это точка западного направления. *