Koordinaten transformieren (Rotation)

at0m

Mitglied
Hallo zusammen!

Ich arbeite derzeit mit dem Graphiti Framework und erstelle damit einen grafischen Editor für eine bestimmte Modellierungsart. Dieses Framework verwendet Grundformen abseits von java.awt. Aber auch dort erhalten die Grundformen die folgenden Parameter: x, y, Breite, Höhe. Die Grundformen sind Rechtecke, Polygone, Ellipsen und Linien.

Diese Formen befinden sich irgenwo im Koordinatensystem und ich muss sie nun um einen vorgegebenen Winkel drehen. Ich habe mir schon AffineTransformation angesehen aber dieses arbeitet mit awt.

Welche einfache Möglichkeit gibt es, um die Formen um ihren Mittelpunkt zu drehen? Hat da einer einen Tipp für mich?
 

VfL_Freak

Top Contributor
Moin,

ene Tipp habe ich leider nicht, bezweifele aber stark, dass es sich hier um ein Anfänger-Thema handelt :shock:

Gruß
Klaus
 

lordofdonuts

Aktives Mitglied
Hallo at0m,

wie VfL_Freak bereits erwähnte, ist das hier bei Gott kein Anfänger-Thema ;)

Nichtsdestotrotz:

Dass AffineTransformation AWT benutzt, ist egal. Du brauchst lediglich ein Graphics2D-Objekt des zu transformierenden Objektes.

Beispiel:

Java:
public void rotate(Graphics g)
{
    Graphics2D g2d = (Graphics2D) g;
    double rotRad = Math.PI;
    
    AffineTransform at = g2d.getTransform();
    at.rotate(rotRad);
  
    g2d.transform(at);    
}

Sollte deine Grafik um 180° drehen. Ich kenne Graphiti nicht, falls du keinen Zugriff auf ein Graphics-Objekt hast, kannst du dir sowas selber basteln (Kurzfassung):

Beim Drehen einer Figur wird jeder Vektor einzeln transformiert. Das erfolgt über die Formel:

Code:
x[2] = x[1] * cos(alpha) - y[1] * sin(alpha)
y[2] = y[1] * cos(alpha) + x[1] * sin(alpha)

Gehen wir von den Werten x[1] = 2 und y[1] = 0 aus, wären die transformierten Koordinaten bei einer Drehung von pi/2 rad (90°) x[2] = 0 und y[2] = 2.

Nachzulesen hier:

Geometrische Transformationen
 

stg

Top Contributor
Ohne das Framework oder andere nähere Details zu kennen will ich dennoch ein bisschen was grundsätzliches sagen...

Zum einen solltest du klären, was genau du hier mit Mittelpunkt meinst. Speziell bei Polygonen hast du durchaus verschiedene sinnvolle Möglichkeiten diesen zu definieren. Dir mag hier vielleicht klar sein, was gemeint ist, aber potentielle Helfer können nur raten.

Ferner ist es oft einfacher eine Drehung zu Beschreiben, wenn das Rotationszentrum im (Koordinaten)ursprung liegt. Das ist aber meist einfach zu erreichen, indem du vor und nach der Rotation einfach eine entsprechende Translation durchführst.
 

dcc

Aktives Mitglied
Du kannst unabhängig von allem einfach Rotationsmatrizen nutzen.
Die Matrizen für die Drehungen sehen so aus.
Rotation matrix - Wikipedia, the free encyclopedia

Winkel um den gedreht werden soll in Sinus/Cosinus einsetzen, Matrix mit Vektoren (Punkten) mal nehmen, fertig. Für 2D gibt es nur eine 2x2 Matrix. Das ist jedenfalls so wenn du das komplette Bild drehen willst.

Willst du nur ein Objekt im Bild drehen, so muss der Punkt um den gedreht werden soll im Ursprung liegen, also Punkt (0|0). Die anderen Koordinaten müsste man mit verschieben - die liegen dann um (0|0) herum. Hier muss man sich ein Koordinatensystem vorstellen, der Java Zeichenbereich wäre dann im 4 Quadranten (rechts unten). Punkt 0|0 des Zeichenbereichs liegt somit dann im Ursprung des Koordinantensystems. Matrix dann auf alle verschobenen Punkte anwenden und die Verschiebung hinterher für jeden Punkt wieder rückgängig machen. Wichtig ist die Reihenfolge Matrix * Vektor, anders rum geht es nicht bzw. ist nicht definiert. Resultat sind "gedrehte Koordinaten" für das Zeichenobjekt. So funktioniert das mit GPUs auch in OpenGL / DirectX etc.

Also: Sagen wir der Mittelpunkt eines Dreiecks ist bei (3|3), den sucht man sich einfach aus bzw errechnet ihn aus den Eckpunkten. Der Müsste um -3 auf X und Y Achse verschoben werden. Die gleiche Verschiebung wendet man dann bei allen Eckpunkten des Dreiecks an, macht das Matrix Zeug und scheibt dann alles um +3|3 zurück. Mehr ist das nicht.

