Как объединить две близкие непрямые (непараллельные) линии в Python? - PullRequest
0 голосов
/ 09 октября 2018

У меня есть 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

...