def intersectedge1 edge2 # 计算边的斜率和截距 x1 y1 = edge10 x2 y2 = edge11 if x2-x1==0 # 检查分母是否为零 m1 = floatinf # 返回一个大数或NaN else m1 = y2 - y1 x2 - x1 b1 = y1 - m1 x1 #截距
当两个线段的直线是垂直的时候,斜率为无穷大,会进入第一个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 著作权归作者所有。请勿转载和采集!