Hallo,
der gepostete Schnipsel soll nur das Vorgehen zeigen.
cEps ist global definiert in uFloatPoint.pas
In den angehängten Dateien ist es dann funktionstüchtig. ( Man kann sich das auch tatsächlich mal anschauen )
Es ging doch darum, das Deine Sortierung nicht wirklich aufsteigend sortiert, weil dort
Result := CompareValue(A.X, B.X, cEps);
immer eine Umgebung betrachtet wird.
Ich hatte auch mal sowas im Testprogramm:
Delphi-Quellcode:
for I := 1 to N do
FLoatPoints.AddXY(i*cEps/20,i);
//Zufaellige Punkte in y minimal verschieben -> doppelte
for I := FLoatPoints.Count-1 downto 0 do
with FloatPoints[Random(N)] do
FLoatPoints.AddXY(X, Y-0.5*eps);
Also werden in sehr kleinem x-Abstand Punkte erzeugt, die sich y-mäßig sehr stark unterscheiden.Man muss dabei die letzten 20 Punkte in x-Richtung betrachten.Deshalb funktioniert dann Dejan Vu Version nicht mehr.
Gruß Horst
P.S:
Wie kann man jetzt feststellen, das man nicht zuviele Punkte rausgeschmissen hat?
P.S.S:
Kann man den Titel ändern.
Irgendwas mit doppelten XY-Koordinaten löschen wäre angebrachter.