2D-Grafik Bild in Richtung Maus drehen

Lastone

Mitglied
Hallo zusammen,

Ich habe ein Problem und zwar will ich dass wenn ich mit der Maus in mein Panel klicke das Bild dort hin zeigt.

Ich probiere das momentan mit Graphics2D (rotate).

Momentan habe ich:
Java:
 public void Mouseleft(MouseEvent e) {
    			
    	if (e.getButton() == MouseEvent.BUTTON1) {
    		
    		Xl = e.getX();
    		Yl = e.getY();
    		
    		
    		
    	    xturret = (pictankturret.getIconWidth() / 2);
    	    yturret = (pictankturret.getIconHeight() / 2);
    	    
    	    float xDistance = Xl - xturret;
    	    float yDistance = Yl - yturret;
    	    rotationAngle = (Math.atan2(yDistance, xDistance));

und im paint:

Java:
public void paint(Graphics g) {
        super.paint(g);

        Graphics2D g2d = (Graphics2D)g;
        
        
        // turret zeichnen
        g2d.rotate(tank.getrotationAngle());
        g2d.drawImage(tank.getImage2(),250,250, this);
        
        Toolkit.getDefaultToolkit().sync();
        g.dispose();
    }

aber irgendwie funktioniert das mit dem drehen so gar nicht...
Das Bild soll ja auf der stelle gegen den Mauszeiger drehen.

Vielen Dank schon im vorraus.
Freundliche Grüsse
Lastone
 

Lastone

Mitglied
Da ich bis jetzt leider immernoch keine Antwort erhalten habe und ich leider auch noch keine Lösung habe, pushe ich hier nochmals...
Bin um jede Hilfe dankbar.
MLG
 

Lastone

Mitglied
Ich konnte es nun ein bisschen anpassen jedoch tritt noch immer nicht der gewünschte effekt auf... ich glaube ich berechne irgendwas falsch oder zeichne das anschliesend falsch... es wird einfach nicht um den gewünschten Winkel gedreht.

code:
Java:
  //Mouse-Listener Linksclick!
    public void Mouseleft(MouseEvent e) {
    			
    	
    	if (e.getButton() == MouseEvent.BUTTON1) {
    		
    		Xl = e.getX();
    		Yl = e.getY();
    		
    	    
    	    float xDistance = Xl - xturret;
    	    float yDistance = Yl - yturret;
    	    rotationAngle = Math.toDegrees((Math.atan2(yDistance, xDistance)));
    	    
    			// Left-click -> position-outprint!
    			System.out.println("Left-click - X:" + Xl + " Y:" + Yl);
    			System.out.println(rotationAngle);
    			
    			// Drehen des turrets.
    	        tx.rotate(Math.toRadians(rotationAngle), xturret, yturret);
    			
    	}	
    	}

und natürlich:

Java:
	public void paint(Graphics g) {
        super.paint(g);
   // turret zeichnen
        g2d.drawImage(tank.getImage2(), tank.rotateTurret(), this);
        
        Toolkit.getDefaultToolkit().sync();
        g2d.dispose();
    }

wobei "tank.rotateTurret()" natürlich das tx(AffineTransform) ist.
 

KingOfExceptions

Bekanntes Mitglied
Also als erstes ist
Code:
paint(Graphics g)
ganz schlecht, da das unter Umständen auch das zeichnen des JFrames beeinflussen kann. Besser ist da
Code:
paintComponent(Graphics g)
. Das aber nur am Rande.

Hast du keine Screenshots, die das etwas besser illustrieren, wie sich das Bild falsch dreht ?
 
Zuletzt bearbeitet:

Lastone

Mitglied
okay vielen dank für den tipp mit der Paintmethode werde ich somit auch noch anpassen...

für mein "rotateproblem" habe ich nun einen Screenshot angehängt (hoffe lässt sich öffnen).

Beim Kreuz habe ich halt einfach einmal geklickt und die Drehung ist (wie man sieht) minimal.

Die Ausgangsposition bleibt also das bild selbst bewegt sich nicht nur halt der Drehungswinkel stimmt nicht!
 

Anhänge

  • Beispiel.jpg
    Beispiel.jpg
    29,4 KB · Aufrufe: 38
Zuletzt bearbeitet:

KingOfExceptions

Bekanntes Mitglied
Ah super! Das hilft schon weiter! ;)
Was bringt dir denn
Code:
rotationAngle
? Stimmt dieser Wert?
Mir scheint es so, als habe sich das Bild um die Hälfte gedreht, oder um ein Drittel? Was passiert bei einem weiteren Klicken auf der gleichen Position?
Außerdem, wieso konvertierst du einmal den Winkel von Radian in Grad und dann wieder in Radian? Nur für den Output oder?

[EDIT][TIPP]Stackoverflow mit gleichem Problem und super Antwort![/TIPP][/EDIT]
 
Zuletzt bearbeitet:

Lastone

Mitglied
Also bei dem Beispiel hatte ich ungefähr einen Wert von 30... was auch stimmt das bild dreht sich ja etwa um diese 30... aber es sollten ja weitaus mehr sein (schätzungweise 60-80?!)

Wenn ich erneut auf dieselbe Position klicke dreht es sich (natürlich wie erwartet) erneut um diese 30.

Ja das mit dem Konvertieren war nur für den Output gedacht (damit ich sehe was da falsch läuft! ;))

