|
r = sqrt((x2, y2), (x3, y3)) |
稳定触发报错的例子:
1.ColsLines[i] = (189,5,189,92);ColsLines[j] = (202, 92, 202, 396),即(x2,y2) = (189, 92),(x3,y3) = (202, 92),r = sqrt((x2, y2), (x3, y3)) < alph 成立
2.会执行newColsLines.append([x2, y2, x3, y3]),但此处显然[189,92,202,92]是一条横线
3.newColsLines列表里混入横线后,运行到line_to_line函数时,只要与[189,92,202,92]计算的另一条横线y值相同,就会导致fit_line时直线系数A为0
4.最后导致分母"A1
B2-A2B1"为0报错
|
x = (B1 * C2 - B2 * C1) / (A1 * B2 - A2 * B1) |
5.同样adjust_lines函数第152,156,176行这三条分支都会触发上述错误
问题导致原因:
RowsLines循环时,两条row_line特殊情况会产生一条垂直的col_line,需要增加判断条件加到newColsLines而非newRowsLines,ColsLines循环同理。
解决方案:增加调整后新增线段是否水平垂直
# 其他情况同理
r = sqrt((x1, y1), (x4, y4))
delta_x = x1 - x4
if r < alph:
if delta_x == 0.0:
newColsLines.append([x1, y1, x4, y4])
else:
newRowsLines.append([x1, y1, x4, y4])