(1)wie kannst Du Dir so sicher sein?...(2) Wahrscheinlich habe ich jetzt eine falsche Version.
(1) Ich habe es ausprobiert (sonst würde ich hier nicht so rumkrakeelen)
(2) Anders kann ich mir das nicht erklären. Ich hab hier kein Delphi (nur privat) und es mit C# kurz nachgebaut. Es geht ja ums Verfahren und nicht um den Code an sich
Code:
class Point
{
public decimal X, Y;
public override string ToString()
{
return string.Format("[{0:N2}, {1:N2}]" , X,Y);
}
}
class PointList
{
public decimal Eps = (decimal) 0.1;
private readonly List<Point> items=new List<Point>();
public List<Point> Items
{
get { return this.items; }
}
int Compare(Decimal a, Decimal b)
{
if (a + Eps < b)
return -1;
if (a > b + Eps)
return +1;
return 0;
}
int Compare(Point p1, Point p2)
{
int result = Compare(p1.X, p2.X);
if (result == 0)
result = Compare(p1.Y, p2.Y);
return result;
}
public void Add(decimal x, decimal y)
{
items.Add(new Point {X = x, Y = y});
}
public void RemoveDuplicates()
{
items.Sort(Compare);
int n = 0;
for (int i=1;i<items.Count;i++)
{
if (Compare(items[i], items[n]) != 0)
{
n++;
items[n] = items[i];
}
}
items.RemoveRange(n+1,items.Count-n-1);
}
}
Kurz und knackig.