Daraus schliesse ich halt das was mit der Berechnung meines "rotationAngle" nicht stimmen muss!?

P.s danke für den Link habe ich auch schon gefunden --> war leider nur wenig aufschlussreich für mich( ich rechne es ziemlich genauso wie dort wie du vielleicht gesehen hast:bahnhof:)
 
Zuletzt bearbeitet:

KingOfExceptions

Bekanntes Mitglied
Ja genau, ich würde es mal direkt mit
Code:
rotationAngle =Math.atan2(yturret - Yl, xturret - Xl) - Math.PI /2;
versuchen!

PS: Ja dachte ich mir, allerdings hast du ein Minuszeichen und ein
Code:
+180
vergessen, das wirft das ganze dann doch ein wenig aus der Bahn ;)
 
Zuletzt bearbeitet:

Lastone

Mitglied
Kommt der Sache schon ein bisschen näher!

Nur wie du siehst stimmt es leider immernoch nicht ganz.... :S

code:

Java:
    	    rotationAngle = Math.toDegrees(Math.atan2(yturret - Yl, xturret - Xl) - Math.PI / 2);
 

Anhänge

  • Beispiel2.jpg
    Beispiel2.jpg
    32,8 KB · Aufrufe: 31
Zuletzt bearbeitet:

KingOfExceptions

Bekanntes Mitglied
Es darf nicht in Grad sein, das weißt du nicht wahr? ;)
Diese Zeile war hoffentlich nur, um die Grad auszugeben ;)

Hast du denn genau die Position der Mitte des Bildes? Mir scheint es, als ob du die linke obere Ecke benutzt ;) vielleicht +5 px jeweils?
 

Lastone

Mitglied
ist nur zur Ausgabe gedacht, rechne es anschliessend ja wieder um in radiant :) und ja das AffineForm verlangt ja einen Wert in radiant


noch zur bestätigung ;) :
Java:
    	    rotationAngle = Math.toDegrees(Math.atan2(yturret - Yl, xturret - Xl) - Math.PI / 2);
    	    
    			// Left-click -> position-outprint!
    			System.out.println("Left-click - X:" + Xl + " Y:" + Yl);
    			System.out.println(rotationAngle);
    			
    			// Drehen des turrets.
    	        tx.rotate(Math.toRadians(rotationAngle), xturret, yturret);

sollte eigentlich die mitte vom bild haben :
Java:
   private int xturret = (pictankturret.getIconWidth() / 2);
   private int yturret = (pictankturret.getIconHeight() / 2);
 

KingOfExceptions

Bekanntes Mitglied
Eigentlich dürfte die Umwandlung allein nicht so einen großen Unterscheid hervorrufen...

Aber die Position ist doch:
Code:
xturret= pictankturret.getIconWidth()/2 + pictankturret.getPosition().x
oder? ;)
 

KingOfExceptions

Bekanntes Mitglied
Sorry die Methode gibt es ja gar nicht ;) Nein ich meine einmal, die Position, von der an, das Icon gemalt wird und dann muss man da noch die Hälfte der Breite des Icons hinzufügen, um das Zentrum des Icons zu haben!
 

