Rotation einer Grafik in swing

Maxim6394

Bekanntes Mitglied
ich hab die position einer grafik, die sich auch ändert und ich hab die position des cursors im swing fenster.
jetzt will ich diese grafik rotieren, dass sie immer zur position des cursors zeigt. ich glaub das hat mehr mit mathe zu tun aber vieleicht gibts da ein par tricks. hat jemand eine idee?
 

Michael...

Top Contributor
grundsätzlich müsste man dazu die Graphik selbst zeichnen. Ist das Vorgehen dazu bekannt? von JComponent erben, deren paintComponent(Graphics g) überschreiben...
Dann kann man per MouseMotionListener an der Komponente die Maus "verfolgen",den Winkel zwischen Objekt und Mausposition berechnen und die Graphik entsprechend ausrichten.

Ähnlich (hier wird erst beim MouseKlick ausgerichtet und gezeichnet) aber eventuell zur Erläuterung zu komplex:
http://www.java-forum.org/java-basics-anfaenger-themen/123667-blitze-linien-zeichnen.html#post800160
 

Maxim6394

Bekanntes Mitglied

Maxim6394

Bekanntes Mitglied
der code ist zu unübersichtlich und durcheinander um ihn komplett wegen diesem einen problem zu posten, aber hier ist das wichtigste:

Code:
public void paint(Graphics g)
{
	super.paint(g);
	
	int gk=p.getX()-P.x;
	int ak=p.getY()-P.y;
	double tan=(double)ak/(double)gk; 

	g.drawRect(P.x,P.y,5,5);
	g.drawLine(p.getX(),p.getY(),P.x,P.y);


...


 pRotation=(float)Math.pow(tan,-1);
    g2d2.rotate(Math.toRadians(pRotation),p.getX()+p.getBounds().width/2,p.getY()+p.getBounds().height/2);
	g2d2.drawImage(p.getImg(),p.getX(),p.getY(),null);
}

das drawrect und drawline dient nur zur hilfe und hat sonst keine bedeutung. P ist der testpunkt, zu dem sich das bild drehen soll. p ist das spielerobjekt.

die linie zeigt immer richtig vom bild zu dem testpunkt, die rotation sieht aber absolut falsch aus.
 

Michael...

Top Contributor
die linie zeigt immer richtig vom bild zu dem testpunkt, die rotation sieht aber absolut falsch aus.
Die Linie wird ja auch direkt zum Punkt gezeichnet, während der Rotationswinkel falsch berechnet wird ==> einfach mal per System.out.println(...) ausgeben lassen.

Hinweis der Arkustangens ist nicht gleich 1/Tangens bzw. Tangens^-1 auch wenn er manchmal tan^-1 geschrieben wird.
 

Maxim6394

Bekanntes Mitglied
ich versteh immernoch nicht wie ich diesen winkel berechnen soll. ich gebe die ganze zeit alles aus was da berechnet wird aber es ist nie das richtige. hat keiner ne lösung?
in mathe ging das früher so dass man nur gekenkathete/ankathete rechnen musste und um aus dem tangens wert wieder den winkel zu kriegen tan^-1 benutzen.
ich teile ja gegenkathete durch ankathete um den tangens zu kriegen, trotzdem kommt mit atan() immer nur irgendwas falsches raus.

das bild rotiert niemals richtig dass es immer zu diesem einen punkt zeigt. es rotiert zum beispiel duzende male wenn ich es nur nach unten bewege, aber es sollte überhaupt nicht rotieren wenn es genau unter dem punkt ist.
 
Zuletzt bearbeitet:

Michael...

Top Contributor
ich versteh immernoch nicht wie ich diesen winkel berechnen soll.
Marco hat doch die einfachste Art gepostet: Math.atan2(int y, int x). Dieser Methode muss man nur die richtigen Werte übergeben und beachten das 0° bei 12 Uhr ist und der Winkel sich im Uhrzeigersinn vergrößert.
in mathe ging das früher so dass man nur gekenkathete/ankathete rechnen musste und um aus dem tangens wert wieder den winkel zu kriegen tan^-1 benutzen.
Dann ist Dir hoffentlich auch noch in Erinnerung geblieben, dass abhängig davon in welchem Quadranten man sich befindet der erhaltene Wert korrigiert translatiert werden muss.

Nur um sicher zu gehen: Wie erwähnt ist das Kürzel tan^-1 nicht das selbe wie Tangenswert^-1, daher findet ich diese Schreibweise nicht gerade schön.
 

Maxim6394

Bekanntes Mitglied
ich verstehe aber nicht welcher x und y wert übergeben werden soll. man braucht doch zum berechnen 2 punkte, also 2 mal x und 2 mal y.
 

Maxim6394

