![]() |
Dreieck skalieren (verkleinern)
Hi,
Ich habe 3 Punkte gegeben. A,B,C, die ich mit Canvas.MoveTo/LineTo verbinde. Wie muss man jetzt die Koordinaten anpassen um das Dreieck um x Pixel zu vergrößern/verkleinern. Hab schon nachgedacht, aber ich scheine irgendwie aufm Schlauch zu stehn.... Oder es ist tatsächlich nicht so einfach. Gruß Neutral General |
Re: Dreieck skalieren (verkleinern)
Also a musst du doch einen nach unten und einen nach links verschieben. b musst du einfach nur einen nach oben verschieben und c einen nach unten und einen nach rechts. Also links = a, Oben 0 b und c = rechts. Also z.B. b - 1;
|
Re: Dreieck skalieren (verkleinern)
Ich würde es mit einer Verhältnisgleichung lösen.
|
Re: Dreieck skalieren (verkleinern)
Ich würde in ein Koordinatensystem transformieren, in dem das Streckzentrum im Ursprung liegt. Dann kannst du alle Koordinaten mit dem Streckfaktor skalieren und zurücktransformieren.
|
Re: Dreieck skalieren (verkleinern)
Zitat:
|
Re: Dreieck skalieren (verkleinern)
Zitat:
Also (wie Apollonarias gesagt hat) musst du zuerst ein Zentrum finden. Das kann der Schnittpunkt der Seitenhalbierenden sein, der der Winkelhalbierebnden oder so. Dann (die Punkte liegen hoffentlich in vektoriell vor) von jedem Punkt die Koordinaten des Mitelpunkts abziehen. Dann hast du den Mittelpunkt im Ursprung. Dann kannst du deine Punkte mit einem beliebigen Faktor skalieren, und auf die neuen Koordinaten wieder die des Mitelpunkts hinzuaddieren. Wenn es schnell gehen muss, kannst du auch den Mittelwert der drei x-Koordinaten und den Mittelwert deer drei y-Koordinaten als Mittelpunkt nehmen. Von der Wahl des Mittelpunkts hängt es ab, wie dol es in welche Richtung wächst ;) |
Re: Dreieck skalieren (verkleinern)
war wohl doch keine gute Idee...
|
Re: Dreieck skalieren (verkleinern)
Moin, Moin.
Mir ist unklar, was du mit Zitat:
Soll das Dreieck prozentual vergrößert werden? Sollen die Seitenlinien länger werden? Oder wie ist das gemeint? |
Re: Dreieck skalieren (verkleinern)
- Mittelpunkt des Dreiecks bestimmen
- mit dem Faktor der Vergrößerung den neuen Abstand zum Mittelpunkt für jede Ecke bestimmen Edit: Dieses Verfahren klappt nicht nur für Dreiecke, sondern für alle n-Ecke |
Re: Dreieck skalieren (verkleinern)
Also ein Dreieck wird ganz einfach skalliert :
Delphi-Quellcode:
Edit : Ah Tyrael Y. war doch schneller, aber mein Algo macht genau das selbe wie er beschrieben hat.Procedure Scale3eck(var p1,p2,p3:Tpoint;Prozent:Double); var mx,my:Double; dx,dy:Double; begin // erst mal den Mittelpunkt berechnen mx := ( p1.x + p2.x +p3.x)/3; my := ( p1.y + p2.y +p3.y)/3; // Mit Hilfe des Mittelpunktes kann man die Translation in den Ursprung machen dx := (p1.x - mx); dy := (p1.y - my); p1.x := round( dx * Prozent + mx) p1.y := round( dy * Prozent + my) dx := (p2.x - mx); dy := (p2.y - my); p2.x := round( dx * Prozent + mx) p2.y := round( dy * Prozent + my) dx := (p3.x - mx); dy := (p3.y - my); p3.x := round( dx * Prozent + mx) p3.y := round( dy * Prozent + my) end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:26 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-2025 by Thomas Breitkreuz