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

bol*_*t19 4 c# coordinates

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

例如:

pointList.add(Point p = new Point(1, 2, 3));
Run Code Online (Sandbox Code Playgroud)

但是我无法将它们按顺时针顺序排序.

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

我以前用Python完成了这个,但是我在C#中遇到了麻烦.

Python代码:

pointlist.sort(key=lambda c:atan2(c[0], c[1]))
Run Code Online (Sandbox Code Playgroud)

t0y*_*k4t 5

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

points = points.OrderBy(x => Math.Atan2(x.X, x.Y)).ToList();
Run Code Online (Sandbox Code Playgroud)

没有非常优化或任何东西,只是看看你的python代码,并认为这将完成相同的.

注意:您可能需要,using System.Linq除非您已经拥有它.

编辑:Sturm指出,逆转顺序可能是必要的,以便他们'按时钟''实现这一点的一种方法是使用OrderByDescending而不是OrderBy.