该函数通过创建一个极坐标系,以轮廓中各个点的平均值作为原点,以角度的大小排序。排序结束后可以得到一组以角大小排序的点
def sort_points_clockwise(points): """轮廓排序算法""" center_x = sum(pt[0] for pt in points) / len(points) center_y = sum(pt[1] for pt in points) / len(points) def get_angle(point): angle = math.atan2(point[1] - center_y, point[0] - center_x) return angle if angle >= 0 else angle + 2 * math.pi sorted_points = sorted(points, key=get_angle) return sorted_points