前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >多边形的点序

多边形的点序

原创
作者头像
用户4363240
修改2020-01-06 12:28:56
1.5K0
修改2020-01-06 12:28:56
举报
文章被收录于专栏:Vison

Q: 如何确定多边形点序是顺时针还是逆时针呢?

A: 对于凸多边形,可以方便的用多边形面积的符号得到点序。


概念:

凸多边形:Convex polygon,non-self-intersecting polygon, simple polygon说的都是它(定义详见 wiki)。常见的凸多边形有:矩形、三角形等。

凸多边形与凹多边形
凸多边形与凹多边形
自相交多边形(self-intersecting polygon)
自相交多边形(self-intersecting polygon)

图片来源自wiki

带符号的凸多边形面积

以点序(x1,y1), (x2, y2)..., (xn, yn)为顶点的带符号的凸多边形面积定义为:

其中,|*|是矩阵行列式
其中,|*|是矩阵行列式

展开可写为:

由面积符号确定点序

需要注意的是,点序(顺时针、逆时针)是与坐标系相关的。

  • 在x轴水平向右,y轴水平向上的情况下,如果A>0, 则点序为逆时针,如果A<0, 则点序为顺时针。
  • 而在常见的图像坐标系(以opencv为例)中, 即图像左上角为原点,水平向右为x轴,垂直向下为y轴的情况下, A>0, 则点序为逆时针, A<0, 则点序为顺时针。
左图为逆时针,右图为顺时针
左图为逆时针,右图为顺时针

这里没有说A=0的情况,个人猜想是:abs(A)是普通意义上的面积,凸多边形面积不为0。

参考文献: wolfram.com

code

代码语言:txt
复制
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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概念:
  • 带符号的凸多边形面积
  • 由面积符号确定点序
  • code
  • 应用场景
相关产品与服务
图像处理
图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档