我使用的是.NET 2.0,因此我無法訪問漂亮的Linq;不過,我已經編寫了一些順時針/逆時針排列點的代碼。C#排序X,Y座標順時針方向的列表
我的問題是,排序工作完全正常,如果列表尚未排序,但如果由於某種原因列表已排序排序功能失敗悲慘。
我在徘徊,如果有人能幫助我指出正確的方向,爲什麼這可能是原因。
這裏是我的電話給排序:
positions.Sort(new Comparison<Position>(MapUtils.SortCornersClockwise));
這裏是SortCornersClockwise功能:
public static int SortCornersClockwise(Position A, Position B)
{
// Variables to Store the atans
double aTanA, aTanB;
// Reference Point
Pixels reference = Program.main.reference;
// Fetch the atans
aTanA = Math.Atan2(A.Pixel.Y - reference.Y, A.Pixel.X - reference.X);
aTanB = Math.Atan2(B.Pixel.Y - reference.Y, B.Pixel.X - reference.X);
// Determine next point in Clockwise rotation
if (aTanA < aTanB) return -1;
else if (aTanB > aTanA) return 1;
return 0;
}
凡我引用我從中確定各自的角度對每個點的點我的點數列表。
現在說我有個名單:
15778066, 27738237
15778169, 27738296
15778185, 27738269
15778082, 27738210
這些已經排序以正確的順序,但調用排序功能得到:
15778082, 27738210
15778066, 27738237
15778185, 27738269
15778169, 27738296
現在採取另一套取樣點:
15778180, 27738255
15778081, 27738192
15778064, 27738219
15778163, 27738282
此列表尚未按正確順序調用sort func產量:
15778064, 27738219
15778081, 27738192
15778180, 27738255
15778163, 27738282
這是排序正確。這種模式爲已經排序的每一組座標和沒有排序的座標重複一次。有任何想法嗎?
你真的應該把你的參考點傳遞給方法,而不是引用(沒有雙關語意思)一個'全局'變量。 –