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
Seite 2 von 5     12 34     Letzte »    
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#11

AW: Polygon.Inflate

  Alt 7. Jul 2014, 13:38
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
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Jens01

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

AW: Polygon.Inflate

  Alt 7. Jul 2014, 13:49
Sowas?
Achtung: Bin kein Informatiker sondern komme vom Bau.

Geändert von Jens01 ( 7. Jul 2014 um 13:51 Uhr)
  Mit Zitat antworten Zitat
Bjoerk

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

AW: Polygon.Inflate

  Alt 7. Jul 2014, 13:59
Leider nicht. Das ist wohl das:
Delphi-Quellcode:
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;
Bin noch am rumprobieren. Melde mich nochmal.
  Mit Zitat antworten Zitat
Bjoerk

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

AW: Polygon.Inflate

  Alt 7. Jul 2014, 14:20
Im Prinzip wie InflateRect.
...
Da werden vier Betondeckungen (Margins) vorgeben.
InflateRect verschiebt die Kanten um einen bestimmten Wert nach außen bzw. innen (bei negativem Wert). Dabei können zwei separate Abstände für die waagerechten und senkrechten Kanten übergeben werden. In deinem Fall sind das aber wohl vier separate Werte (Margins), wobei mir nicht klar ist, wie sich diese auf nicht achs-parallele Kanten auswirken sollen.

Kannst du eine Regel formulieren, was mit jeder Polygonkante passieren soll? Die Analogie zu InflateRect erschließt sich mir hier noch nicht vollständig oder ist zumindest lückenhaft. Ich kann eigentlich nur dann intuitiv etwas ableiten, wenn man von dem Polygon genau die Punkte und Kanten betrachtet, die auf dem umschließenden Rechteck liegen.
Stell dir eine PolygonForm vor. Jetzt platzierst du darauf ein PolygonPanel und gibst im Objectinspector für dieses Panel Marigns an.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Polygon.Inflate

  Alt 7. Jul 2014, 14: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
703 Beiträge
 
Delphi 12 Athens
 
#16

AW: Polygon.Inflate

  Alt 7. Jul 2014, 15: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
 
#17

AW: Polygon.Inflate

  Alt 7. Jul 2014, 15: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
 
#18

AW: Polygon.Inflate

  Alt 7. Jul 2014, 15: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.453 Beiträge
 
Delphi 12 Athens
 
#19

AW: Polygon.Inflate

  Alt 7. Jul 2014, 15: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
 
#20

AW: Polygon.Inflate

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

Geändert von Namenloser ( 7. Jul 2014 um 16:15 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 5     12 34     Letzte »    


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 01:37 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