【无标题】

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内部")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值