OpenGL 如何判断点在多边形的内外关系

本文探讨了在OpenGL中判断点是否位于多边形内部的两种方法:射线法和累计角度法。射线法通过计算与多边形的交点个数来判断,而累计角度法则计算有向角度之和。作者还提出了一种简化算法,通过极坐标和夹角比较来确定点的位置。代码示例基于QT4实现,核心算法在isInner()函数中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

近期学习图形学,经常来回碰到一个该死的问题:如何判断点在多边形的内外关系如果用matlab,有直接的内置函数,诸如 in_polygon()之类的。但是你需要用OpenGL上实现的时候,你会发现,这个问题要复杂的多,我调研了一些已有的算法,并在最后罗列自己幼稚的代码,以供参考。

其一:射线法

从V点发出射线,与多边形相交,若交点个数为偶数,V点在外边,反之则不在。这个很好理解,看看下边的图,就可以明白。需要考虑的是特殊情况,比如改点在边界上,或是画出的射线与图形相切之类的。大家就自己想想吧。


其二:累计角度法:

    从V点向多边形P顶点发出射线,形成有向角计算有向角之和。此法也算是简单,看起来也抽象,但是顶点数多的时候,计算就很麻烦。而且误差积累较高。

 

 

具体算法可以参考:

 

笔者也做了一种近似的算法,对于精度要求不太高的,还是值得一试的。

其具体想法如下:

对多边形上的点进行均匀采样,然后做出极坐标。然后对任意一个点,判断其与所有射线的夹角。选择夹角最小的射线,最为其方向,然后比较到原点的距离,如果小于该射线的长度,则证明在多边形内,否则 不在。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值