AW: Polygon.Inflate
Aus der hohlen Hand würde mir einfallen: umgebendes Rechteck ermitteln und das prozentuale Verhältnis jedes einzelnen Punktes relativ zur linken oberen Ecke ermitteln. Dann das umgebende Rechteck vergrößern/verkleinern und die neuen Punkt-Positionen anhand des gemerkten Verhältnisses neu berechnen. Das jeweilige Original-Verhältnis sollte man dabei aber im Speicher behalten, sonst wird das nach ein paar Mal vergrößern/verkleinern wahrscheinlich zu ungenau. Vielleicht taugt das aber auch alles nix, so dolle bin ich nicht in Geometrie :stupid:
|
AW: Polygon.Inflate
|
AW: Polygon.Inflate
Zitat:
Delphi-Quellcode:
Bin noch am rumprobieren. Melde mich nochmal.
procedure TPolygon.CenterZoom(const Faktor: double);
var I: integer; P1, P2: TFloatPoint; begin P1 := Center; for I := 0 to FCount - 1 do begin FItems[I].X := FItems[I].X * Faktor; FItems[I].Y := FItems[I].Y * Faktor; end; P2 := Center; for I := 0 to FCount - 1 do begin FItems[I].X := FItems[I].X - (P2.X - P1.X); FItems[I].Y := FItems[I].Y - (P2.Y - P1.Y); end; end; |
AW: Polygon.Inflate
Zitat:
|
AW: Polygon.Inflate
Zitat:
Kannst du das vielleicht mal aufmalen? Betrachtest du eventuell nur eine bestimmte Klasse von Polygonen? Wie wäre ein Fall wie PolygonForm (außen) = Dreieck mit Spitze oben, PolygonPanel (innen) = Dreieck mit Spitze unten zu behandeln? Wie ich schon sagte, intuitiv kann ich mir das vorstellen, wenn um das Polygon ein umfassendes Rechteck mit den vier Margins gelegt werden soll. Dann kann man aber auch gleich das Rechteck so definieren, daß die Margins zu Null werden. Das entspricht wiederum der Darstellung des Polygons in einem rechteckigen Viewport. Man muss nur festlegen, was mit dem Polygon passieren soll, wenn es nicht in dieses Viewport passt. Soll es skaliert werden? Soll es soweit verändert werden, daß alle Punkte drin liegen? Soll es abgeschnitten werden (Clipping)? |
AW: Polygon.Inflate
Die Grundfrage ist doch die:
Beschreiben deine 4 Margins Kantenverschiebungen senkrecht zu den bisherigen Polygon-Kanten oder senkrecht zu den Kanten eines umhüllenden Rechtecks? Wenn es sich um Betondeckungen handelt, sind die wohl senkrecht zu den Polygonkanten gemeint, sonst macht es ja keinen Sinn. Du willst wahrscheinlich die Vorgaben der DIN, die nur für oben/unten/seitlich angegeben sind, für polygonale Querschnitte umsetzen. Was man da noch braucht, ist bei schrägen Kanten eine Unterscheidung, welches Margin denn nun gilt, Abhängig von der Neigung und der Lage (z.B -45° bis +45°: Margin für oben, +45° bis 135°: Margin für rechts etc.) Um dieses Margin wird die Kante dann parallel verschoben. P.S.: Interessant, dass man hier noch mehr Bau-Menschen findet. Bin auch so einer. |
AW: Polygon.Inflate
Zitat:
|
AW: Polygon.Inflate
Bloß nicht in Dreiecke zerlegen! Das ist ein weitaus komplizierteres Problem.
Such mal die Unit gr32_polygon, da ist genau so eine Inflate-Routine drin. |
AW: Polygon.Inflate
Zitat:
|
AW: Polygon.Inflate
Achso... dann sucht Bjoerk vielleicht Minkowski-Summen? Die Beschreibung liest sich zumindest so.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz