Python 中根据极角对给定的笛卡尔点集进行排序的程序
pythonserver side programmingprogramming更新于 2025/12/17 19:24:17
假设我们在名为 points 的列表中有一组笛卡尔点。我们必须根据它们的极角对它们进行排序。极角在 0 到 2*PI 范围内变化。如果某些点具有相同的极角,则根据该点与原点的距离排列它们。
因此,如果输入类似 points = [(1,1), (1,-2),(-2,2),(5,4),(4,5),(2,3),(-3,4)],

则输出将是 [(5, 4), (1, 1), (4, 5), (2, 3), (-3, 4), (-2, 2), (1, -2)]

为了解决这个问题,我们将遵循以下步骤 −
- 定义一个比较函数 key() 。这将采用 x
- atan := tan-inverse of x[1]/x[0]
- 如果 atan >= 0,则返回对 (atan, x[1]^2+x[0]^2),否则 (2*pi + atan, x[0]^2+x[1]^2)
- 然后使用比较函数 key() 对点进行排序
示例
让我们看看下面的实现以便更好地理解 −
import math def solve(points): def key(x): atan = math.atan2(x[1], x[0]) return (atan, x[1]**2+x[0]**2) if atan >= 0 else (2*math.pi + atan, x[0]**2+x[1]**2) return sorted(points, key=key) points = [(1,1), (1,-2),(-2,2),(5,4),(4,5),(2,3),(-3,4)] print(solve(points))
输入
[(1,1), (1,-2),(-2,2),(5,4),(4,5),(2,3),(-3,4)]
输出
[(5, 4), (1, 1), (4, 5), (2, 3), (-3, 4), (-2, 2), (1, -2)]
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

