使用Python将多边形坐标列表逆时针排序

3

我有一些子列表,包含坐标元组,使得子列表内的元组形成一个多边形。

list_test = [[(0.115, 0.993), (0.319, 0.948), (0.236, 0.849)], [(0.319, 0.948), (0.640, 0.768), (0.236, 0.849), (0.471, 0.566)], [(0.115, -0.993), (-0.115, -0.993), (0.236, -0.849), (-0.236, -0.849), (0.0, -0.566)]]

这些多边形是由矩形和线段相交而成,因此它们可以是三角形、矩形或五边形(不涉及“有趣的形状”),并且它们都位于单位圆内。如何对每个子列表中的坐标元组按逆时针方向进行排序?

1
  1. 计算x和y的平均值,这将给出中心的坐标。 2) 使用math.atan()计算从中心到每个点的角度。 3) 根据角度对点进行排序。
- Martin Wettstein
@MartinWettstein 谢谢,这已经帮了我很多! - DominikR
1个回答

1

只需基于原点取每个点的atan值并排序即可。

for points in list_test:
    points.sort(key=lambda x: math.atan2(x[1] - 0, x[0] - 0))

给定示例的简单情节:

fig, ax = plt.subplots()
for points in list_test:
    for point in points:
        ax.scatter(point[0], point[1], c='b')
        ax.annotate(f" {point}", xy=point)
ax.axhline(y=0, color='k')
ax.axvline(x=0, color='k')
plt.show()

这对于我的一些多边形来说表现出了一些奇怪的行为,但是我通过这个答案给我的想法成功地解决了它,谢谢! - DominikR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接