Registriert seit: 28. Nov 2005
Ort: Witten
26 Beiträge
Delphi 2006 Professional
|
Re: Doppelte Dreiecke in einem Array finden.... ?
20. Jun 2007, 14:06
Hallo,
sortieren und Duplikate finden kann man doch auch mit StringListen, dazu fiel mir so was ein (natürlich nicht getestet):
Delphi-Quellcode:
procedure TForm1.btnChkOfDuplicateClick(Sender: TObject);
var
Find: TFace;
i, j, n: integer;
SL1Dreieck, SLnDreiecke : TStringList;
begin
SL1Dreieck := TStringList.Create;
SL1Dreieck.Sorted := True;
SLnDreiecke := TStringList.Create;
SLnDreiecke.Sorted := False;
SLnDreiecke.Duplicates := dupError;
DebugStrOut(TRUE, ' Begin Check of Duplicate', clGreen, [fsBold]);
for i:=0 to High(m3DObject) do
begin
if n <> i then
begin
SL1Dreieck.Clear;
for j := 0 to 2 do // 1 Dreieck , 3 Punkte
SL1Dreieck.Add(IntToStr(m3DObject[i, j, 0]) +
IntToStr(m3DObject[i, j, 1]) +
IntToStr(m3DObject[i, j, 2]));
// Jetzt haben wir: X0Y0Z0, X1Y1Z1, X2Y2Z2 -> sortiert
try
SLnDreiecke.Add(SL1Dreieck.Strings[0] + SL1Dreieck.Strings[1] +
SL1Dreieck.Strings[2]);
// Jetzt haben wir: X0Y0Z0X1Y1Z1X2Y2Z2
// Ein Duplikat sollte jetzt eine EStringListError-Exception erzeugen.
except
DebugStrOut(TRUE, ' ...found Duplicate @ ' + inttostr(i));
end;
end;
end;
SL1Dreieck.Free;
SLnDreiecke.Free;
DebugStrOut(TRUE, ' DONE: Check of Duplicate.', clGreen, [fsBold]);
end;
Performancemäßig wahrscheinlich nicht der Renner, aber simpel.
|
|
Zitat
|