在Python中按逆时针方向对多边形坐标列表进行排序



我有很多包含坐标元组的子列表,这样子列表中的元组就形成了一个多边形。

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

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

只需根据原点取每个点的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()

最新更新