from shapely.geometry import Polygon, Point
def isContainOffice(P, p):
P1 = Polygon(P)
p1 = Point(p[0], p[1])
return P1.contains(p1)
#判断点是否在多边形上
def isOnEdge(P, p):
x, y = p[0], p[1]
for i in range(len(P)-1):
x1, y1, x2, y2 = P[i][0], P[i][1], P[i+1][0], P[i+1][1]
if x >= min(x1, x2) and x <= max(x1, x2) and y >= min(y1, y2) and y <= max(y1, y2) and (y-y1)*(x2-x1) == (y2-y1)*(x-x1):
return True
return False
#判断点是否在多边形内部,这里边界上的点不算作该多边形里
def isContain(P, p, onEdge=False):
if isOnEdge(P, p):
return onEdge
vertx = [p[0] for p in P]
verty = [p[1] for p in P]
x, y = p[0], p[1]
res = False
for i in range(1, len(P)):
j = i-1
#点的纵坐标在中间(一边大于y,一边小于等于y),纵坐标平齐的按这个逻辑都会忽略
if (((verty[i] > y) != (verty[j] > y)) and (x < (vertx[j] - vertx[i]) * (y - verty[i]) / (verty[j] - verty[i]) + vertx[i])):
res = not res
return res
if __name__ == '__main__':
P = [[0, 0], [1, 0], [1, 1], [0, 1], [0, 0]]
p = [0.5, 0.5]
print(isContainOffice(P, p))
print(isContain(P, p))
95、判断点与多边形是否存在包含关系
最新推荐文章于 2024-08-20 13:04:52 发布