Bekanntes Mitglied
und wie soll ich das machen? das ding nimmt doch scheinbar nur 2 parameter an, wie soll ich also den winkel zu einem anderen punkt als 0|0 berechnen lassen?

soll das so aussehen?
Code:
 tan=Math.atan2(P.x-p.getX(), P.y-p.getY());

P ist der bezugspunkt zu dem sich die grafik drehen soll, p ist die position der grafik.

ich habs jetzt endlich. die rotation war anfangs immernoch nicht korrekt. rechts und links von dem bezugspunkt hat sich die grafik richtig gedreht, ober und unterhalb aber genau in die falsche richtung.
wenn ich -tan statt tan benutze dann rotiert es richtig zum bezugspunkt, aber immer um 180 grad in die andere richtung, weis der teufel wieso.
habs jetzt so gelöst:
Code:
-tan+Math.toRadians(180)
 
Zuletzt bearbeitet:

Michael...

Top Contributor
steht doch in meinem letzten Post du musst das Delta also die Differenz der zwei y und die Differenz der zwei x Werte nehmen.
Musst mich bzgl. meiner 0 Grad Ausrichtung korrigieren - hatte da wohl was falch in Erinnerung.
Um das ganze abzukürzen hier ein Bsp.:
Java:
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class MouseFollowDemo extends JFrame {
	private double orientation;
	private int distance;
	private Point m;
	
	public MouseFollowDemo() {
		orientation = 0;
		distance = 100;
		m = new Point(200, 200);
		final JPanel panel = new JPanel() {
			public void paintComponent(Graphics g) {
				super.paintComponent(g);
				Graphics2D g2 = (Graphics2D)g.create();
				g2.drawRect(m.x-5, m.y-5, 10, 10);
				g2.translate(m.x, m.y);
				g2.drawString((int)Math.toDegrees(orientation) + "°", 10, 10);
				g2.rotate(orientation);
				g2.drawLine(0, 0, distance, 0);
				g2.dispose();
			}
		};
		panel.addMouseMotionListener(new MouseMotionAdapter() {
			public void mouseMoved(MouseEvent e) {
				int dx = e.getX()-m.x;
				int dy = e.getY()- m.y;
				orientation = Math.atan2(dy, dx);
				distance = (int)Math.sqrt(dx*dx+dy*dy);
				panel.repaint();
			}
		});
		add(panel);
	}
	
	public static void main(String[] args) {
		JFrame frame = new MouseFollowDemo();
		frame.setBounds(0, 0, 500, 300);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H AWT AffineTransform, Kombination von Translation und Rotation AWT, Swing, JavaFX & SWT 0
S 2D-Grafik Planetare Rotation/Orbit AWT, Swing, JavaFX & SWT 2
F Swing Rotation eines Bildes mit beliebigen Koordinaten um den Mittelpunkt AWT, Swing, JavaFX & SWT 3
O 2D-Grafik Bild abgeschnitten nach Rotation mit Affine Transform und Hintergrund Schwarz AWT, Swing, JavaFX & SWT 8
O Hintergrund von AffineTransfom (rotation) ändern AWT, Swing, JavaFX & SWT 0
W 2D-Grafik schnelle Rotation AWT, Swing, JavaFX & SWT 5
P JComponent / JLabel drehen (Rotation) AWT, Swing, JavaFX & SWT 2
K AWT Probleme mit Zeichnen des Rectangle2D. Rotation stimmt nicht überein AWT, Swing, JavaFX & SWT 9
J Textfeld Rotation AWT, Swing, JavaFX & SWT 2
B Swing Zeilen Rotation AWT, Swing, JavaFX & SWT 5
A steuerbare 360 Grad Rotation AWT, Swing, JavaFX & SWT 2
MiMa Optimieren einer Methode zum Zentrieren von Fenstern AWT, Swing, JavaFX & SWT 0
T VerifyListener - Ersetzen einer 0 AWT, Swing, JavaFX & SWT 5
I JavaFX JavaFx-Anwendung für die Erstellung einer Windows-Anwendung? AWT, Swing, JavaFX & SWT 6
J Drag und drop aus einer JTable - bitte um Unterstützung AWT, Swing, JavaFX & SWT 2
N Dropshadow setzen bei einer Gruppe von Tiles, die sich jeweils in einer Stackpane befinden, welche in einer Gridpane angeordnet sind. AWT, Swing, JavaFX & SWT 0
M Daten zufällig Einlesen aus einer Datei (binäres Format) AWT, Swing, JavaFX & SWT 7
ExceptionOfExpectation Mit einer laufenden GUI Applikation eine Datei in dem Rechner löschen AWT, Swing, JavaFX & SWT 2
Jose05 Aus einer normalen Java Klasse eine FXML-Klasse laden AWT, Swing, JavaFX & SWT 12
Linjutsu Den Inhalten aus einer ArrayList Bilder zuweisen (Kartenspiel) AWT, Swing, JavaFX & SWT 8
H JavaFX Timeline II: Verschieben einer ImageView AWT, Swing, JavaFX & SWT 16
I Hilfe bei dem Erstellen einer SQL Abfrage aus gewählten JComboBoxen AWT, Swing, JavaFX & SWT 5
L Swing TextPanel Schrift untereinander und auf einer Höhe AWT, Swing, JavaFX & SWT 3
mananana Mögliche probleme die in einer GUI passieren Können AWT, Swing, JavaFX & SWT 6
I JTable mit einem Button zu einer Detail Seite springen AWT, Swing, JavaFX & SWT 4
Ernesto95 JavaFX Return Value nach Beendigung einer Animation AWT, Swing, JavaFX & SWT 15
melaniemueller Wortliste in einer Datei ablegen AWT, Swing, JavaFX & SWT 12
D Layout einer scene mit ListView Elementen und Zwei Textfeldern AWT, Swing, JavaFX & SWT 1
Jose05 JavaFx Fxml: GUI aus einer anderen Klasse starten AWT, Swing, JavaFX & SWT 1
U Was genau ist das Objekt einer affinentransformation? AWT, Swing, JavaFX & SWT 1
B JavaFX Prüfen ob ein Objekt sich mehrmals in einer Liste befindet AWT, Swing, JavaFX & SWT 5
mac2010 JavaFX Einbindung einer Karte AWT, Swing, JavaFX & SWT 1
donnico2 Objekte in der GUI ausgeben mit Hilfe einer DAO AWT, Swing, JavaFX & SWT 1
Kohl Jedes Objekt einer JTable um ein Zeichen verkürzen AWT, Swing, JavaFX & SWT 7
W Aufrufen einer bestimmten Scene mit if-Bedingung AWT, Swing, JavaFX & SWT 4
J Ablaufsteuerung/Anleitung machen mit JDialog und einer Zustandsmaschine AWT, Swing, JavaFX & SWT 1
missy72 JavaFX Wiederholen einer IF-Abfrage beim erneuten Öffnen einer Stage AWT, Swing, JavaFX & SWT 11
missy72 JavaFX TableView / TableColumn / ObservableList / zwei Werte in einer Zelle AWT, Swing, JavaFX & SWT 2
S JavaFX - mit Listener Veränderungen in einer TableView abhören AWT, Swing, JavaFX & SWT 3
missy72 JavaFX ObservableList in einer ArrayList speichern. AWT, Swing, JavaFX & SWT 7
HoT Sortieren von ein paar Zeilen in einer Tabelle, aber nicht die ganze Tabelle AWT, Swing, JavaFX & SWT 3
kodela Swing Element einer JComboBox ausgrauen AWT, Swing, JavaFX & SWT 3
B JavaFX Farbe eines Quadrates in einer separaten Klasse ändern AWT, Swing, JavaFX & SWT 4
H Daten aus einer XML(x83-Datei) in einem JFrame anzeigen lassen AWT, Swing, JavaFX & SWT 9
N Aufruf einer anderen Klasse durch Button ActionListener AWT, Swing, JavaFX & SWT 2
N Einer TextArea ein ScrollPane hinzufügen AWT, Swing, JavaFX & SWT 8
L JavaFX Exception nach includieren einer fxml // nested controller AWT, Swing, JavaFX & SWT 1
K Probleme bei der Erstellung und Ausführung einer Jar Datei AWT, Swing, JavaFX & SWT 2
A checkbox in einer TableView abhängig von einem anderen Celleninhalt disablen AWT, Swing, JavaFX & SWT 1
G Verknüpfung einer pdf Datei AWT, Swing, JavaFX & SWT 2
B Ausgaben einer Umrechnung vom Textfeld in ein Label AWT, Swing, JavaFX & SWT 2
F jTree und das Model aus einer eigenen Klasse AWT, Swing, JavaFX & SWT 1
D Zeilenumbruch in einer JTable AWT, Swing, JavaFX & SWT 9
N Wie kann ich zwei Grafiken in einer Oberfläche anzeigen lassen? AWT, Swing, JavaFX & SWT 8
@SupressWarnings() JavaFX Auf den Controller einer ListCell zugreifen AWT, Swing, JavaFX & SWT 4
Drachenbauer Swing Wie ändere ich den Hintergrund vom Anzeigefeld einer JComboBox, die nicht zum Hineinschreiben offen steht? AWT, Swing, JavaFX & SWT 32
H 3 verschiedene Nachrichten in einer FXML View die Infos kommen aus DB AWT, Swing, JavaFX & SWT 4
karlmasutra JavaFX Zugriff auf eine erzeugte Scene aus einer anderen Klasse AWT, Swing, JavaFX & SWT 1
S Java GUI durch variable Größe einer Map anpassen AWT, Swing, JavaFX & SWT 3
B Textfelder in einer ListView ausgeben AWT, Swing, JavaFX & SWT 13
J Searchfunktion auf einer MS Access Datenbank AWT, Swing, JavaFX & SWT 7
B Text im Tetfeld in einer TableView darstellen AWT, Swing, JavaFX & SWT 20
M Inhalte einer FlowPane AWT, Swing, JavaFX & SWT 4
W Swing JTable Zeilenumbruch innerhalb einer Zelle AWT, Swing, JavaFX & SWT 3
E Prinzip: wie man Ereignisse in einer GUI verarbeit. Frage zum Design? AWT, Swing, JavaFX & SWT 10
FRI3ND JavaFX: Wie kann ich einer Scene Argumente übergeben? AWT, Swing, JavaFX & SWT 14
K Swing Text eines Lables in einer Methode ändern AWT, Swing, JavaFX & SWT 13
G JavaFX JavaFX-Dialog aus einer Nicht-JavaFX-Anwendung heraus AWT, Swing, JavaFX & SWT 1
1 Swing Progressbar benutzen um Fortschritt einer Methode anzuzeigen AWT, Swing, JavaFX & SWT 4
K JavaFX ViewTable mit einer LinkedList befüllen AWT, Swing, JavaFX & SWT 3
L CardLayout in einer Klasse? AWT, Swing, JavaFX & SWT 2
J Compiler in der JavaFX stop() Methode warten lassen bist eine Aktion in einer anderen Scene gemacht AWT, Swing, JavaFX & SWT 5
D Java FX Image in einer Webanwendung annotieren und den Bereich ausschneiden AWT, Swing, JavaFX & SWT 0
L Java- UI zweites Fenster aus einer anderen Klasse öffnen durch ButtonClick AWT, Swing, JavaFX & SWT 4
L JavaFX Problem beim Aufrufen einer Methode AWT, Swing, JavaFX & SWT 5
ralfb1105 Swing Ausführung einer SwingWorker Klasse stoppen AWT, Swing, JavaFX & SWT 4
xYurisha JLabel Text einer geöffneten Gui über eine andere Klasse ändern! AWT, Swing, JavaFX & SWT 3
xYurisha Aus einer Gui Buttons, Label und ProgessBars entfernen AWT, Swing, JavaFX & SWT 4
MiMa Selektion aus einer ListView AWT, Swing, JavaFX & SWT 5
J 2D-Grafik Background einer Jpanel Klasse ändern AWT, Swing, JavaFX & SWT 1
J JFram Location aus Konstruktor einer anderen Klasse auslesen AWT, Swing, JavaFX & SWT 10
L Methode zum Füllen einer ComboBox AWT, Swing, JavaFX & SWT 4
J Suche nach einer horizontal aufklappbaren Toolbar AWT, Swing, JavaFX & SWT 1
P Variable einer Eingabe in anderes Textfeld schreiben AWT, Swing, JavaFX & SWT 7
D JavaFX Einbinden einer .fxml AWT, Swing, JavaFX & SWT 1
B Zeile einer Tabelle selektieren AWT, Swing, JavaFX & SWT 1
A Prüfung einer Eingabe auf Gleitkommazahl AWT, Swing, JavaFX & SWT 5
J Suchmaschine einer Datenbank AWT, Swing, JavaFX & SWT 5
Kanda Sorata Inhalt einer .txt Datei einlesen und in ein Label einfügen (JavaFX) AWT, Swing, JavaFX & SWT 2
A Swing JLabels in einer ForEach Schleife an den JPanel anheften (UNO Netzwerkspiel) AWT, Swing, JavaFX & SWT 1
R Update eines Labels bei Methodenaufruf einer anderen Klasse AWT, Swing, JavaFX & SWT 9
M Auswahl aus einer ListView AWT, Swing, JavaFX & SWT 3
J JavaFX - Felder (Label) in einer ForSchleife bearbeiten AWT, Swing, JavaFX & SWT 4
F Swing Spaltenbreite einer Column eines JTable auslesen AWT, Swing, JavaFX & SWT 5
L Dynamischer Aufbau einer Tabelle über Objekte AWT, Swing, JavaFX & SWT 2
C JavaFX Tief setzen in der Überschrift einer Tabellenspalte AWT, Swing, JavaFX & SWT 3
D Swing Größe einer JComboBox im GridBagLayout aufgrund der maximalen Länge der enthaltenen Daten AWT, Swing, JavaFX & SWT 7
R Java FX - Fxml - relative Größenangaben für Breite und Höhe einer TextArea AWT, Swing, JavaFX & SWT 8
M Wert einer Zelle aus JTable ziehen AWT, Swing, JavaFX & SWT 4
P Einer JList mit eigenem ListModel einen Eintrag hinzfügen AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben