Rechteck beliebig drehen

Neue Frage »

MrFlatQuader Auf diesen Beitrag antworten »
Rechteck beliebig drehen
Meine Frage:
Hallo Leute,

ich habe eine kleine Frage.

Ich möchte ein Rechteck von einem beliebigen *internen Punkt drehen.

*interner Punkt:

Ein beliebiger Drehpunkt der von seinen Koordinaten im Rechteck liegt.

Also entweder ein beliebiger Eckpunkt des Rechtecks, oder der Mittelpunkt, oder ein beliebiger anderer Punkt innerhalb des Rechtecks. (Das soll flexibel sein.)


Meine Ideen:
geg. Rechteck
- z.B. l = 100 b = 50 und Drehwinkel a = 0 bis 359 Grad
- x und y dienen nur der Koordinatenpunkt (A) - Verschiebung
(Also der Verschiebung der oberen linken Ecke des Rechtecks)
-rx und ry sollen den beliebigen (internen!) Rotationspunkt angeben.

A-----------C
| |
| |
B-----------D

So kann man ja um eine bestimmte Ecke rotieren (z.B. A)

AX = (0*Cos(Radian(a)) - 0 * Sin(Radian(a))) + x
AY = (0*Sin(Radian(a)) + 0 * Cos(Radian(a))) + y
BX = (0*Cos(Radian(a)) - b * Sin(Radian(a))) + x
BY = (0*Sin(Radian(a)) + b * Cos(Radian(a))) + y
CX = (l*Cos(Radian(a)) - 0 * Sin(Radian(a))) + x
CY = (l*Sin(Radian(a)) + 0 * Cos(Radian(a))) + y
DX = (l*Cos(Radian(a)) - b * Sin(Radian(a))) + x
DY = (l*Sin(Radian(a)) + b * Cos(Radian(a))) + y

..Und so um den Mittelpunkt:

AX = ((Cos(Radian(a))*-rx)-(Sin(Radian(a))*-ry)+rx)+x
AY = ((Sin(Radian(a))*-rx)+(Cos(Radian(a))*-ry)+ry)+y
BX = ((Cos(Radian(a))*-rx)-(Sin(Radian(a))*ry)+rx)+x
BY = ((Sin(Radian(a))*-rx)+(Cos(Radian(a))*ry)+ry)+y
CX = ((Cos(Radian(a))*rx)-(Sin(Radian(a))*-ry)+rx)+x
CY = ((Sin(Radian(a))*rx)+(Cos(Radian(a))*-ry)+ry)+y
DX = ((Cos(Radian(a))*rx)-(Sin(Radian(a))*ry)+rx)+x
DY = ((Sin(Radian(a))*rx)+(Cos(Radian(a))*ry)+ry)+y

Wie kann man möglichst flexibel um jeden beliebigen internen Punkt rotieren ?
(Also quasi auch elliptisches Rotieren)
MrFlatQuader Auf diesen Beitrag antworten »

Beim Mittelpunkt wäre rx = l/2 und ry = b/2

Wie kann man aber z.B das gegebene Rechteck vom Drehpunkt Vxy (2,2) oder Vxy(60,40), etc. ...drehen und nicht nur vom Mittelpunkt Vxy(50,25) ?

Und nicht das man mich falsch versteht:

Ich möchte nicht den Ursprung (z.B. Ecke A oder den Mittelpunkt) an den Rotationspunkt verschieben und um diesen Rotieren, sondern von der geg. Position.
sixty-four Auf diesen Beitrag antworten »

Zitat:
Original von MrFlatQuader
Beim Mittelpunkt wäre rx = l/2 und ry = b/2

Wie kann man aber z.B das gegebene Rechteck vom Drehpunkt Vxy (2,2) oder Vxy(60,40), etc. ...drehen und nicht nur vom Mittelpunkt Vxy(50,25) ?


Das machst du ganz genauso. Du legst ein Koordinatensystem so, dass der Drehpunkt der Koordinatenursprung ist, also



Danach führst du die Drehung mit einer orthogonalem Matrix der Form aus, wobei der Drehwinkel ist. Anschliessend machst du die erste Transformation wieder rückgängig.
MrFlatQuader Auf diesen Beitrag antworten »

Irgendwie bekomme ich immer nur eine Verschiebung und dann eine Drehung hin, aber ich möchte nicht verschieben.
(Das wäre so nicht richtig.)

Quasi bei z.B. bei einem Rechteck:
x,y,l,b: 0, 0, 10, 6 mit Verschiebung: 6, 2
bei 0 Grad : A = (0,0) | B = (0, 6) | C = (10,0) | D = (10,6)
bei 90 Grad: A = (7,-3) | B = (1,-3) | C = (7,7) | D = (1,7)
.....
und ohne:
bei 0 Grad: A = (0,0) | B = (0, 6) | C = (10,0) | D = (10,6)
bei 90 Grad: A = (8,-2) | B = (2, -2) | C = (8,8) | D = (2,8)
....
verwirrt
sixty-four Auf diesen Beitrag antworten »

Zitat:
Original von MrFlatQuader
Irgendwie bekomme ich immer nur eine Verschiebung und dann eine Drehung hin, aber ich möchte nicht verschieben.
(Das wäre so nicht richtig.)
(


Die Verschiebung machst du och hinterher wieder rücgängig.
Du hast einen Punkt P(2;3), den du um den Punkt M(-1;4) um den Winkel drehen willst.

1. Schritt:



2. Schritt


3. Schritt


Das machst du für jeden Eckpunkt.
MrFlatQuader Auf diesen Beitrag antworten »

Danke!

Freude
 
 
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »