顺时针对列表中的2d点排序

本文关键字:2d 排序 列表 顺时针 | 更新日期: 2023-09-27 17:50:24

基本上我有一个点列表,每个点都有X,Y,Z (Z总是相同的)。

例如:

pointList.add(Point p = new Point(1, 2, 3));

然而,我很难将它们按顺时针顺序排序。

我知道中心,我知道每个列表中大约有600个点。

我以前在Python中完成了这个,但是在c#中我遇到了麻烦。

Python代码:

pointlist.sort(key=lambda c:atan2(c[0], c[1]))

顺时针对列表中的2d点排序

不确定这是否能满足您的需求。

points = points.OrderBy(x => Math.Atan2(x.X, x.Y)).ToList();

不是很优化,只是看看你的python代码,认为这将完成相同的。

注意:你可能需要using System.Linq,除非你已经有了。

编辑:斯特姆指出,为了让它们"顺时针",可能有必要颠倒顺序。实现这一目标的一种方法是用OrderByDescending代替OrderBy

对于任何挣扎于如何围绕(XX, YY)而不仅仅是(0,0)排序的人来说,代码需要稍微修改。

points.OrderBy(x => Math.Atan2(x.X - XX, x.Y - YY)).ToList();