Ich weiß, ihr glaubt mir nicht, aber das hier funktioniert und ist zudem noch schneller:
Delphi-Quellcode:
Procedure TFloatPoints.DejainRemove;
var
n,i : Integer;
r : TFloatPoint;
Begin
Sort();
n := 0;
r := FItems[n];
for i:=1 to FCount-1 do
if not SameFloatPoint(fitems[i],r) then begin
inc(n);
FItems[n]:=fItems[i];
r := FItems[n];
End;
fCount := n+1;
End;
Das Ergebnis ist jedenfalls beim Testprojekt stets 'OK'. Aber ich scheine mir hier den Mund fusselig zu reden.
Auf jeden Fall ist das hier einfach Quark (tut mir leid)
![](styles/elise/misc/quote_24x24.png)
Zitat von
Kommentar in uFloatPoints.pas:
Delphi-Quellcode:
// Koordinaten können mit einem instabilen Sortierverfahren nicht eindimensional sortiert werden;
// Wir wollen aber mit dem QuickSort sortieren, weil eben schnell;
// Deshalb sortieren wir zuerst nach X (SortByX) und anschließend alle Punkte
// mit den gleichen X-Werten nach Y (SortByY);
// Wir sortieren auch desshalb, weil wir Doppel schnell rauslöschen wollen;
// Wir sortieren also zunächst (die ganze Liste) nach X;
// Danach suchen wir alle Punkte mit den gleichen X-Werten und sortieren diese nach Y;
Viel Spass dann noch.