我有很多包含坐标元组的子列表,这样子列表中的元组就形成了一个多边形。
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()