如何使用Python镜像多边形?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Python镜像多边形?相关的知识,希望对你有一定的参考价值。

我有一组图像,用于绘制多边形。我有这些多边形的点,我使用Shapely绘制这些点并检查来自眼动仪的某些点是否落入多边形。

现在,其中一些图像是镜像的,但我没有绘制多边形的坐标。如何水平翻转多边形?有没有办法用Shapely做到这一点?

答案

如果你想相对于垂直轴反射一个多边形,即水平翻转它,一个选项是使用scale提供的shapely.affinity变换(使用负单位比例因子)或使用自定义变换:

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笔记本上测试过这个)

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]])))

jupyter_notebook_result

如果你乘以[[-1,0],[0,1]],你会得到水平翻转的形状。

请参阅linear transformation以了解其工作原理。

以上是关于如何使用Python镜像多边形?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Python 在一组点上绘制多边形(部分向内弯曲)边缘?

片段着色器究竟如何用于纹理?

使用 OpenGL C++ 渲染到纹理

你如何在 python 中处理 graphql 查询和片段?

如何在 python 中并行化以下代码片段?

如何使用python计算地球表面多边形的面积?