Wo ist denn dein Problem? Ich habe es auch noch nicht gemacht, aber es sieht doch nicht so schwer aus.
Delphi-Quellcode:
Delaunay := TDelaunay.Create;
Delaunay.Initialize();
For P in Points do Delaunay.Add(P);
Initialize ist einfach und was das 'Add' macht, steht da doch auch.
Edit: Ok, ein wenig hochnäsig. Mach mal 'stepwise refinement' bzw. top down programming(*)
also
Delphi-Quellcode:
Procedure TDelaunay.Add (P : TPoint);
var
i : Integer;
tmp : TTriangle;
begin
for i:=0
to Triangles.Length-1
do
if Triangles[i].
Contains(P)
then begin
tmp := Triangles[i];
Triangles.Remove(i);
Triangles.Add(TTriangle.create(tmp.a,p,tmp.b));
Triangles.Add(TTriangle.create(tmp.b,p,tmp.c));
Triangles.Add(TTriangle.create(tmp.c,p,tmp.a));
CheckBoundariesWithFlipAlgorithm;
exit;
end;
raise exception.Create('
Point not in triangle');
end;
Ok. Bleibt noch 'CheckBoundariesWithFlipAlgorithm'. Der geht einfach alle Dreiecke durch und prüft die Bedingungen mit diesem Umkreis. Oder nur für die drei Dreiecke, die dazugekommen sind, wäre vielleicht sinniger.
(*) Alles auskodieren, was einem klar ist und alles, was noch nicht klar ist, als Methode aufrufen. Danach die neuen Methoden nach dem gleichen Schema ausformulieren. Klappt meistens, ist gut lesbar und fast schon ein wenig 'clean code'.