Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

24.03.2011, 10:25

Inneres eines Polygons neu erzeugen

Hi,

ich benötige mal ein paar Denkanstöße, wie man solwas realisieren könnte:

Ich habe ein geschlossenes Polygon. Nun möchte ich im Inneren dieses Polygons ein weiteres, kleines Polygon zeichnen, dessen Linien immer einen festen Abstand zu den Linien des äußeren Polygons haben. Da das Polygon eine Beliebige Form haben kann (also auch "Blasen" nach innen oder nach außen) fällt die Methode, einfach eine verkleinerte Fassung des Polygons da reinzulegen leider komplett weg.

Wie könnte man sowas sonst realisieren?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

24.03.2011, 10:30

Alle Kanten entlang ihrer Senkrechten nach innen verschieben und die Schnittpunkte neu ausrechnen. Dabei können natürlich manche Kanten ganz wegfallen, egal ob das Polygon konvex oder konkav ist.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

3

24.03.2011, 11:35

Hm, da sehe ich zwei Probleme. Das kleinere: wie finde ich raus, wo innen ist?

Das größere: welches sind die richtigen Schnittpunkte? Angenommen das Polygon sieht so aus:


(Link)


Wenn ich die Schnittpunke der Kanten nehme, die vorher benachbart waren, dann komme ich in obigem Beispiel auf Schnittpunkt 2. Der ist allerdings komplett falsch, da in diesem Beispiel oben ein zusätzliches Polygon entsteht, welches durch Schnittpunk 1 abgeschlossen wird. In diesem Beispiel kann man das noch an Hand des Abstandes zur nächsten Seite erkennen, aber das muss ja 1. nicht immer so passen und sagt 2. deswegen auch noch nicht aus, welche der verbleibenden Schnittpunkte der richtige wäre.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

24.03.2011, 11:52

Tja, dieses Problem musst Du offensichtlich lösen. Aber da wirst Du nicht rundrum kommen, wenn Du Die Kanten nach innen verschieben willst.
Allerdings sagte ich nicht, dass Du die Schnittepunkte der ehemals benachbarten Kanten berechnen sollst, sondern nur die der verschobenen Kanten ;)
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

24.03.2011, 12:03

Ich denk du kannst mal alle Schnittpunkte verwerfen die näher an einer Kante liegen als dein Offset...

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

24.03.2011, 12:06

Ja, das sollte richtig sein. Allerdings numerische Ungenauigkeit mit einkalkulieren ;)
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

24.03.2011, 12:25

Bzw. wenn ich nochmal kurz drüber nachdenk geht vermutlich einfach folgendes:
  1. Alle Vertices verschieben
  2. Polygon im (oder gegen den) Uhrzeigersinn durchlaufen und für jede Kante den Schnittpunkt mit jeder anderen Kante bestimmen. Liegt ein Schnittpunkt näher als der zweite Vertex der Kante dann weißt du dass a) das Polygon dort in zwei Polygone zerfällt und b) der Schnittpunkt der am nähesten am ersten Vertex liegt ist der entsprechende Vertex

Ansonsten könntest du auch testen ob sich nach dem Verschieben der Vertices die Richtung einer Kante/Diagonale umgekehrt hat. Wenn ja: Dort zerfällt das Polygon in zwei.

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »dot« (24.03.2011, 12:38)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

24.03.2011, 12:39

b) der Schnittpunkt der am nähesten am ersten Vertex liegt ist der entsprechende Vertex

Sicher? Ich glaube, ich kann Dir einen Fall konstruieren, wo das nicht stimmt.

Edit: Nein, meine Idee stimmt nicht, der Punkt wäre dann zu nahe am Ausgangs-Polygon dran und würde verworfen. Es sollte also stimmen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

9

28.03.2011, 10:03

Ganz nebenbei stoße ich da auf ein anderes Problem: wie finge ich raus, wo bei einem Polygon innen ist? An der Zeichenrichtung kann ich es nicht feststellen, da ein User dassowohl im als aug gegen den Uhrzeigersinn gezeichnet haben kann. Und einfach immer nur auf den Mittelpunkt hin verschieben geht auch nicht, da der - bei einer ungünstigen Form - auch außerhalb liegen kann.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

28.03.2011, 11:00

Am einfachsten definierst du eben wo Innen ist, z.B. links von der Kante. Ob ein Punkt links oder rechts liegt kannst du z.B. über die Richtung des Kreuzproduktes feststellen. Das impliziert natürlich dass nun alle Kanten im bzw. gegen den Uhrzeigersinn gerichtet sein müssen.

Werbeanzeige