AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Polygon.Inflate

Ein Thema von Bjoerk · begonnen am 7. Jul 2014 · letzter Beitrag vom 8. Jul 2014
Antwort Antwort
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.688 Beiträge
 
Delphi 12 Athens
 
#1

AW: Polygon.Inflate

  Alt 7. Jul 2014, 13:41
Stell dir eine PolygonForm vor. Jetzt platzierst du darauf ein PolygonPanel und gibst im Objectinspector für dieses Panel Marigns an.
Sorry, das ist mir immer noch zu allgemein. Soll jetzt das PolygonPanel nach Links, Rechts, Oben, Unten einen durch die Margins anzugebenden Mindestabstand zu dem drumherum liegenden PolygonForm haben.

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)?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
733 Beiträge
 
Delphi 12 Athens
 
#2

AW: Polygon.Inflate

  Alt 7. Jul 2014, 14:14
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.
  Mit Zitat antworten Zitat
Jens01

Registriert seit: 14. Apr 2009
673 Beiträge
 
#3

AW: Polygon.Inflate

  Alt 7. Jul 2014, 14:25
Zitat:
P.S.: Interessant, dass man hier noch mehr Bau-Menschen findet. Bin auch so einer.
Wir sollten einen Klub gründen.
Achtung: Bin kein Informatiker sondern komme vom Bau.
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Polygon.Inflate

  Alt 7. Jul 2014, 14:31
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.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.688 Beiträge
 
Delphi 12 Athens
 
#5

AW: Polygon.Inflate

  Alt 7. Jul 2014, 14:51
Such mal die Unit gr32_polygon, da ist genau so eine Inflate-Routine drin.
Da wird aber in alle Richtungen immer der gleiche Abstand genommen. Das ist einfach.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Polygon.Inflate

  Alt 7. Jul 2014, 15:02
Achso... dann sucht Bjoerk vielleicht Minkowski-Summen? Die Beschreibung liest sich zumindest so.

Geändert von Namenloser ( 7. Jul 2014 um 15:15 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#7

AW: Polygon.Inflate

  Alt 7. Jul 2014, 15:34
Also wenn ich das richtig verstehe, geht es hier um eine Skalierungsmethode, die nicht nur einfach die X/Y achsen der punkte basierend zum Mittelpunkt scaliert, sondern auch entscheiden lässt, ob man auf der X achse nur die Punkte skalieren will, die relativ zum Mittelpunkt im Positiven oder Negativen Teilbereich einer Achse liegen?

In diesem Fall würde ich zuerst den Mittelpunkt und die BB(BoundingBox) berechnen und danach selbige in Quadranten aufteilen. Du hast jetzt 4 Bereiche, die bestimmen von welchen der 4 Parametern ein Punkt beeinflusst wird.

Liegt ein Punkt im oberen linken Quadranten wird er beeinflusst von
Y+ Achse(nteil?)
x- Achse

Was Top/Left entspricht.

Ein punkt der Direkt auf der X-Achse liegt(Egal ob X+ oder X- Teilbereich) kann nicht von der Y-Achse beeinflusst werden. In diesem Fall zählen nur Left oder Right Werte. Dies scheint z.B. im ersten Eintrag gar nicht berücksichtigt zu werden. Das selbe gilt natürlich auch umgekehrt für die Y-Achse
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz