Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Bjoerk,
15. Mai 2016
So. Jetzt. Ja. Hab bei Bourke auf der Hompage mal gesucht. Und siehe da, dort steht völlig klar und eindeutig, wie er vorgeht.
procedure TPBDelaunyTriangulation.Triangulate;
var
Triangle, Node, I: integer;
Left, Right: TPBIntegers; // Edges;
begin
// input : vertex list;
// output : triangle list;
// initialize the triangle list;
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Bjoerk,
14. Mai 2016
Japp. Wie gesagt, ich hab den Code völlig umgeschrieben. Ich häng ihn mal an, weil: Da du einen eigenen Delauny geschrieben hast, bist du wohl einer der wenigen Menschen auf diesem Planeten, der mir eventuell sagen könnte, was Bourke in seiner Triangulate treibt? Warum der Umweg über die Ränder und wieso die beiden Hilfsvariablen (hab sie InCircleCalculated und TriangleComplete umbenannt). Nur...
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Bjoerk,
12. Mai 2016
Mit dem Bourke hab ich mich auch länger beschäftigt. Der Bourke produziert aber keine Linien sondern echte Dreiecke. Der veröffentlichte Delphi Code ist allerdings die totale Katastrophe. Man muß ihn komplett umschreiben. Bourke macht ja den Trick mit dem Supertriangle und löscht die Dreiecke zu dem am Schluß wieder raus, (genau wie wir mit den Dreiecken, die nicht im Polygon liegen). Anyway..
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Bjoerk,
12. Mai 2016
Jens, du hast völlig recht. Das geht mit dem Delauny auch für meine Zwecke. :)
procedure TPBDelaunyTriangulation.PolygonsMesh(Value: TAreas; const dX, dY: double); // PB = Paul Bourke;
var
Line, Horz, Vert: TFloatLine;
I, J, Row, Col: integer;
P: TFloatPoint;
MaxX, MinX, MaxY, MinY: double;
AxisHorz, AxisVert: TFloats;
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Bjoerk,
11. Mai 2016
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. :thumb:
procedure TDelaunyTriangulationForm.AssignButtonClick(Sender: TObject);
var
I, A, B, C: integer;
P1, P2, P3: TFloatPoint;
Points: TFloatPoints;
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Bjoerk,
11. Mai 2016
Fein. Sieht gut aus. Ich hab hier jedoch i.d.R. mehrere Polygone übereinder und/oder die Polygone können sich überlappen. Außerdem kann ein Polygon rechts- oder linksdrehend sein und aus nur einem oder 2 Punkten bestehen (Pfosten auf Decke, Wand auf Decke, Punktlager, Unterzug ect..). Diese Punkte, Linien und Ränder müssen sich im FE Raster wiederfinden. Und der User gibt eine max. Elementgröße...
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Bjoerk,
11. Mai 2016
Ja, das wird wohl das gleiche sein. Jedenfalls immer drei aufeinander folgende Punkte und nicht die Summe aller Punkte. Man muß auf >= 0 prüfen (CompareValue(.., 0) >= 0) und statt J mit Next(J) natürlich I und J tauschen. War wohl gestern Abend schon ziemlich fertig. Dieser Mesh Kram macht einen sowieso völlig fertig. Ich denke mal, ich habs jetzt aber. Die Triangulation einer Grid.Cell mache...
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Bjoerk,
10. Mai 2016
Hi Bud, Summe Det kann man hier nicht anwenden. Hatten wir das nicht schonmal?
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Bjoerk,
10. Mai 2016
Ich müßte für eine Triangulation Punkte in ein Polygon überführen. Der Algorithmus trianguliert jeweils die Punkte in einer Grid.Cell (Siehe Anlage). Der Algo benötigt die Punkte jeweils als rechtsdrehendes xor linksdrehendes Polygon. Konvex oder Konkav ist (hier) egal. Deshalb wollte ich Sortieren. Es sind in der Regel nur so 3 bis 6 Punkte je Cell. Das klappt aber nicht (immer). Überlegt hatte...