| |
Dieses
Kapitel soll Ihre Grafikkenntnisse noch etwas ausbauen. Sie haben sich
schon mit dem Skalieren von grafischen Darstellungen befasst. Skalierung
kommt immer wieder vor, alles muss schlussendlich in ein Fenster eigepasst
werden, also lohnt es sich, die Sache etwas genauer anzuschauen. Sie
sollen wieder am Beispiel lernen. Hier eine paint() Methode, welche
einen Sinus zeichnet:

Bemerkungen:
- Es
ist günstig, alle Variablen am Anfang zu deklarieren und zu kommentieren.
- Ich
unterscheide zwischen Koordinaten für Berechnung (double) und solchen
für die Zeichnung (int)
- Die
Skalierung ist eine lineare Transformation mit Addition (Verschiebung)
und Multiplikation (Dehnung)
- Da
drawLine() eine Strecke von einem Punkt zum nächsten zeichnet, muss
man sich immer die Werte vom letzten Schritt merken (Old!).
- Die
Sinus - Funktion liefert in Java die Methode sin() aus der Klasse
Math.Siehe nachfolgende Tabelle für weiteres aus der Klasse Math.
Einige Math - Methoden:
(Winkel
sind im Bogenmass!)
| Funktion: |
Methode: |
| Sinus |
double
Math.sin(double); |
| Cosinus |
double
Math.cos(double); |
| Tangens: |
double
Math.tan(double); |
| Arcus
Tangens |
double Math.atan(double); |
| Zahl Pi |
double Math.PI |
| Zahl
e |
double
Math.E |
| e hoch |
double Math.exp(double); |
| natürlicher
Log. |
double Math.log(double); |
| Quadratwurzel |
double Math.squrt(double); |
|
|
| Skalierung |
Ich
habe Sie etwas besch...: Sie haben nicht erlebt, wie mühsam es ist,
die Werte für die Skalierung zu finden. Und was geschieht, wenn Sie
die Grösse des Fensters verändern? Ausprobieren! So wie bisher skaliert
man nur im Notfall. Besser ist es, sich bei der Skalierung auf die
Grösse des Fensters zu beziehen. Diese Grösse ist der Java - Buchhaltung
natürlich bekannt:
Bestimmung der Fenstergrösse:
| Wert: |
Methode: |
| Höhe |
int getHeight(); |
| Breite |
int getWidth(); |
-
Schreiben
Sie die paint() Methode so um, dass die Grösse des Diagramms automatisch
der Fenstergrösse angepasst wird. Testen Sie mit verschiedenen
Fenstergrössen. Achtung: Veränderung der Fenstergrösse geht noch
nicht!
- Wäre schön, wenn
sich die Diagrammgrösse bei laufendem Programm einer veränderten
Fenstergrösse anpassen würde. Dazu nachfolgend ein Programmteil ohne
jede Erklärung. Fügen Sie ihn vor dem Kommentar "// Add window listener."
ein. Am besten kopieren Sie diesen Text von hier direkt in Ihr
Programm. Das empfehle ich sonst nicht, denn was man mit Händen getippt
hat, bleibt besser hängen!
// Add component
listener.
this.addComponentListener
(
new ComponentAdapter() {
public void componentResized(ComponentEvent e) {
repaint();
}
}
);
|
|