Lastone

Mitglied
ach ich dachte schon ich habe da irgendwas verpassst! :lol:

nunja also ich habe hier für die position(nur testhalber halt irgendwo im panel):
Java:
  AffineTransform tx = AffineTransform.getTranslateInstance(250, 250);

ist halt die position wo es anschliessend gezeichnet wird.
Wie meinst du nun soll ich mein "xturret" und "yturret" anpassen?
 

Lastone

Mitglied
dann wirds unschön sobald ich das teste :oops:
es verschwindet nämlich irgendwo im nirgendwo sobald ich reinklicke;)

aber ich habe nun was anderes getestet was bis anhin funktioniert! (natürlich nur beim ersten Klick) :eek:
wenn ich nähmlich:
Java:
   AffineTransform tx = AffineTransform.getTranslateInstance(0, 0);
auf 0 setze (also oben links in der Ecke) funktioniert es. (siehe Screenshot)
 

Anhänge

  • Beispiel3.png
    Beispiel3.png
    38,3 KB · Aufrufe: 31
Zuletzt bearbeitet:

Lastone

Mitglied
Achja klar hattest ja recht!:toll:

Hatte nun die Erleuchtung :idea:

Java:
    	    rotationAngle = Math.toDegrees(Math.atan2(yturret - Yl + 250, xturret - Xl + 250) - Math.PI / 2);

muss man natürlich hier noch jeweils die 250 dazurechnen sonst stimmt ja die Achse nicht mehr überein!
(Resultat in Anhang)

Jetzt wartet noch ein bisschen mehr Mathe auf mich :bae:
soll sich ja auch beim 2 Klick nochmals korrekt drehen ;) und muss ja noch auf mein kleines "Pänzerchen" gezeichnet werden.

Aber vielen Dank für deine Mühe und Aufwand! :)

Melde mich wieder wenn das nächste Problem vor der Tür steht
 

