Drehmatrix in Java

BeachBoy

Mitglied
Hallo,

ich möchte eine Matrix erstellen, mit der ich ein beliebiges Objekt (evtl. Rechteck) drehen kann. Ich weiß, dass man das irgendwie in ein Array packen muss. Und ich weiß auch, wie man ein Rechteck zeichnet. Aber dann verlässt mich auch schon mein wissen. Muss das in eine 2 x 2 Matrix gepackt werden für ein Rechteck?

Kann mir vielleicht irgendjemand den Quelltext dafür geben? hat das schonmal jemand hier gemacht? wäre echt cool wenn ich ein programm kriegen würde, wo so etwas machbar ist.

Danke,
BeachBoy
 
Hallo!

Mann muss doch nicht immer alles von Hand machen ;-)
AffineTransform to the rescue :)

Code:
/**
 * 
 */
package de.tutorials;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Stroke;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferStrategy;

import javax.swing.JFrame;

/**
 * @author Tom
 */
public class RotatorExample extends JFrame {

	BufferStrategy strategy;

	Stroke stroke = new BasicStroke(3.0F);

	Thread runner = new Thread() {
		public void run() {

			int theta = 0;
			while (true) {
				Graphics2D g = (Graphics2D) strategy.getDrawGraphics();
				g.clearRect(0, 0, 320, 240);

				g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
						RenderingHints.VALUE_ANTIALIAS_ON);

				theta += 5;
				theta %= 360;

				AffineTransform at = AffineTransform.getRotateInstance(Math
						.toRadians(theta), 105, 105);

				g.setTransform(at);
				g.setStroke(stroke);

				g.drawRect(80, 80, 50, 50);
				g.setColor(Color.RED);
				g.drawLine(80, 80, 80, 80);

				g.dispose();
				strategy.show();
				try {
					sleep(150L);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}
	};

	public RotatorExample() {
		super("RotatorExample");
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setSize(320, 240);
		setVisible(true);
		createBufferStrategy(2);
		strategy = getBufferStrategy();
		runner.start();
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new RotatorExample();
	}
}

Gruß Tom
 
Habe es gerade ausprobiert.
Es muss doch alles in eine *.java datei
Dann kam folgende Meldung:

java.lang.NoClassDefFoundError: Main
Exception in thread "main"

was bedeutet das?

Danke
 
Hallo!

http://www.tutorials.de/tutorials161012.html&highlight=NoClassDefFoundError

Meine Klasse RotatorExample hat die package deklaration:
de.tutorials.

D.h. das die daraus Entstehende Klasse ab dem aktuellen Verzeichnis im Unterverzeichnis
de/tutorials liegen muss.

Wenn du das ganze auf der Konsole kompilieren willst, musst do folgendes machen:
Code:
/.
????de
    ????tutorials

Wir stehen im Verzeichnis /. die .java Datei namens RotatorExample .java muss ins Verzeichnis tutorials unterhalb des Verzeichnisses de liegen.

Dann tippst du:
Code:
javac de/tutorials/RotatorExample.java
ein.

Sollte hier ein Fehler passieren muss du noch die PATH Variable so setzten, dass sie den Pfad zum /bin Verzeichnis deiner JDK Installation miteinschließt.

Anschließend:
Code:
java de.tutorials.RotatorExample

Gruß Tom
 
hab jetzt das package de.tutorials; einfach weggelassen, dann funktioniert es.

hast du vielleicht noch ein beispiel, wo man per mausklick um jeweils 90° drehen kann? Also nicht dauerhaft drehen.

Wäre echt cool.
 
Zurück