作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想实现以下目标:
下面是我的代码片段。旋转后的补丁坐标与原始坐标相同..如何实现 1) 和 2)?
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as patches
import matplotlib as mpl
from matplotlib.transforms import Affine2D
fig = plt.figure()
ax = fig.add_subplot(111)
angle = np.deg2rad(45)
r1 = patches.Rectangle((8,4), 5,3, fill=False, color="red", alpha=0.50)
r2 = patches.Rectangle((8,4), 5,3, fill=False, color="blue", alpha=0.50)
trafo = mpl.transforms.Affine2D().rotate_around(8,4,angle) + ax.transData
r2.set_transform(trafo)
ax.add_patch(r1)
ax.add_patch(r2)
plt.xlim(0,15)
plt.ylim(0,15)
plt.grid(False)
plt.show()
print(r1.get_bbox())
print(r1.get_xy())
print(r2.get_bbox()) # why are they the same as for r1?
print(r2.get_xy())
#print(r1.get_all_points()) # how to achieve it?
最佳答案
矩形
是通过左下角 (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]]
或者,如果从边界框获取坐标
coords = r2.get_bbox().get_points()
print(trafo.transform(coords))
打印
[[ 8. 4. ]
[ 9.41421356 9.65685425]]
关于python - 获取旋转面片(矩形)的坐标 matplotlib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50306012/
scikit-learn 的 extract_patches_2d可用于将 2D 图像 reshape 为补丁集合。 extract_patches是使用 NumPy 的 as_strided 的通用
问题:当尝试使用 fig2plotly 在 MATLAB 中导出使用 patch 命令渲染的多边形时,最终输出缺少指定的面颜色。 也许演示会有所帮助。采用以下顶点和面来定义立方体(从 MATLAB 文
我是一名优秀的程序员,十分优秀!