Пересечение контуров многоугольника

#python-3.x #opencv #geometry #polygon #contour

#python-3.x #opencv #геометрия #полигон #контур

Вопрос:

У меня есть два замкнутых многоугольника, и мне нужно будет определить, имеют ли их контуры какие-то общие точки или нет. Под этим я подразумеваю не то, что у них есть общая область, а скорее то, что они разделяют часть своих контуров. Пожалуйста, смотрите изображение ниже для лучшей иллюстрации.

Два многоугольника, нарисованные на экране

Пересечение контуров зеленым цветом

Координаты:

 polygon1 = [(532.35, 274.98), (525.67, 281.66), (518.4, 292.58), (507.72, 315.49), (501.22, 326.04), (497.16, 328.47), (495.53, 331.71), (488.24, 339.02), (480.94, 349.56), (476.09, 360.1), (476.89, 378.76), (492.3, 393.35), (501.22, 398.21), (527.17, 398.21), (535.28, 390.1), (540.96, 373.89), (539.64, 356.93), (541.46, 329.0), (543.39, 313.87), (545.83, 300.89), (545.83, 276.56), (543.39, 267.64), (537.81, 268.91)] polygon2 = [(482.0, 366.0), (481.0, 385.0), (486.0, 385.0), (495.0, 388.0), (495.0, 378.0), (478.0, 342.0), (467.0, 366.0)]  

Я решил вычислить, перекрываются ли эти контуры, 1) взяв точки прямоугольника с минимальной площадью повернутого прямоугольника (cv2) и 2) найдя, пересекаются ли какие-либо ограничительные рамки этих объектов по следующей формуле:

 def line_intersection(line1, line2):  xdiff = (line1[0][0] - line1[1][0], line2[0][0] - line2[1][0])  ydiff = (line1[0][1] - line1[1][1], line2[0][1] - line2[1][1])   def det(a, b):  return a[0] * b[1] - a[1] * b[0]   div = det(xdiff, ydiff)  if div == 0:    raise Exception('lines do not intersect')   d = (det(*line1), det(*line2))  x = det(d, xdiff) / div  y = det(d, ydiff) / div  return x, y  

Однако по какой-то причине этот метод также приводит к обнаружению того, что ограничивающие рамки перекрываются, даже если контуры этого не делают (хотя они могут перекрываться по площади).

Комментарии:

1. Вы уже вычисляете пересечение каждого сегмента первого многоугольника с каждым сегментом второго многоугольника?