96SEO 2026-02-19 09:30 7
它计算从点P开始的射线穿过多边形边界的次数。

当“交叉数”是偶数时#xff0c;点在外面;当它是奇数时…在计算几何中判定点是否在多边形内是个非常有趣的问题。
通常有两种方法
它计算从点P开始的射线穿过多边形边界的次数。
当“交叉数”是偶数时点在外面;当它是奇数时点在里面。
这种方法有时被称为“奇-偶”检验。
如果一个多边形是不自交的称为“简单多边形”那么这两种方法对任意点都给出相同的结果。
但对于非简单多边形这两种方法在某些情况下会给出不同的答案。
如下图所示当一个多边形与自身重叠时对于重叠区域内的点如果使用交叉数判断它在外面而使用环绕数判断则在里面。
number方法应用的更广泛因为最初计算几何专家们错误地认为crossing
number计算起来更加高效。
但事实并非如此两者的时间复杂度完全一样。
Franklin在2000年给出一个计算winding
number的非常快的实现。
因此为了几何正确性和效率的原因在确定一个多边形中的一个点时wn算法应该总是首选的。
该方法计算从点P开始的射线穿过多边形边界的次数不管穿过的方向。
如果这个数是偶数那么点在外面;否则当交叉数为奇数时点在多边形内。
其正确性很容易理解因为每次射线穿过多边形边缘时它的内外奇偶性都会发生变化(因为边界总是分隔内外)。
最终任何射线都在边界多边形之外结束。
所以如果点在多边形内那么对边界的穿过次序一定是out…inout,因此交叉数一定是奇数同样地如果点在多边形外那么对边界的穿过次序一定是in
number的算法时必须确保只计算改变奇偶性的交叉位置。
特别是对于射线穿过顶点的情况需要适当的处理。
下图列举了射线与多边形可能的相交情况
此外必须确定多边形边界上的点P是在内部还是外部。
一般约定如果点在边的左侧那么认为点P在内部如果点在边的右侧那么认为点P在外部。
如果两个不同的多边形共享一个共同的边界线段那么该线段上的一点将会在一个多边形或另一个多边形中而不是同时在两个多边形中。
这避免了许多可能发生的问题特别是在计算机图形显示中。
一个简单的做法是选择一条x轴正方向的水平射线对于这样一条射线很容易计算多边形的边与它的交点。
而且很容易确定交点是否存在。
算法只需沿着多边形的每一条边依次计算交点当相交时cn增加1从而计算出最终的总交叉数。
向上的边包含起点但不包含终点向下的边包含终点但不包含起点水平的边不包含起点和终点边与射线的交点必须严格在点P的右侧
按照上述规则处理特殊的相交情况就能得到正确的交叉数。
其中规则4将导致在边界右侧的点在多边形外部在左侧的点将会被判定为在内部。
(in)}注意对于满足规则1和2的向上和向下交叉的测试也排除了水平边缘(规则3)。
总而言之很多工作是通过几个测试完成的这使得这个算法很优雅。
Theorem该定理表明一条简单的闭合曲线将二维平面分成两个完全连通的分量:一个有界的“内”分量和一个无界的“外”分量。
需要注意的是曲线必须是简单的(没有自身交叉)否则可能有两个以上的组成部分然后就不能保证跨越边界改变进出奇偶性。
因此该方法不适用于自相交的多边形。
number方法能准确判定一个点是否在自交的封闭曲线内。
该方法通过计算多边形有多少次环绕点P来实现。
只有当多边形不环绕该点也就是环绕数wn
不妨定义平面上的点P相对于任意连续封闭曲线的环绕数为{wn}(P,C)。
对于一条水平向右的射线R我们每一条与R相交的边需要判断其终点在R上面还是下面。
如果边从下往上穿过Rwn1否则wn-1。
所有边遍历一遍最终得到总的f{wn}(P,C)如下图所示
此外我们没必要计算实际的交点只需要使用如下方法判断当前穿过的边的环绕数应该1还是-1
如下图所示如果一条边向上穿过射线R那么P点在边ViVi1的左侧而对于一条向下的边P点在边ViVi1的右侧。
通过以上分析容易给出如下的wn计算伪代码和cn的计算一样使用相同的边相交规则
polygon}显然环绕数方法与交叉数方法有着相同的计算效率。
但由于该方法更加具有普遍性因此在确定一个点是否在任意多边形内时推荐使用Winding
通过一些技巧可以进一步提高wn算法的效率在下面给出的wn_PnPoly()
的实现中我们可以看到这一点。
在该代码中所有完全在P以上或完全在P以下的边只经过两次不等式检验就被拒绝没有交点。
然而在目前流行的cn算法的实现中需要3次不等式检验才能做到这一点。
由于在实际应用中大多数边都会被拒绝因此进行比较的次数减少了大约33%(或更多)。
在使用非常大的(1,000,000边)随机多边形(边长多边形直径的1/10)和1000个随机测试点(在多边形的边界内)进行运行时测试时测试结果表明wn算法的平均效率提高了20%。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback