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 4 von 5   « Erste     234 5      
Bjoerk

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

AW: Polygon.Inflate

  Alt 7. Jul 2014, 19:21
Das Allerdings kann hier nicht passieren weil der Bewehrungskorb in den Betonquerschnitt reinpassen muß (sonst wird der Statiker auf der Baustelle vom Bauleiter verprügelt). Allerdings, und das hat Jens auch nicht gelöst, woher weiß ein Punkt daß er unten rechts ist.
Beispiel T: Bezüglich des SchwerpunktsKOO ist P2 oben rechts.

Code:
0*************************1
*                         *
7********6       3********2
         *       *
         *       *
         *       *
         *   *   *
         *       *
         *       *
         *       *
         5*******4

Geändert von Bjoerk ( 7. Jul 2014 um 19:24 Uhr)
  Mit Zitat antworten Zitat
Namenloser

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

AW: Polygon.Inflate

  Alt 7. Jul 2014, 19:36
Ich würde nicht von Punkten, sondern von Strecken ausgehen. Denen kann man einen Winkel zuordnen.

Was du immer noch nicht beantwortet hast: Was ist jetzt mit Polygonen, die nicht rechtwinklig sind?

Ich geb dir jetzt meinetwegen die Margins (Links: 1, Oben: 2, Rechts: 3, Unten: 4) und eine diagonale Strecke im 45°-Winkel:
Code:
    /
   /
  /
 /
/
Welchen Abstand hat die denn nun?
  Mit Zitat antworten Zitat
Bjoerk

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

AW: Polygon.Inflate

  Alt 7. Jul 2014, 20:07
Das hab ich mal wieder nicht verstanden?
Ich lass es jetzt erst mal so. Der Benutzer kann ja dann mehrere Margins in das Polygon legen. Vermutlich ist es auch gar nicht möglich so wie ich wollte. Bei AutoCad muß man beim Ausrunden ja auch einen Bezugspunkt angeben.
Delphi-Quellcode:
procedure TPolygon.Inflate(const Value: double);
var
  I, J: integer;
  C: TFloatPoint;
  Line: TFloatLine;
  Lines: TFloatLines;
begin
  Lines := TFloatLines.Create;
  try
    for I := 0 to FCount - 1 do
    begin
      J := Next(I);
      Line.P1 := FItems[I];
      Line.P2 := FItems[J];
      Line.ShiftUV(0, Value);
      Lines.Add(Line);
    end;
    Clear;
    for I := 0 to Lines.Count - 1 do
    begin
      J := Lines.Next(I);
      if Lines.Item[I].IntersectLines(Lines.Item[J], C) then
        Add(C);
    end;
  finally
    Lines.Free;
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#34

AW: Polygon.Inflate

  Alt 7. Jul 2014, 20:17
Eventuell ist der Clipper interessant
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  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
 
#35

AW: Polygon.Inflate

  Alt 7. Jul 2014, 23:04
Ich würde nicht von Punkten, sondern von Strecken ausgehen. Denen kann man einen Winkel zuordnen.

Was du immer noch nicht beantwortet hast: Was ist jetzt mit Polygonen, die nicht rechtwinklig sind?

Ich geb dir jetzt meinetwegen die Margins (Links: 1, Oben: 2, Rechts: 3, Unten: 4) und eine diagonale Strecke im 45°-Winkel:
Code:
    /
   /
  /
 /
/
Welchen Abstand hat die denn nun?
Ich bekomme so langsam den Eindruck, daß hier nur Polygone mit achs-parallelen Segmenten vorkommen. Offenbar weiß er daher nicht, wovon wir überhaupt reden.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Jens01

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

AW: Polygon.Inflate

  Alt 7. Jul 2014, 23:11
Ich bekomme so langsam den Eindruck, daß hier nur Polygone mit achs-parallelen Segmenten vorkommen. Offenbar weiß er daher nicht, wovon wir überhaupt reden.
Nee, glaub ich nicht. Die Betonleute bauen oft auch schiefe Sachen.
Achtung: Bin kein Informatiker sondern komme vom Bau.
  Mit Zitat antworten Zitat
Bjoerk

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

AW: Polygon.Inflate

  Alt 8. Jul 2014, 06:31
"Er" weiß jetzt langsam wovon "Wir" reden. Was man zum Beispiel machen könnte wäre zuerst (auf einer Kopie) das 08/15-Inflate von #33 durchführen und dann schauen wohin sich der Punkt bewegt hat. Falls nach rechts dann MarignLeft verwenden, falls nach unten dann MarignTop verwenden usw.. Diese Margins verstehen sich für die Polygonlinien (hier) immer als ShiftV. "Er" weiß jetzt nämlich auch daß eine Normalverschiebung U einer Polygonlinie (hier) nichts bringt weil die durch IntersectLines überschrieben wird.
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
703 Beiträge
 
Delphi 12 Athens
 
#38

AW: Polygon.Inflate

  Alt 8. Jul 2014, 08:26
Es gäbe auch noch die Möglichkeit, anhand der Winkel zu unterscheiden, ob eine Kante unten oder oben ist:
Angenommen, in deinem Beispiel aus #31 hat die Linie 4-5 die Neigung 0°, Wenn man jetzt im Uhrzeigersinn die Winkel addiert, hat die Linie 0-1 180° und 2-3 wieder 0°.

Also könnte man sagen: alles was annähernd 180° ist, bekommt die Margin für oben und was annähernd 0° ist, Margin für unten. Ab welcher Neigung es dann in die seitlichen Margins übergeht, musst du selbst entscheiden.
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#39

AW: Polygon.Inflate

  Alt 8. Jul 2014, 08:34
also die zentrische Streckung ist eigentlich genau das was du brauchst nur leicht abgewandelt.

Ich gehe davon aus, dass dein Ausgangspolygon das betonierte Resultat sein soll. Die Bewehrung muss zur Außenseite jeweils ein Mindestmaß an Betondeckung aufweisen. Du brauchst nun die Maße der Bewehrung.

Wenn du bei der zentrischen Streckung die Eckpunkte zum Zentrum verschiebst und zwar genau so weit bis der Soll-Abstand (Betondeckung) der Strecken zum Ausgangspolygon erreicht ist.

Richtig?


Zwei benachbarte Eckpunkte solange nach Z verschieben, bis die Strecke in der Ebenenansicht den gewollten Abstand erreicht hat, dann nächsten Punkt usw...
Miniaturansicht angehängter Grafiken
polygon.jpg  

Geändert von ibp ( 8. Jul 2014 um 08:56 Uhr) Grund: Ergänzung
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

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

AW: Polygon.Inflate

  Alt 8. Jul 2014, 09:12
Es könnte aber auch sein, das der Threadersteller die Normale eines Punktes berechnen muss(Was der Durchschnitt der beiden Normalen der beiden abgehenden strecken ist) und die Punkte dahingehend skaliert?
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 5   « Erste     234 5      


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 14:11 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