Was ist eine lineare Funktion

Werbung
Kü /Info Oberstufe
OOP - Raumplanung
Sj. 2012/2013
Wie zeichnet man einfache Figuren in Java?
Ziel ist es zu verstehen, wie das Zeichnen von Formen mit Java grundsätzlich funktioniert.
Wenn du das verstanden hast, ist es relativ einfach, zwei neue Möbelklassen zu entwerfen.
Eine Erklärung dazu gibt es hier:
 Video:
o „OOP - Figuren zusammenstellen“ - http://youtu.be/s3JS_kGFJ1A
Schauen wir uns dazu zunächst die Methode gibAktuelleFigur() von der Klasse Stuhl an, denn
sie ist für das Aussehen des Stuhls verantwortlich:
private Shape gibAktuelleFigur(){
GeneralPath stuhl = new GeneralPath();
stuhl.moveTo(0 , 0);
stuhl.lineTo(breite, 0);
stuhl.lineTo(breite+(breite/20+1), tiefe);
stuhl.lineTo(-(breite/20+1), tiefe);
stuhl.lineTo(0 , 0);
//Das ist die Umrandung. Das Stuhl bekommt noch eine Lehne
stuhl.moveTo(0 , (breite/10+1));
stuhl.lineTo(breite, (breite/10+1));
// transformieren
AffineTransform t = new AffineTransform();
t.translate(xPosition, yPosition);
Rectangle2D umriss = stuhl.getBounds2D();
t.rotate(Math.toRadians(orientierung),
umriss.getX()+umriss.getWidth()/2,
umriss.getY()+umriss.getHeight()/2);
return t.createTransformedShape(stuhl);
}
Diese gehen wir nun Stück für Stück durch, um zu verstehen, wie sie arbeitet und dann in
der Lage zu sein, Dinge zu ändern, um neue Möbel zu zeichnen.
1. Die erste Zeile private Shape “gibAktuelleFigur(){“ gibt den Namen und den
Rückgabewert: Shape. Dieser Shape enthält nachher den Umriss des Möbelstücks
und kann an die Leinwand zum Zeichnen direkt weitergereicht werden. Shape ist eine
Klasse, die Java bereits vorgibt.
2. Die Zeile: GeneralPath stuhl = new GeneralPath(); erzeugt offensichtlich ein
Objekt stuhl, welches vom Typ „GeneralPath“ ist. Auch das ist eine Klasse, die von Java bereits vorgegeben wird und die zum Zeichnen von Objekten verwendet wird. Sie
stellt folgende Methoden zur Verfügung:
- moveTo(int x, int y)
- lineTo (int x_neu, int y_neu)
- append(…)
- ……
Kü /Info Oberstufe
OOP - Raumplanung
Sj. 2012/2013
Um auf die Methoden von der Klasse GeneralPath zugreifen zu können, muss
man ein Objekt der Klasse GeneralPath erzeugen. Wir brauchen die Methoden,
um einzelne Linien zeichnen zu können. Das Möbelstück setzt sich dann nachher aus
diesen einzelnen Linien (dem Path) zusammen. Daher wird das Objekt stuhl erzeugt. Über die Punktnotation (siehe Einschub I) kann das Objekt nun auf die Methoden zugreifen und Stück für Stück Linien zeichnen, die zu einem GeneralPath zusammengesetzt werden. Um diese Klasse verwenden zu können, wird am Anfang der
Klasse Stuhl folgende Anweisung ausgeführt:
import java.awt.geom.GeneralPath;
3.
4.
5.
6.
Dadurch ist die Klasse und somit auch alle enthaltenen Methoden in unserer Klasse
Stuhl bekannt. Sie wird sozusagen „hinzugenommen“.
Die Zeile: stuhl.moveTo(0 , 0); legt den Startpunkt des neu zu schaffenden Objektes fest – von hier aus werden die folgenden Linien gezogen (bis zum nächsten
stuhl.moveTo…)
Die Zeile: stuhl.lineTo(breite, 0); zieht eine Linie von dem zuletzt angegebenen Punkt (hier (0,0)) zu einem neuen Punkt (0+breite, 0+0). Allgemein hieße die Anweisung: : stuhl.lineTo(x, y); dadurch würde von dem vorher gegebenen Punkt
(xalt, yalt) nun eine Linie gezogen zu dem Punkt (xalt+x, yalt+y).
Die weiteren Zeilen ergeben sich aus 4. Analog.
Der zweite Teil bleibt erst einmal eine Art „black box“:
// transformieren
AffineTransform t = new AffineTransform();
t.translate(xPosition, yPosition);
Rectangle2D umriss = stuhl.getBounds2D();
t.rotate(Math.toRadians(orientierung),
umriss.getX()+umriss.getWidth()/2,
umriss.getY()+umriss.getHeight()/2);
return t.createTransformedShape(stuhl);
7. Hier wird der Stuhl mit dem gesamten GeneralPath einfach nur verschoben und gegebenenfalls gedreht. Denn wir haben ihn ja zunächst oben links in der Ecke gezeichnet – auf der Leinwand soll er aber vielleicht an einer ganz anderen Position und gedreht – aber mit dem gleichen GeneralPath erscheinen.
Beachte: das Objekt existiert nun im Prinzip in zwei Darstellungen:
Als Objekt mit gespeicherten Werten in
den Instanzvariablen
farbe = "blau";
orientierung = 0;
istSichtbar = false;
breite = 40;
tiefe = 40;
kachelGroesse =breite;
rotationsEinheit=45;
xPosition = x*kachelGroesse;
yPosition = y*kachelGroesse;
Als Shape mit Punktkoordinaten gespeichert:
Kü /Info Oberstufe
OOP - Raumplanung
Sj. 2012/2013
Woher kommen all diese vorgegebenen Klassen und woher weiß man, was sie können, bzw.
welche Methoden man dadurch verwenden kann?
Es gibt sogenannte Java-Klassenbibliotheken (API), in denen alle bereits geschriebenen und
für die Allgemeinheit zur Verfügung gestellten Klassen geordnet und verfügbar gemacht
wurden. Über die import Anweisung können diese Klassen dem eigenen Projekt bzw. der einzelnen Klasse hinzugefügt werden, so dass davon dann auch Objekte abgeleitet werden können und die Methoden der hinzugefügten Klassen über diese Objekte dann zur Verfügung
stehen.
Herunterladen