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 1 von 2  1 2      
Bjoerk

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

Polygon.Inflate

  Alt 7. Jul 2014, 11:19
Hat jemand eine Idee für eine Polygon.Inflate?

So gehts schonmal nicht

Delphi-Quellcode:
procedure TPolygon.Inflate(const Top, Bottom, Left, Right: double); // positve Werte verkleinern;
var
  I: integer;
  dX, dY, vX, vY: double;
  P: TFloatPoint;
  Line: TFLoatLine;
begin
  P := Center;
  for I := 0 to FCount - 1 do
  begin
    dX := FItems[I].X - P.X;
    dY := FItems[I].Y - P.Y;
    vX := 0;
    vY := 0;
    if (dX > 0) and (dY > 0) then
    begin
      vX := Right;
      vY := Bottom;
    end
    else
      if (dX < 0) and (dY > 0) then
      begin
        vX := -Left;
        vY := Bottom;
      end
      else
        if (dX < 0) and (dY < 0) then
        begin
          vX := -Left;
          vY := -Top;
        end
        else
          if (dX > 0) and (dY < 0) then
          begin
            vX := Right;
            vY := -Top;
          end;
    FItems[I].X := FItems[I].X + vX;
    FItems[I].Y := FItems[I].Y + vY;
  end;
end;
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.190 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Polygon.Inflate

  Alt 7. Jul 2014, 11:29
Also bei mir ist das alles schon etwas zu lange her um es noch im Kopf zu haben, aber trivial ist das sicher nicht- Vielleicht in Dreiecke zerlegen, diese einzeln aufblasen und anschließend konvexe Hülle bestimmen? Oder hast du bestimmte Einschränkungen für deine Polygone?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

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

AW: Polygon.Inflate

  Alt 7. Jul 2014, 11:32
Was soll den überhaupt passieren?

Mir fehlt irgendwie die Beschreibung, was die Methode genau tun soll.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#4

AW: Polygon.Inflate

  Alt 7. Jul 2014, 11:34
Was soll denn dein Inflate machen?
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Polygon.Inflate

  Alt 7. Jul 2014, 11:44
Inflate vergrößert oder verkleinert ein Polygon oder auch ein Rechteck an einer oder mehreren Seiten.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.687 Beiträge
 
Delphi 2007 Enterprise
 
#6

AW: Polygon.Inflate

  Alt 7. Jul 2014, 11:57
Da gibt es mehrere Ansätze. Ich würde spontan folgendes tun:
Für jeden zu verschiebenden Punkt, nehme seine 2 benachbarten Punkte und bilde die Strecke zwischen diesen. Drehe diese um 90°, und verschiebe den Punkt um einen Faktor an dieser "Quasi-Normalen". Dazu sollte die Verschiebung natürlich an einer Kopie erfolgen, sonst beeinflusst man ja die nachfolgenden Berechnungen.
Man müsste dann nur ausprobieren, ob man die Normalen normalisiert, oder lieber in ihrer Länge belässt und nur mit dem Inflate-Faktor multipliziert. Ich kann mir für beide Varianten Argumente vorstellen, würde aber naiv erstmal zum Normalisieren tendieren.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Bjoerk

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

AW: Polygon.Inflate

  Alt 7. Jul 2014, 12:05
Im Prinzip wie InflateRect. Es muß für alle Polygone gehen. Allerdings sind die Polygone hier immer geschlossen und math. positiv. Es gibt keine negativen Anteile. Brauch ich für mein Bewehrungsmodul. Da werden vier Betondeckungen (Margins) vorgeben.
Code:
       xxxxxxxxxxxxxxxxx
       x ............. x
       x ........    . x
       xxxxxxxxx .    . x
                x .    . x
                 x ....... x
                  xxxxxxxxxxxx
  Mit Zitat antworten Zitat
Jens01

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

AW: Polygon.Inflate

  Alt 7. Jul 2014, 12:17
Grober Gedanke:
Zentrum festlegen (geht das?, wenn nicht gehts sowieso nicht). Den Vektor (Zentrum-Polygonpunkt) jeweils verlängern.

Gruss Jens

P.S. Mit einer Triangulation und der Vergrößerung der einzelnen Dreiecke könnte es auch gehen?
Achtung: Bin kein Informatiker sondern komme vom Bau.

Geändert von Jens01 ( 7. Jul 2014 um 12:30 Uhr)
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
721 Beiträge
 
Delphi 12 Athens
 
#9

AW: Polygon.Inflate

  Alt 7. Jul 2014, 12:53
Ich würde einfach die Kanten parallel verschieben, und zwar je nach Lage der Kante um Top, Bottom, Left oder Right. Du musst nur eine Regel für die schrägen Kanten festlegen: gilt da die Betondeckung für oben/ unten oder seitlich? (evtl. aghängig von der Neigung der Kante). Dann neue Schnittpunkte bestimmen. Das sind dann die neuen Polygonpunkte.

Geändert von bcvs ( 7. Jul 2014 um 12:56 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

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
Antwort Antwort
Seite 1 von 2  1 2      


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 21:28 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 by Thomas Breitkreuz