python判断一个点是否在不规则的四边形内
根据奇偶规则判断
def point_in_quadrilateral(A, B, C, D, P):
"""
判断点P是否在四边形ABCD内部
参数:
A, B, C, D: 四边形的四个顶点坐标,形如 (x, y)
P: 待判断的点的坐标,形如 (x, y)
返回值:
如果P在四边形内部,返回True;否则返回False。
"""
intersections = 0 # 记录交点的个数
# 构建四条射线,并检查射线是否与边相交
intersections += check_intersection(P, A, B)
intersections += check_intersection(P, B, C)
intersections += check_intersection(P, C, D)
intersections += check_intersection(P, D, A)
# 如果交点个数为奇数,则P在四边形内部
if intersections % 2 == 1:
return True
else:
return False
def check_intersection(P, Q1, Q2):
"""
检查射线PQ与线段Q1Q2是否相交
参数:
P, Q1, Q2: 点的坐标,形如 (x, y)
返回值:
如果相交,返回1;否则返回0。
"""
if (Q1[1] > P[1]) != (Q2[1] > P[1]) and P[0] < (Q2[0] - Q1[0]) * (P[1] - Q1[1]) / (Q2[1] - Q1[1]) + Q1[0]:
return 1
else:
return 0
# 示例用法
# P = (1273, 745)
# P = (829, 1245)
P = (597, 1000)
if point_in_quadrilateral((1348, 1510), (2665, 947), (563, 20), (400,25), P):
print("点P在四边形ABCD内部")
else:
print("点P不在四边形ABCD内部")