python判断平面内一个点是否在多边形内
程序员文章站
2022-03-02 10:57:48
...
采用射线法就可以判断一个点是否在多边形内, 只需从点出发向右侧水平做出一条射线,如果跟多边形交点个数为奇数,则点在多边形内,否则在多边形外。看一张图就可以看懂啦
图片来自:https://www.jianshu.com/p/ba03c600a557
输入:P点坐标[px, py]
多边形poly顶点坐标[[x1, y1], [x2, y2], ..., [xn, yn]]
返回:True or False
首先,利用循环对多边形每条边做同样对待。然后,判断是否有跟点P水平右向的射线是否有交点,若有交点,flag就翻转一次。
看程序:
def is_in_poly(p, poly):
"""
:param p: [x, y]
:param poly: [[], [], [], [], ...]
:return:
"""
px, py = p
flag = False
i = 0
length = len(poly)
j = length - 1
while i < length:
x1, y1 = poly[i]
x2, y2 = poly[j]
if (x1 == px and y1 == py) or (x2 == px and y2 == py):
flag = True
break
if y1 < py <= y2 or y2 < py <= y1:
x = x1 + (py - y1) * (x2 - x1) / (y2 - y1)
if x == px:
flag = True
break
elif x > px:
# convert the flag
flag = not flag
j = i
i += 1
return flag
if __name__ == '__main__':
point = [3, 3]
poly = [[0, 0], [7, 3], [8, 8], [5, 5]]
print(is_in_poly(point, poly))
上一篇: Boundary
下一篇: 判断四个点是否能构成正方形
推荐阅读
-
java判断某个点是否在所画多边形/圆形内
-
java判断某个点是否在所画多边形/圆形内
-
Shell脚本实现判断IP地址是否在一个ip段内代码分享
-
Python读取txt文件应用---用python实现读取一个txt文档,并根据相应判断条件在txt文件中,每一行内写入指定数据。
-
用vbs判断一个日期是否在指定的时段内
-
Point in polygon(判断一个点是否落在多边形内)
-
iOS判断点是否在多边形面内(高德地图开发)
-
批处理bat判断一个文件在最近5分钟内是否被更新过的代码
-
Java:定义一个未知点,判断未知点是否在圆内。如果在圆内,输出true,否则输出false。
-
Unity 中判断某一个游戏对象是否在摄像机范围内