条件:1.不规则多边形的顶点坐标 2.测试点坐标
下面给出python代码:
def pnpoly(vertices, testp):
n = len(vertices)
j = n - 1
res = False
for i in range(n):
if (vertices[i][1] > testp[1]) != (vertices[j][1] > testp[1]) and \
testp[0] < (vertices[j][0] - vertices[i][0]) * (testp[1] - vertices[i][1]) / (
vertices[j][1] - vertices[i][1]) + vertices[i][0]:
res = not res
j = i
return res
True 表示在多边形内
False 表示不在
测试1:
vertices = [[0, 0], [0, 1], [1, 0], [1, 1]]
testp = [0, 0.9]
print(pnpoly(vertices, testp))
输出:
True
测试2:
vertices = [[0, 0], [0, 1], [1, 0], [1, 1]]
testp = [0, 1.1]
print(pnpoly(vertices, testp))
输出:
False
详细证明过程参考下面:
这里是链接
(建议使用手机端看,电脑端可能看不到图)