Einzelnen Beitrag anzeigen

Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#11

AW: Punkte in ein Polygon überführen

  Alt 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;
  Mit Zitat antworten Zitat