当两个线段的直线是垂直的时候,斜率为无穷大,会进入第一个if语句块,这时需要判断两个线段是否有重叠部分,但是当前的判断条件只判断了x坐标是否有重叠,没有判断y坐标是否有重叠。可以修改判断条件,将x坐标和y坐标的判断条件合并起来,如下所示:

if x1 == x2 and x3 == x4:  # 两个线段都垂直x轴
    if x1 != x3:  # 不在同一条直线上
        return False
    else:  # 在同一条直线上
        if y1 <= y3 <= y2 or y2 <= y3 <= y1 or y3 <= y1 <= y4 or y4 <= y1 <= y3:
            return True
        else:
            return False
elif x1 == x2:  # 第一个线段垂直x轴
    y = m2 * x1 + b2
    if y < min(y1, y2) or y > max(y1, y2) or y < min(y3, y4) or y > max(y3, y4):
        return False
    else:
        return True
elif x3 == x4:  # 第二个线段垂直x轴
    y = m1 * x3 + b1
    if y < min(y1, y2) or y > max(y1, y2) or y < min(y3, y4) or y > max(y3, y4):
        return False
    else:
        return True
else:  # 两个线段都不垂直x轴
    x = (b2 - b1) / (m1 - m2)
    if x < min(x1, x2) or x > max(x1, x2) or x < min(x3, x4) or x > max(x3, x4):
        return False
    else:
        return True

这样修改后,即使两个线段的直线是垂直的,也能够正确判断它们是否相交


原文地址: https://www.cveoy.top/t/topic/faHY 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录