# Drehmatrix in Java



## BeachBoy (10. April 2005)

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


----------



## Thomas Darimont (10. April 2005)

Hallo!

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


```
/**
 * 
 */
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


----------



## BeachBoy (10. April 2005)

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


----------



## Thomas Darimont (10. April 2005)

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:

```
/.
????de
    ????tutorials
```

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

Dann tippst du:

```
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:

```
java de.tutorials.RotatorExample
```

Gruß Tom


----------



## BeachBoy (10. April 2005)

habe das in einem ganz anderen Ordner, kann ich nicht diesen irgendwie nehmen?


----------



## Thomas Darimont (10. April 2005)

Hallo!

./ ist ein Platzhalter und steht für jeden beliebigen "aktuellen" Ordner ;-)

Gruß Tom


----------



## BeachBoy (10. April 2005)

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.


----------