Anhänge

  • Beispiel4.jpg
    Beispiel4.jpg
    21,6 KB · Aufrufe: 28
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Bild in Richtung Mauszeiger drehen AWT, Swing, JavaFX & SWT 2
M JavaFX Mandelbrot-bild noch nicht optimiert AWT, Swing, JavaFX & SWT 7
berserkerdq2 Wie füge ich ein Bild in javafx mit dem Scenebuilder ein, das automatisch mitgezogen wird, wenn das Fenster vergrößert wird oder Vollbildmodus AWT, Swing, JavaFX & SWT 6
frager2345 Bild aus Dateien lesen und als Hintergrund verwenden AWT, Swing, JavaFX & SWT 2
T Bild in ein graphics füllen AWT, Swing, JavaFX & SWT 2
N imageIcon zeigt kein Bild an AWT, Swing, JavaFX & SWT 5
B Bild lädt nicht AWT, Swing, JavaFX & SWT 2
izoards Bild ausdrucken - PageFormat setzen geht nicht AWT, Swing, JavaFX & SWT 5
M Bild wird nicht geladen obwohl sie gefunden wird AWT, Swing, JavaFX & SWT 0
V JavaFX Bild leer und keine Fehlermeldung AWT, Swing, JavaFX & SWT 21
D JavaFX Bearbeitetes Bild wird nicht gespeichert AWT, Swing, JavaFX & SWT 9
D JavaFX Größe des Bild an ImageView anpassen AWT, Swing, JavaFX & SWT 3
M Bewegtes Bild im BorderLayout.CENTER AWT, Swing, JavaFX & SWT 6
C Falschfarbenbild (lineare Grauwertspreizung)aus Grauwert-Bild erstellen AWT, Swing, JavaFX & SWT 15
C Kleineres Bild an bestimmte Koordinaten setzen AWT, Swing, JavaFX & SWT 6
S Bild neu skalieren - Bild in Bild speichern? AWT, Swing, JavaFX & SWT 6
N Bild Drehen AWT, Swing, JavaFX & SWT 1
Hatsi09 Swing JPanel Bild einfügen AWT, Swing, JavaFX & SWT 14
J Bild von anderer Klasse will nicht laden AWT, Swing, JavaFX & SWT 1
M JavaFX Bild zur ImageView in einem Kreis anzeigen. AWT, Swing, JavaFX & SWT 4
T JFrame Bild einfügen AWT, Swing, JavaFX & SWT 9
M Combobox bild anklicken AWT, Swing, JavaFX & SWT 2
cool_brivk24 Swing ImageIcon lädt kein Bild AWT, Swing, JavaFX & SWT 12
L Bild nicht in der Mitte AWT, Swing, JavaFX & SWT 16
B JavaFX Bild um die eigene Achse drehen lassen AWT, Swing, JavaFX & SWT 0
J Swing Bild in Button AWT, Swing, JavaFX & SWT 11
I Bild über FXML (ImageView, Image) anzeigen AWT, Swing, JavaFX & SWT 1
T Image Loader lädt Bild nicht AWT, Swing, JavaFX & SWT 10
stroggi Swing Mehrere transparentes Objekte (Grafiken) über einem Bild (JLabel) darstellen AWT, Swing, JavaFX & SWT 4
P Kein Bild wird angezeigt bei ImageIcon AWT, Swing, JavaFX & SWT 16
T JavaFX Bild in Tabellenzelle AWT, Swing, JavaFX & SWT 2
Ksanatos Swing Bild (.jpg) einlesen und per Button wechseln AWT, Swing, JavaFX & SWT 9
S JPanel rotieren, Bild ist abgeschnitten, Clipping? AWT, Swing, JavaFX & SWT 0
MaxG. Swing Bild Button AWT, Swing, JavaFX & SWT 7
P Swing Bild Skallieren AWT, Swing, JavaFX & SWT 1
P Jframe Bild einfügen, Hintergrund Farbe ändern, und Button schrift Größe ändern AWT, Swing, JavaFX & SWT 2
A Swing Bild wird nicht mehr geladen AWT, Swing, JavaFX & SWT 4
A Swing Gemaltes Bild über saveDialog speichern unter AWT, Swing, JavaFX & SWT 15
R 2D-Grafik PNG Bild per Graphics auf JPanel AWT, Swing, JavaFX & SWT 9
S Bild mit ImageIcon auf GUI verkleinern AWT, Swing, JavaFX & SWT 3
T AWT Farben in einem Bild ändern AWT, Swing, JavaFX & SWT 8
I JFrame Bild strecken und auf Bildschirmgröße anpassen AWT, Swing, JavaFX & SWT 2
F Gezeichnetes als bild speichern AWT, Swing, JavaFX & SWT 4
B 2D-Grafik Bild farblich filtern AWT, Swing, JavaFX & SWT 2
B JavaFX ImageView neues Bild zuweisen AWT, Swing, JavaFX & SWT 19
A 2D-Grafik Bild wird nicht neu gezeichnet AWT, Swing, JavaFX & SWT 24
K Bild in JFrame AWT, Swing, JavaFX & SWT 2
S JavaFX Teil eines Bildes ausschneiden / als neues Bild nutzen AWT, Swing, JavaFX & SWT 8
B Swing Unterteiltes JFrame mit Bild in der Mitte AWT, Swing, JavaFX & SWT 4
I Applet BlueJ Applet - Bild mit if-Schleife zeichnen lassen AWT, Swing, JavaFX & SWT 16
Z Bildervorschau, MouseDragged das Bild verschieben AWT, Swing, JavaFX & SWT 1
M JavaFX Ein Bild ohne Rahmen fällt runter? AWT, Swing, JavaFX & SWT 2
G Anonyme Instanz von JXImageView erstellen und mit Bild initialisieren AWT, Swing, JavaFX & SWT 7
A JPanel Bild laden (Porblem mit Dateipfad) AWT, Swing, JavaFX & SWT 2
M JavaFX - Bild in Jar einbinden, sodass es auch außerhalb der IDE geladen wird. AWT, Swing, JavaFX & SWT 2
M Bild Beschreibung mit ImageIO speichern AWT, Swing, JavaFX & SWT 1
M "ImageIO.read()" liest Bild nicht richtig ein AWT, Swing, JavaFX & SWT 3
I Swing JLabel Bild für 1sec anzeigen lassen AWT, Swing, JavaFX & SWT 13
K Bild in Label wird nicht angezeigt AWT, Swing, JavaFX & SWT 5
C GUI öfters durchlaufen und hinterher Bild speichern AWT, Swing, JavaFX & SWT 1
M AWT Farben in Bild ersetzen AWT, Swing, JavaFX & SWT 11
E JavaFX Bild einfügen AWT, Swing, JavaFX & SWT 6
G paintComponents zerstückelt Bild AWT, Swing, JavaFX & SWT 0
C 2D Grafik ein Bild soll permanent durchlaufen AWT, Swing, JavaFX & SWT 2
1 Textfield: jede Buchstabe ein Bild AWT, Swing, JavaFX & SWT 2
C Bild Koordinaten AWT, Swing, JavaFX & SWT 6
M Bild aus JLabel resizen und speichern AWT, Swing, JavaFX & SWT 0
M Bild in JPanel mit Maus einfügen AWT, Swing, JavaFX & SWT 0
B JPanel und png-Bild AWT, Swing, JavaFX & SWT 2
B Swing Bild von Webseite herunterladen, diese dann in JList anzeigen. AWT, Swing, JavaFX & SWT 1
O 2D-Grafik Bild abgeschnitten nach Rotation mit Affine Transform und Hintergrund Schwarz AWT, Swing, JavaFX & SWT 8
A Swing Malprogramm Bild speichern? AWT, Swing, JavaFX & SWT 9
U Bild innerhalb hatml code anzeigen AWT, Swing, JavaFX & SWT 5
Y JavaFX Bild speichern und Pfad dazu abspeichern AWT, Swing, JavaFX & SWT 2
S Geladenes Bild wird nicht in JPanel angezeigt AWT, Swing, JavaFX & SWT 7
C Bild in JFrame AWT, Swing, JavaFX & SWT 8
T AWT Bild laden und transparent zeichnen AWT, Swing, JavaFX & SWT 2
I SWT Bilder, bzw. ein einzelnes Bild AWT, Swing, JavaFX & SWT 6
L JavaFX: Bild in Image einlesen AWT, Swing, JavaFX & SWT 11
T Mit getSubimage ruckelt das Bild AWT, Swing, JavaFX & SWT 7
T Bild drehen ohne Resize AWT, Swing, JavaFX & SWT 3
A Bild in JLabel skalieren AWT, Swing, JavaFX & SWT 4
A Bild über Imageviewer auf GUI anzeigen AWT, Swing, JavaFX & SWT 3
D 3D-Grafik [JOGL] streifen im bild AWT, Swing, JavaFX & SWT 2
D Bild bewegen mit Tastendruck AWT, Swing, JavaFX & SWT 7
H Bild wird nicht angezeigt, Fehlercode unverständlich AWT, Swing, JavaFX & SWT 5
J 2D-Grafik Bildteile in ein anderes Bild speichern AWT, Swing, JavaFX & SWT 12
C Swing ImageIcon mit Bild aus Temp-Verzeichniss füllen AWT, Swing, JavaFX & SWT 15
J Swing Bild laden, Kreise drin malen, Schreiben AWT, Swing, JavaFX & SWT 2
S Bild skalieren AWT, Swing, JavaFX & SWT 3
D Bild in JFrame nur kurz da AWT, Swing, JavaFX & SWT 9
H Bild mit KeyListener verschieben AWT, Swing, JavaFX & SWT 2
GianaSisters Bild wird S/W gespeichert. AWT, Swing, JavaFX & SWT 4
O Bild auf das JLabel AWT, Swing, JavaFX & SWT 10
D Swing Text auf Bild legen AWT, Swing, JavaFX & SWT 7
S Ein externes Bild in ein JFrame einfügen AWT, Swing, JavaFX & SWT 8
J Swing Bild wird nicht auf JLabel angezeigt AWT, Swing, JavaFX & SWT 12
S Swing Bild auf jPanel nach Änderung von JComboBox zeichnen AWT, Swing, JavaFX & SWT 4
R Bild in Bild finden AWT, Swing, JavaFX & SWT 4
B Bild bearbeiten mit Transparenz (spiegeln, Farben austauschen) AWT, Swing, JavaFX & SWT 8

Ähnliche Java Themen

Neue Themen


Oben