Координаты прямоугольника
A Rectangle
определяется через пару координат нижнего левого угла (x, y), ширину и высоту.Чтобы получить координаты его углов, вы можете
рассчитать их по углу, ширине и высоте,
r1 = patches.Rectangle((8,4), 5,3)
ax.add_patch(r1)
coords = np.array([r1.get_xy(), [r1.get_x()+r1.get_width(), r1.get_y()],
[r1.get_x()+r1.get_width(), r1.get_y()+r1.get_height()],
[r1.get_x(), r1.get_y()+r1.get_height()]])
print(coords)
получить их отпреобразованный путь,
r1 = patches.Rectangle((8,4), 5,3)
ax.add_patch(r1)
coords = r1.get_patch_transform().transform(r1.get_path().vertices[:-1])
print(coords)
В обоих случаях напечатанный результат будет
[[ 8. 4.]
[ 13. 4.]
[ 13. 7.]
[ 8. 7.]]
Вы также можете получить две точки: нижнюю левую и верхнюю правую.угол от ограничительной рамки прямоугольника (поскольку сам прямоугольник является прямоугольником),
r1 = patches.Rectangle((8,4), 5,3)
ax.add_patch(r1)
coords = r1.get_bbox().get_points()
print(coords)
с приведет к
[[ 8. 4.]
[ 13. 7.]]
Преобразованным координатам прямоугольника.
Сейчасесли вы преобразуете прямоугольник, вышеприведенные методы должны принять во внимание преобразование, чтобы обеспечить правильные координаты преобразованного прямоугольника.
преобразовать полученные вручную координаты,
r2 = patches.Rectangle((8,4), 5,3)
trafo = mpl.transforms.Affine2D().rotate_around(8,4,angle)
r2.set_transform(trafo + ax.transData)
ax.add_patch(r2)
coords = np.array([r2.get_xy(), [r2.get_x()+r2.get_width(), r2.get_y()],
[r2.get_x()+r2.get_width(), r2.get_y()+r2.get_height()],
[r2.get_x(), r2.get_y()+r2.get_height()]])
print(trafo.transform(coords))
преобразовать координаты, полученные из пути
r2 = patches.Rectangle((8,4), 5,3)
trafo = mpl.transforms.Affine2D().rotate_around(8,4,angle)
r2.set_transform(trafo + ax.transData)
ax.add_patch(r2)
coords = r2.get_patch_transform().transform(r2.get_path().vertices[:-1])
print(trafo.transform(coords))
В этих случаях напечатанные координаты будут
[[ 8. 4. ]
[ 11.53553391 7.53553391]
[ 9.41421356 9.65685425]
[ 5.87867966 6.12132034]]
Или, в случае получения кудинатов от лимитинаg box
coords = r2.get_bbox().get_points()
print(trafo.transform(coords))
отпечатки
[[ 8. 4. ]
[ 9.41421356 9.65685425]]