Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Nehme an: Die z-Achse verläuft senkrecht in den Bildschirm hinein.
Dann gilt folgendes:
Code:
new_x = x * cos(z_winkel) - y * sin(z_winkel);
new_y = y * cos(z_winkel) - x * sin(z_winkel);
Das musst Du für jeden Punkt deines Rechtecks machen. Dabei ist zu beachten, daß der Drehpunkt in der Mitte Deines zu drehenden Objekts liegt.
Also wäre ein 60 breites und 40 hohen Rechteck durch die Punkte (-35, -20), (35, -20), (-35, 20) und (35, 20) zu repräsentieren. Dann jeden Punkt behandeln und schließlich an die Gewünschte Bildschirmposition schieben, indem du zu jedem x-Wert eine Verschiebung um einen x-Offset und zu jedem y-Wert eine Verschiebung um einen y-Offset addierst.
Dann kannst Du aber nicht mehr mit drawRect(..) zeichnen, sondern musst alle vier Eckpunkte mir drawLine(..) verbinden.
Nein die Ecken muss er nicht speichern. AffineTransform dreht das KoordinatenSystem, d.h., wenn er danach das Rechteck zeichnet erscheint es gedreht, weil das KOSY gedreht ist. Man muss einfach nach dem Zeichen wieder zurückdrehen, sonst können unschöne Sachen passieren
naja, ich würd es auch mit der Hand drehen, weil das mit dem Affinate bei mir selten funktioniert (zumindest mit Buttons und Bilder funtioniert es nicht...)
Der Kollege vor mir - meinte Bilder kann man nicht über AffineTranform (es klappt selten, schreibt er) drehen.
Jetzt wollte ich wissen wie man dann per "Hand" ein Bild dreht??
Jetzt mal in der puren Theorie: man berechnet per sin/cos die Koordinaten der Eckpunkte des rotierten Bildes im zu zeichnenden Grafikkontext. Dann benutzt man einen modifizierten Bresenham-Algorithmus o.ä., um jeden Bildpunkt innerhalb des Grafikkontexts abzutasten, der innerhalb des rotierten Rechtecks liegt. Für jeden Punkt man man dann (u.U. per Interpolation) die Farbe des zugehörigen Punktes aus dem ursprünglichen Bild auslesen und in den Grafikkontext eimkopieren.
Auf die gleiche Art kann man das Bild auch skaliert in den Grafikkontext kopieren.
Aber wie gesagt: genau das sollte die genannte Funktionalität aus Graphics2D auch machen.
Wenn ich Der Diskussion oben folgen konnte, gint es darum, das gesamte Koordinatensystem zu drehen, wodurch Operationen im Grafikkontext gedreht erscheinen. ob das auch mit Images geht, vermag ich nicht zu sagen.
Die DrawImage-Methode mit affiner Transformation jedoch muß funktionieren. Man kann sie ja auch in den entsprechenden Demos sehen.
Habe gerade mal getestet. Er dreh quasi die ganze Leinwand - dass ist nicht genau dass was ich suche.
Ein weiteres problem sehe ich gerade - soll das Bild ab dem Mttelpunkt rotieren. hmm quasi später dem Mauszeiger verfolgen
Die affine Transormation ist lediglich die mathematische Operation. Wie gesagt, kann man sie aber auch einem drawImage übergeben: dann wird nur das Bild gedreht eingefügt.
Ok soweit habe ich es jetzt - nur das Problem: wie sage ich ihm dass er nicht an der oberen ecke des bildes rotieren soll, sondern vom bild mittelpunkt