Rechteck rotiert um Mittelpunkt, aber wo...
-
Hallo.
Wenn ich einem Rechteck 4 feste Punkte gebe
A-------D | M | B-------C
und dieses jetzt durch seinen Mittelpunkt rotiere, dann bekomme ich soetwas
(ohne schrägen jetzt hier darstellen zu können)D----C | | | M | | | A----B
C-------B | M | D-------A
B----A | | | M | | | C----D
Ich habe jetzt Left, Top, Width und Height, sowie Angle zur Verfügung.
Left und Top ist immer an A gebunden und von dort wird über den Winkel per Height und Width das Rechteck konstruiert.
Left ist also nicht die äusserste linke Seite! Und genau das ist mein Problem.
Wenn ich jetzt beim echten Rechteck sage, das ich es an Position 100 stellen möchte und es ist 180° gedreht dann
Bei 180°*Pos=100 C-------B | M | D-------A
Bei 0°
*Pos=100 A-------D | M | B-------C
Der * markiert Pos100
Ich benötige soetwas wie ein imaginäres Rechteck über meinem Rechteck.
Damit ich es positionieren kann und dessen tatsächliche Breite und Höhe kenne.top
left-----------width[right]
| /\ |
| / \ |
| / \ |
|/ \ |
|\ \|
| \ /|
| \ / |
| \ / |
| \/ |
-----------
height[bottom]Ich glaube irgendwie nicht das jemand verstanden hat was ich hier wirres erzählt habe *heul*
50% wären aber schonmal gelöst. Kann mir wer bei den Anderen 50% helfen?left =
top =
width = B* = B |cos φ| + H |sin φ| (danke pumuckl)
height = H* = B |sin φ| + H |cos φ|
-
top left-----------width[right] | /\ | | / \ | | / \ | |/ \ | |\ \| | \ /| | \ / | | \ / | | \/ | ----------- height[bottom]
sorry ^^"
-
Nimm doch die Koordinaten und multiplizier sie mit einer 3x3 matrix dann hast du sowohl translationen als auch rotationen abgedeckt. Durch die Koordianten kennst du dann auch die physikalischen Werte der Eckpunkte
-
Ich werd mal versuchen am Montag ein Fachbuch zu bekommen.
So aus der Luft kann ich damit leider nichts anfangen
-
es reichen auch 2-dimensionale Matrizen, da wir uns im 2dimensionalen raum bewegen.
Nimm einmal an, du zeichnest dein Rechteck in ein Koordinatensystem wie in der Schule üblich mit x-koordinanten nach rechts und y-koordinaten nach oben.
Wenn du jetzt einen Punkt um den nullpunkt des Systems rotierst (gegen den uhrzeigersinn), muss du seine koordinaten einfach mit der Matrix/ cos [e]phi[/e] -sin [e]phi[/e] \ | | \ sin [e]phi[/e] cos [e]phi[/e] /
Multiplizieren, wobei φ der Winkel ist, um den du drehst.
Aus dem Punkt (x,y) wird also der Punkt (x',y') mit x'= x cos φ - y sin φ und y' = x sin φ + y cos φgenauso könntest du z.B. dein rechteck um den Koordinatenursprung rotieren.
Eine Translation wird durchgeführt, indem du auf jeden vektor den Translationsvektor (tx, ty) addierst. Eine Streckung am Nullpunkt ("zoom") schließlich erhälst du, indem du deine Koordinaten mit einem Faktor muliplizierst, der für beide koordinaten gleich ist.
-
Danke pumuckl, aber irgendwie will nicht das rauskommen was meine Zeichnung sagt Wahrscheinlich kann hier wer nur den Taschenrechner nicht bedienen
Trotzdem nochmal als Skizze was ich suche.http://www.piccube.de/uploads/PicCube_ac02cc2fa2.jpg man kann hier keine Bilder darstellen -.-"
Das blaue Rechteck habe ich gegeben:
Rechteck { float left; float top; float width; float height; float winkel; }
Dabei ist zu beachten das Rechteck.left und Rechteck.top jede Position auf dem Rotationskreis annehemen können, wie bereits oben beschrieben.
**
Was ich suche sind die Werte, um das rosa Rechteck konstruieren zu können.**Rechteck.left und Rechteck.top sind bei 0° links oben.
Ist das wirklich die Lösung?
Rosa.left = x cos φ - y sin φ
Rosa.top = x sin φ + y cos φ
Rosa.width = B* = B |cos φ| + H |sin φ|
Rosa.height = H* = B |sin φ| + H |cos φ|??
So ich versuch das nochmal zu zeichnen und nachzurechnen während ich auf Antwort hoffe
-
Die Formel für Breite und Höhe scheinen doch nicht wirklich zu stimmen oder sind extrem ungenau.
Nimmt man die Grafik als Vorlage müsste für Breite und Höhe des rosa Rechtecks 9 rauskommen. Rauskommen tut aber 9.19 und das ist einfach viel zu weit weg.
-
Ne stimmt doch. Das waren Messfehler. Wenn ich mir Breite und Höhe per Phytagoras ausrechne und mit den Werten rechne bekomme ich 8.9999 raus und das ist 9 ^^
Aber x und y peil ich noch net
-
Am einfachsten wäre es wenn man den Mittelpunkt kennen würde.
Weiss wer wie man da rankommt? Nein mit left + breite/2 geht es nicht!
Schliesslich ist left nicht immer der äusserste Punkt (siehe Grafiklink, obere Spitze)
-
Hilft das?:
X=CosAngle * Pt.x + SinAngle * Pt.y + MX * (1 - CosAngle) - SinAngle * MY;
Y=CosAngle * Pt.y - SinAngle * Pt.x + MY * (1 - CosAngle) + SinAngle * MX;So mach ich ne Koordinatenrotation in einem Pixelbild (Rechteck).
eine Ecke hat 0,0, die andere Breite,HoeheXM,YM ist ein Mittelpunkt (bei mir die Diagonale Mitte)
CosAngle,SinAngle sind die berechneten Winkelfunktionen des Drehwinkels.