【发布时间】:2016-09-24 15:21:26
【问题描述】:
我正在尝试实现格雷厄姆算法以在 C# 中找到凸包。它包括按与基点的角度对点进行排序的步骤。我正在尝试使用从 Comparer 继承的类通过 Array.Sort 方法来实现它。
这里是类
class ReversePolarSorter : Comparer<Point>
{
double e = 0.000001;
double m_baseX;
double m_baseY;
public ReversePolarSorter(Point basePoint)
{
m_baseX = basePoint.X;
m_baseY = basePoint.Y;
}
public override int Compare(Point a, Point b)
{
double angleA = Math.Atan2(a.Y - m_baseY, a.X - m_baseX);
double angleB= Math.Atan2(b.Y - m_baseY, b.X - m_baseX);
int result;
if (Math.Abs(angleA - angleB) < e)
result= 0;
else
result= angleA.CompareTo(angleB);
return result;
}
}
然后我用它来排序
Comparer<Point> sorter = new ReversePolarSorter(coords[m_pointsNumber-1]);
Array.Sort<Point>(coords, 0, m_pointsNumber - 2, sorter);
coords 是一个点数组。
m_pointsNumber 是点数。
m_pointsNumber-1 是用于计算角度的基点。
它没有按正确的顺序对其进行排序,我看不到问题所在。如果有人能指出它,我将不胜感激。
【问题讨论】: