基本上我有一个点列表,每个点都有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]))
不确定这是否能满足您的需求。
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();