Обнаружение пересечения произвольно повернутого текста в Matplotlib

Я хочу определить, перекрываются ли произвольно повернутые текстовые экземпляры.

Используя описанную методику ЗДЕСЬ, я могу получить выровненный по оси ограничивающий прямоугольник (AABB) экземпляра Text. Если текст выровнен по оси, то этот AABB очень плотно прилегает к фактическому тексту. Но как только вы начинаете вращать текст, область, покрытая AABB, становится намного больше, чем фактическая область, занимаемая текстом:

Текстовые поля

Таким образом, AABB - не очень точный способ обнаружения перекрытия повернутого текста.

Вот как я могу это представить:

  1. Для каждого экземпляра текста t используйте AABB для вычисления набора из 4 точек, определяющих произвольно ориентированную ограничивающую рамку (OBB) B_t, которая плотно содержит текст.
  2. Test each t for intersection with each other with 2 steps:

Является ли описанный выше процесс хорошим подходом или есть лучший способ сделать это, используя некоторые функции, уже существующие в Matplotlib?


person dmoench    schedule 10.08.2014    source источник


Ответы (1)


Если вы не хотите тратить много времени на размышления об этом и не слишком озабочены производительностью, я бы импортировал формы и создайте ограничивающие рамки в виде многоугольных объектов. Тогда найти совпадение - тривиальная задача.

from shapely.geometry import Polygon
p1=Polygon([(0,0),(1,1),(1,0)])
p2=Polygon([(0,1),(1,0),(1,1)])
print p1.intersects(p2)

Это может даже помочь найти OBB, если вы можете создать свой многоугольник до поворота текста. (просто убедитесь, что вы применили к многоугольнику те же преобразования, что и к тексту.)

person Paul    schedule 10.08.2014
comment
Спасибо за предложение, Пол. Shapely выглядит довольно многообещающе. Я попробую на этой неделе. - person dmoench; 11.08.2014