Nein, so kann man keine Koordinaten sortieren (Siehe auch Namenloser und Horst). BTW, bei deiner FastAddPoints, fehlen da nicht die FillChars, TFLoatPoint ist doch ein Record?
Sort muss z.B. so:
Delphi-Quellcode:
procedure TFloatPoints.Sort(const RemoveDoubles: boolean);
const
Eps = 1E-4;
var
X: double;
I, J: integer;
NewList, SortList: TFloatPoints;
begin
if FCount > 1 then
begin
NewList := TFloatPoints.Create;
try
SortList := TFloatPoints.Create;
try
SortByX;
I := 0;
while I < FCount do
begin
SortList.Clear;
X := FItems[I].X;
while (I < FCount) and (SameValue(X, FItems[I].X, Eps)) do
begin
SortList.Add(FItems[I]);
Inc(I);
end;
SortList.SortByY;
if RemoveDoubles then
begin
for J := SortList.Count - 1 downto 1 do
if SameFloatPoint(SortList[J], SortList[J - 1]) then
SortList.Delete(J);
end;
NewList.AddPoints(SortList);
end;
Assign(NewList);
finally
SortList.Free;
end;
finally
NewList.Free;
end;
end;
end;