У меня есть 2 линии, проведенные между двумя углами, и я хочу объединить их, если они станут ближе друг к другу.но проблема в том, что линии не прямые, поэтому, если попытаться объединить их, то наиболее близкий угол - это объединение, а другая сторона - нет.например, конечные углы line1 и line2 находятся ближе друг к другу, но начальные углы - нет.Интересно ваше мнение, ребята.код ниже:
def mergeLineCorners(wallLines, _MERGE_TOLERANCE = 15):
for i in range(len(wallLines)):
lineA = wallLines[i]
for j in range(len(wallLines)):
lineB = wallLines[j]
if distance(lineA[0]['x'],lineA[0]['y'], lineB[0]['x'],lineB[0]['y']) < _MERGE_TOLERANCE: #A start B start
mid_x = float(lineA[0]['x'] + lineB[0]['x']) / 2
mid_y = float(lineA[0]['y'] + lineB[0]['y']) / 2
wallLines[i][0]['x'] = mid_x
wallLines[i][0]['y'] = mid_y
wallLines[j][0]['x'] = mid_x
wallLines[j][0]['y'] = mid_y
if distance(lineA[0]['x'],lineA[0]['y'], lineB[1]['x'], lineB[1]['y']) < _MERGE_TOLERANCE: #A start B end
mid_x = float(lineA[0]['x'] + lineB[1]['x']) / 2
mid_y = float(lineA[0]['y'] + lineB[1]['y']) / 2
wallLines[i][0]['x'] = mid_x
wallLines[i][0]['y'] = mid_y
wallLines[j][1]['x'] = mid_x
wallLines[j][1]['y'] = mid_y
if distance(lineA[1]['x'], lineA[1]['y'], lineB[0]['x'], lineB[0]['y']) < _MERGE_TOLERANCE:
mid_x = float(lineA[1]['x'] + lineB[0]['x']) / 2
mid_y = float(lineA[1]['y'] + lineB[0]['y']) / 2
wallLines[i][1]['x'] = mid_x
wallLines[i][1]['y'] = mid_y
wallLines[j][0]['x'] = mid_x
wallLines[j][0]['y'] = mid_y
if distance(lineA[1]['x'], lineA[1]['y'], lineB[1]['x'], lineB[1]['y']) < _MERGE_TOLERANCE:
mid_x = float(lineA[1]['x'] + lineB[1]['x']) / 2
mid_y = float(lineA[1]['y'] + lineB[1]['y']) / 2
wallLines[i][1]['x'] = mid_x
wallLines[i][1]['y'] = mid_y
wallLines[j][1]['x'] = mid_x
wallLines[j][1]['y'] = mid_y
return wallLines
углы, поступающие из файла JSON, и позиция xy, например, строка 1. x: 330, y: 530. и строка 2. x2: 330, y2: 570
левая линия - line1, правая сторона - line2 выходной результат после рисования линий
Как видите, конечные углы объединены, а начальные точки - нет.потому что line2 не является прямой как line1