如何使用 Python 镜像多边形?
How can I mirror a polygon using Python?
我有一组图像,上面绘制了多边形。我有这些多边形的点,我使用 Shapely 绘制它们并检查眼动仪的某些点是否落入多边形。
现在,其中一些图像是镜像的,但我没有在其中绘制的多边形坐标。如何水平翻转多边形?有没有办法用 Shapely 做到这一点?
如果您想相对于垂直轴反映多边形,即水平翻转它们,一种选择是使用 scale
提供的变换(使用负单位比例因子) 12=] 或使用自定义转换:
from shapely.affinity import scale
from shapely.ops import transform
from shapely.geometry import Polygon
def reflection(x0):
return lambda x, y: (2*x0 - x, y)
P = Polygon([[0, 0], [1, 1], [1, 2], [0, 1]])
print(P)
#POLYGON ((0 0, 1 1, 1 2, 0 1, 0 0))
Q1 = scale(P, xfact = -1, origin = (1, 0))
Q2 = transform(reflection(1), P)
print(Q1)
#POLYGON ((2 0, 1 1, 1 2, 2 1, 2 0))
print(Q2)
#POLYGON ((2 0, 1 1, 1 2, 2 1, 2 0))
乘以[[1,0], [0,-1]]
,就可以得到垂直翻转的形状。
(我在 jupyter notebook 上测试过)
pts = np.array([[153, 347],
[161, 323],
[179, 305],
[195, 315],
[184, 331],
[177, 357]])
display(Polygon(pts))
display(Polygon(pts.dot([[1,0],[0,-1]])))
如果你乘以[[-1,0],[0,1]]
,你会得到水平翻转的形状。
参考 linear transformation 以了解其工作原理。
我有一组图像,上面绘制了多边形。我有这些多边形的点,我使用 Shapely 绘制它们并检查眼动仪的某些点是否落入多边形。
现在,其中一些图像是镜像的,但我没有在其中绘制的多边形坐标。如何水平翻转多边形?有没有办法用 Shapely 做到这一点?
如果您想相对于垂直轴反映多边形,即水平翻转它们,一种选择是使用 scale
提供的变换(使用负单位比例因子) 12=] 或使用自定义转换:
from shapely.affinity import scale
from shapely.ops import transform
from shapely.geometry import Polygon
def reflection(x0):
return lambda x, y: (2*x0 - x, y)
P = Polygon([[0, 0], [1, 1], [1, 2], [0, 1]])
print(P)
#POLYGON ((0 0, 1 1, 1 2, 0 1, 0 0))
Q1 = scale(P, xfact = -1, origin = (1, 0))
Q2 = transform(reflection(1), P)
print(Q1)
#POLYGON ((2 0, 1 1, 1 2, 2 1, 2 0))
print(Q2)
#POLYGON ((2 0, 1 1, 1 2, 2 1, 2 0))
乘以[[1,0], [0,-1]]
,就可以得到垂直翻转的形状。
(我在 jupyter notebook 上测试过)
pts = np.array([[153, 347],
[161, 323],
[179, 305],
[195, 315],
[184, 331],
[177, 357]])
display(Polygon(pts))
display(Polygon(pts.dot([[1,0],[0,-1]])))
如果你乘以[[-1,0],[0,1]]
,你会得到水平翻转的形状。
参考 linear transformation 以了解其工作原理。