Q: 如何确定多边形点序是顺时针还是逆时针呢?
A: 对于凸多边形,可以方便的用多边形面积的符号得到点序。
凸多边形:Convex polygon,non-self-intersecting polygon, simple polygon说的都是它(定义详见 wiki)。常见的凸多边形有:矩形、三角形等。
以点序(x1,y1), (x2, y2)..., (xn, yn)为顶点的带符号的凸多边形面积定义为:
展开可写为:
需要注意的是,点序(顺时针、逆时针)是与坐标系相关的。
这里没有说A=0的情况,个人猜想是:abs(A)是普通意义上的面积,凸多边形面积不为0。
def determinant(point1, point2):
x1, y1 = point1
x2, y2 = point2
return x1 * y2 - x2 * y1
def judge_point_order(polygon):
num_point = len(polygon)
total = 0
for i in range(num_point):
total += determinant(polygon[i], polygon[(i + 1) % num_point])
return "colockwise" if total > 0 else "countercolockwise"
if __name__ == "__main__":
# assume points in standard Euclidean coordinates
polygon = [[1, 2], [3, 4], [5, 6], [7, 8]]
order = judge_point_order(polygon)
print(f'polygon is in {order} order')
关键点检测,由bounding box回归点的时候,需要先调整统一调整标注的点和点序,如左上角为1点,顺时针排列其他点。回归完后再调整为与标注一致。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。