Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
Delphi 10.4 Sydney
|
AW: Punkte in ein Polygon überführen
11. Mai 2016, 20:27
Das nette an dem Link oben ist daß dieser Algo konvexe und Konkave Polygone trianguliert..
Deinen Ansatz über Delauny mit dem nachträglichen rauslöschen finde ich aber auch nicht schlecht. Solange es nur Flächen sind. Genial.
Delphi-Quellcode:
procedure TDelaunyTriangulationForm.AssignButtonClick(Sender: TObject);
var
I, A, B, C: integer;
P1, P2, P3: TFloatPoint;
Points: TFloatPoints;
begin
Points := TFloatPoints.Create;
try
Points.Add(FloatPoint(0, 0));
Points.Add(FloatPoint(3, 0));
Points.Add(FloatPoint(5, 2));
Points.Add(FloatPoint(5, 0));
Points.Add(FloatPoint(8.5, 0));
Points.Add(FloatPoint(8.5, 4));
Points.Add(FloatPoint(10, 4));
Points.Add(FloatPoint(10, 1));
Points.Add(FloatPoint(12.5, 3.5));
Points.Add(FloatPoint(11, 6));
Points.Add(FloatPoint(8.5, 6));
Points.Add(FloatPoint(5, 8));
Points.Add(FloatPoint(3, 6));
Points.Add(FloatPoint(5, 6));
Points.Add(FloatPoint(4, 4));
Points.Add(FloatPoint(1.5, 3.5));
Points.Add(FloatPoint(0, 8));
Points.Add(FloatPoint(0, 3));
Points.Add(FloatPoint(1.5, 1.5));
FMesh.Assign(Points);
FMesh.Mesh;
for I := FMesh.TrianglesCount downto 1 do
begin
A := FMesh.A[I];
B := FMesh.B[I];
C := FMesh.C[I];
P1 := FloatPoint(FMesh.X[A], FMesh.Y[A]);
P2 := FloatPoint(FMesh.X[B], FMesh.Y[B]);
P3 := FloatPoint(FMesh.X[C], FMesh.Y[C]);
if not Points.PtIn(TriangleIncircleCenter(P1, P2, P3), true) then
FMesh.DeleteTriangle(I);
end;
PaintBox.Invalidate;
finally
Points.Free;
end;
end;
|
|
Zitat
|