Forum: PC-Programmierung Polygonzug formtreu verkleinern Algorithmus


von Michael L. (Gast)


Lesenswert?

Hallo, ich habe einen geschlossenen Polygonzug (x1,y1), (x2,y2), 
(x3,y3), ..., (x1,y1). Nun ist meine Frage wie ich diesen Polygonzug 
form- und mittelpunkts-treu verkleinern kann.

Vielen Dank für eure Ideen

von Linksammler (Gast)


Lesenswert?

Du verschiebst das Koordinatensysten, Nullpunkt = Polygon-Mittelpunkt, 
skalierst alle Koordinaten, schiebst das Polygon wieder zurück.

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Wobei die schwierigere Frage ist, was der Mittelpunkt eines Polygons ist 
(oder meinst du den Schwerpunkt?)

von Pandur S. (jetztnicht)


Lesenswert?

Vektorrechnung ?

von Michael L. (Gast)


Lesenswert?

Linksammler schrieb:
> Du verschiebst das Koordinatensysten, Nullpunkt = Polygon-Mittelpunkt,
> skalierst alle Koordinaten, schiebst das Polygon wieder zurück.

Also du meinst einach das gesamte Koorinatensystem (also alle x und 
y-Werte der Punkte) mit einem Faktor skalieren ?
Und dann die "Mittelpunktskoordinate" (welche auch immer die Genau sein 
mag Mittelpunkt, Schwerpunkt, ...) des Skalierten Poygonzuges auf den 
Mittelpunkt des orginalen (größeren) Poygonzuges zu legen?

von Karl H. (kbuchegg)


Lesenswert?

Michael L. schrieb:
> Linksammler schrieb:
>> Du verschiebst das Koordinatensysten, Nullpunkt = Polygon-Mittelpunkt,
>> skalierst alle Koordinaten, schiebst das Polygon wieder zurück.
>
> Also du meinst einach das gesamte Koorinatensystem (also alle x und
> y-Werte der Punkte) mit einem Faktor skalieren ?

Nein.

Erst das Polygon so verschieben, dass dein 'Mittelpunkt' (welcher auch 
immer das sein mag) im 0-Punkt des Koordinatensystems zu liegen kommt!

Dann erst kannst du skalieren.


Das ist ein alter 'Trick' in der Grafik.
Wenn dir etwas formelmässig 'zu schwer' ist oder die Formeln ekelig 
werden, dann verschiebe die Situation so, dass dein invarianter Punkt 
(also der Punkt, der sich nicht verändern soll) im 0-Punkt des 
Koordinatensystems zu liegen kommt. Dort ist dann oft die Operation 
formelmässig viel einfacher. Nachdem du die Operation dort dann 
ausgeführt hast, schiebst du den Mittelpunkt, und mit ihm das Ergebnis 
der Operation, wieder zurück an seinen ursprünglichen Platz.

Zum Beispiel ist das Drehen um einen bestimmten Punkt formelmässig 
ekelig. Man kann sich die Formeln natürlich herleiten, aber einfacher 
ist es, ganz einfach den Drehpunkt in den 0-Punkt zu verschieben (und 
mit ihm natürlich das ganze Polygon), im 0-Punkt dann die Drehung zu 
machen (die dort formelmässig einfach durchzuführen ist) und dann das 
gedrehte Polygon wieder mit der inversen Drehpunktverschiebung 
zurückzutransformieren.

Ein anderes Beispiel ist zum Beispiel die Berechnung der Schnittpunkte, 
in denen sich 2 beliebige Kreise schneiden. DIe Formeln dafür, wenn die 
Kreise irgendwo auf der 2D Ebene liegen, sind ekelig. Einfacher wird das 
ganze, wenn man die ganze Situation (also die beiden Kreise) erst mal so 
transformiert, dass der Mittelpunkt des einen Kreises im 0-Punkt des 
Koordinatensystems liegt. Transformiert man dann die soweit 
transformierte Szenerie nochmal, indem man sie so dreht, dass der 
Mittelpunkt des 2.ten Kreises dann auch noch auf der x Achse liegt, dann 
wird die Berechnungder beiden Schnittpunkte in dieser Szenerie (fast) 
zum Kinderspiel. Hat man die beiden Schnittpunkte, dann geht man mit 
ihnen die ganze Transformationskette einfach rückwärts: erst die Drehung 
wieder aufheben, dann die Verschiebung und kriegt so die Lösung für den 
ursprünglichen Fall der beiden Kreise irgendwo in der Ebene.


Das Vorgehen ist genau das, was Mathematiker in ihren Beweisen 'ohne 
Beschränkung der Allgemeinheit' nennen. Sie führen den Beweis für einen 
besonders einfachen Fall und zeigen, wie man einen komplexen Fall immer 
auf den einfachen Fall zurückführen kann.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.