【发布时间】:2011-10-23 05:46:52
【问题描述】:
我使用的是 .NET 2.0,所以我无法访问漂亮的 Linq;但是,我已经编写了一些代码,可以顺时针/逆时针对点列表进行排序。
我的问题是,如果列表尚未排序,则排序工作得非常好,但如果由于某种原因列表已经排序,排序功能会惨遭失败。
如果有人可以帮助我指出正确的方向,为什么这可能是原因,我正在徘徊。
这是我对排序的呼吁:
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
此列表的顺序不正确,调用排序函数会产生:
15778064, 27738219
15778081, 27738192
15778180, 27738255
15778163, 27738282
排序正确。对于已经排序的每组坐标和未排序的坐标,这种模式都会自我重复。有什么想法吗?
【问题讨论】:
-
你真的应该将你的参考点传递给方法,而不是参考(没有双关语)一个“全局”变量。
标签: c# sorting coordinates