[math]判断一个点是否在多边形内的方法

本文介绍了几种用于判断点是否位于多边形内部的方法,包括向量叉乘法、面积和法、夹角和法、引射线法及PNPoly算法。探讨了各种方法的适用场景和具体实现细节。


多边形的内角是由两条相邻边形成边界之内的角;如果一个多边形的所有内角均小于180°,则该多边形为凸(convex)多边形;否则为凹(concave)多边形:

  • 凸多边形的任意两个顶点间的连线位于多边形内部或边上;
  • 按顺序计算向量叉积:凸多边形均同号,凹多边形不同号。

向量叉乘判别法

向量叉乘法,只对非凹多边形有效,对于凹多边形需要切割为凸多边形。

设多边形的顶点依次为A1, A2 … An,要判断的点为P,那么:

  • 分别计算向量PA1叉乘向量PA2,向量PA2叉乘向量PA3,…,向量PA(n-1)叉乘向量PAn,以及向量PAn叉乘向量PA1;
  • 若这些叉乘的结果都同向的话,那么这个点就在多边形的内部。

面积和判别法

判断目标点与多边形的每条边组成的三角形面积和,是否等于该多边形,相等则在多边形内部。

设多边形的顶点依次为1,2,...,n,要判断的点为P。用P点连接多边形各顶点:

  • 若P点在多边形以内,则P与各顶点组成的三角形正好填充此多边形;反之,则不能。
  • 使用多边形面积计算公式,计算面积S(根据叉乘原理):
    S = 1 2 ∣ ∑ i = 1 n ( x i ∗ y i + 1 − x i + 1 y i ) ∣ S=\frac{1}{2}\left|\sum\limits_{i=1}^n(x_i*y_{i+1} - x_{i+1}y_i)\right| S=21 i=1n(xiyi+1xi+1yi)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值