gpt4 book ai didi

python - 按顺时针点坐标排序

转载 作者:太空狗 更新时间:2023-10-29 21:21:43 34 4
gpt4 key购买 nike

给定一个 Python 列表,其中包含 4 个点的 8 个 x、y 坐标值(均为正值),如 [x1, x2, x3, x4, y1, y2, y3, y4] ((xi, yi) 是第i点的x和y坐标),

我怎样才能对它进行排序,使新列表 [a1, a2, a3, a4, b1, b2, b3, b4] 的坐标 (ai, bi) 的 1 2 3 4 按顺时针顺序排列,其中 1 最接近 xy 平面的原点,即类似于

          2--------3
| |
| |
| |
1--------4

点将大致形成一个平行四边形。

目前,我正在考虑找到具有最小值 (x+y) 的点作为 1,然后通过剩余坐标中具有最小 x 的点找到 2,通过 (x + y) 的最大值找到 3,剩余坐标为 4点

最佳答案

您应该使用 2 项元组列表作为数据结构,以有意义的方式表示可变数量的坐标。

from functools import reduce
import operator
import math
coords = [(0, 1), (1, 0), (1, 1), (0, 0)]
center = tuple(map(operator.truediv, reduce(lambda x, y: map(operator.add, x, y), coords), [len(coords)] * 2))
print(sorted(coords, key=lambda coord: (-135 - math.degrees(math.atan2(*tuple(map(operator.sub, coord, center))[::-1]))) % 360))

这个输出:

[(0, 0), (0, 1), (1, 1), (1, 0)]

关于python - 按顺时针点坐标排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51074984/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com