Schiebt man es nicht in den Ursprung, dann hat man einen "Dreharm" vom Usprung bis zum Drehpunkt. Wendet man darauf die Matrix an, dann dreht sich der "Dreharm" um den Ursprung und nimmt die Punkte mit. Das kann man sich so vorstellen wie wenn man das Ende eines Stiftes in einen Punkt legt und den Stift um den Punkt dreht. Das Zeichenobjekt am anderen Ende wandert dann im Kreis mit.

Wer Lust hat kann sich ja mal eine eigene Rotationsklasse machen :)
Matrizen und Vektoren stellt man einfach mit Arrays dar und multipliziert diese entsprechend der Matrizen Regeln. Dann muss man nur noch die Punkte übergeben, sowie den Drehpunkt und den Winkel - fertig ist die Rotations Methode :)

Hinweis: Der Kram ist relevant für ein Informatik Studium :)
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Umrechnung Koordinaten zu Winkel Java Basics - Anfänger-Themen 3
J Koordinaten per Schleife ausgeben Java Basics - Anfänger-Themen 6
L x und y Koordinaten in ein Array schreiben Java Basics - Anfänger-Themen 7
D Input/Output Input von zwei Koordinaten validieren und anschließend Werte speichern Java Basics - Anfänger-Themen 7
CptK Methoden Koordinaten relativ zur Rotation eines Bildes bestimmen Java Basics - Anfänger-Themen 8
H Koordinaten gehen falsch ! Java Basics - Anfänger-Themen 13
F Koordinaten nach 360° auf 0° setzen Java Basics - Anfänger-Themen 2
F Koordinaten umrechnen Java Basics - Anfänger-Themen 10
S Jbuttons an Koordinaten Java Basics - Anfänger-Themen 33
A Klassen Zahlen einlesen, an Klasse übergeben und Koordinaten ausgeben Java Basics - Anfänger-Themen 1
TheSorm Koordinaten von gedrehten Objekten Java Basics - Anfänger-Themen 4
J Mit Eclipse PLZ in Koordinaten umwandeln und ausgeben Java Basics - Anfänger-Themen 3
N Problem bei Koordinaten als int? Java Basics - Anfänger-Themen 6
-horn- Einfache graphische Darstellung von 3D Koordinaten für Flugbahnen? Java Basics - Anfänger-Themen 4
L Koordinaten bestimmen Java Basics - Anfänger-Themen 8
P Erste Schritte Koordinaten Zuweisung Java Basics - Anfänger-Themen 6
Dit_ Ich kenne meine Koordinaten. Wo bin ich? Java Basics - Anfänger-Themen 2
J 2d Koordinaten in Array richtig nutzen Java Basics - Anfänger-Themen 2
F Koordinaten JList darstellen Java Basics - Anfänger-Themen 4
J Bild anhand von Koordinaten zeichnen Java Basics - Anfänger-Themen 10
T Uhrzeigersinn anhand von Koordinaten Java Basics - Anfänger-Themen 7
K karthesische Koordinaten Java Basics - Anfänger-Themen 3
Luk10 Images und Koordinaten Java Basics - Anfänger-Themen 4
S Koordinaten der Maus wiedergeben Java Basics - Anfänger-Themen 6
M Problem mit Koordinaten - Objekte werden nicht an gewünschter Stelle gezeichnet Java Basics - Anfänger-Themen 6
N Koordinaten aus Area bekommen? Java Basics - Anfänger-Themen 3
Developer_X Kreiskoordinaten in Normale Koordinaten umrechnen Java Basics - Anfänger-Themen 4
W Koordinaten mit System.in.read() setzen Java Basics - Anfänger-Themen 2
M Cursor Koordinaten ändern Java Basics - Anfänger-Themen 4
K Koordinaten von Swing Komponenten Java Basics - Anfänger-Themen 2
T Koordinaten eines Vektor übergeben Java Basics - Anfänger-Themen 21
H Tooltips und Button Koordinaten Java Basics - Anfänger-Themen 2
K Koordinaten eines 2D-Feldes erstellen Java Basics - Anfänger-Themen 4
F Gibt es eine Datenstruktur für Koordinaten x, y? Java Basics - Anfänger-Themen 8
M Mit Koordinaten, JToolTip auf JPanel darstellen Java Basics - Anfänger-Themen 3
C Koordinaten von Punkten übergeben und zeichnen lassen Java Basics - Anfänger-Themen 8
T Methoden BinaryTree transformieren Aufgabe Java Basics - Anfänger-Themen 36
M transposen Vektor transformieren Java Basics - Anfänger-Themen 8
L Array Rotation Java Basics - Anfänger-Themen 4
F Rotation von Formen in Tetris Java Basics - Anfänger-Themen 4
M Bewegung + Rotation eines Objektes Java Basics - Anfänger-Themen 2
L Java3d und Rotation Java Basics - Anfänger-Themen 6
J 2D Rotation eines Vierecks Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben