Guido Krüger's Web Service

Programming Asssignments 14 - 19


(This page is available in German only. )

Aufgaben zu den Kapiteln 14 bis 19

1. [A] (Zählen der repaint-Events) Die Methode paint wird immer dann aufgerufen, wenn bei einem Fenster der Ausgabebereich restauriert werden muß. Schreiben Sie ein Programm, daß die Aufrufe von paint zählt und den Zähler auf dem Bildschirm ausgibt.

2. [A] (Regenbogen) Schreiben Sie ein Programm, das einen Regenbogen auf hellblauem Hintergrund ausgibt.

3. [A] (Programm beenden) Schreiben Sie ein Programm, das ein ansonsten leeres Fenster mit einem roten Quadrat in der Mitte ausgibt. Nach Mausklick darauf soll das Programm beendet werden.

4. [A] (Unterstreichung) Schreiben Sie eine Methode drawUnderlinedString, die eine Zeichenkette mit Unterstreichung ausgibt. Die Methode soll die selbe Parameterstruktur wie drawString haben.
Aufg1404.java

5. [A] (Fenstergröße anzeigen) Schreiben Sie ein Programm, daß die aktuelle Größe seines Hauptfensters in dessen Client-Area anzeigt. Nach jeder Größenänderung durch den Anwender soll die Bildschirmausgabe entsprechend angepaßt werden.

6. [A] (Fenstergröße ändern) Schreiben Sie ein Programm, daß die aktuelle Größe seines Hauptfensters nach einem Klick auf die linke Maustaste in Schritten von 10 Pixeln vergrößert. Bei einem Klick auf die rechte Maustaste soll das Fenster entsprechend verkleinert werden.

7. [A] (Mausposition anzeigen) Schreiben Sie ein Programm, daß die aktuelle Position des Mauszeigers in der linken oberen Ecke des Ausgabefensters anzeigt.
Aufg1407.java

8. [B] (processMouseEvent) Schreiben Sie ein Programm, dessen Hauptfenster genäß den Ausführungen in Kapitel 18 die Methode processMouseEvent überlagert, um nach einem Mausklick das Programm zu beenden.

9. [B] (Tortengraphik) Schreiben Sie ein Programm, das ein Array von Ganzzahlen als Tortengrafik darstellt. Die Tortenstücke sollen verschiedenfarbig dargestellt werden und ihre Größe soll dem relativen Anteil des jeweiligen Elements entsprechen.
Aufg1409.java

10. [B] (Schachbrett) Schreiben Sie ein Programm, das ein Schachbrett zeichnet. Fügen Sie auch die horizontale und vertikale Beschriftung ein.

11. [B] (Ein großes "E" zeichnen) Schreiben Sie ein Programm, daß mit Hilfe der elementaren Grafikroutinen ein großes "E" auf den Bildschirm zeichnet. Benutzen Sie dazu keine Methode zur Ausgabe von Text, sondern verwenden Sie die Linien- oder Polygon-Routinen. Das "E" soll in roter Farbe auf weißem Hintergrund ausgegeben werden und einen schwarzen Schatten haben.
Aufg1411.java

12. [B] (Ausdrucken einer Textdatei) Schreiben Sie ein Programm, das den Inhalt einer Textdatei, die über den Standard-Dateidialog ausgewählt wurde, auf den Drucker ausgibt.

13. [B] (Zufallszahlentest) Mit Hilfe hochauflösender Grafik kann ein einfacher und schneller Test für Zufallszahlen geschrieben werden. Dazu wird zunächst ein leeres Grafikfenster erzeugt in das anschließend viele tausend Pixel zufällig gesetzt werden. Ergibt sich eine gleichmäßige Verteilung, so kann der Generator in grober Näherung als brauchbar angesehen werden. Werden dagegen Häufungen oder regelmäßige Muster sichtbar oder bleiben sich gar Lücken stehen, so kann davon ausgegangen werden, daß der Zufallszahlengenerator nicht optimal arbeitet. Schreiben Sie ein Programm, das diesen Test implementiert und schätzen Sie auf diese Weise die Güte des eingebauten Zufallszahlengenerators ab.

14. [B] (Schraffur) Schreiben Sie eine Methode, die ein Rechteck mit Schraffur darstellen kann.
Aufg1414.java

15. [B] (Schriftskalierung) Schreiben Sie ein Programm, das ein großes "A" in der Schriftart "Serif" auf dem Bildschirm ausgibt. Mit Hilfe von Textmetriken soll der Buchstabe so groß sein, daß er bei zentrierter Ausgabe gerade noch in das Fenster paßt. Nach einer Größenänderung des Fensters durch den Anwender soll die Schriftausgabe geeignet angepaßt werden.

16. [B] (Clipping) Schreiben Sie ein Programm, das die Clipping-Routinen dazu verwendet, in einem Grafikfenster näherungsweise folgende Ausgabe zu erzeugen:

abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
abcdefgh                                  qrstuvwxyz
abcdefgh                                  qrstuvwxyz
abcdefgh                                  qrstuvwxyz
abcdefgh      opqrstuvwxyzabcdefghijk     qrstuvwxyz
abcdefgh      opqrstuvwxyzabcdefghijk     qrstuvwxyz
abcdefgh      opqrstuvwxyzabcdefghijk     qrstuvwxyz
abcdefgh      opqrstuvwxyzabcdefghijk     qrstuvwxyz
abcdefgh      opqrstuvwxyzabcdefghijk     qrstuvwxyz
abcdefgh      opqrstuvwxyzabcdefghijk     qrstuvwxyz
abcdefgh      opqrstuvwxyzabcdefghijk     qrstuvwxyz
abcdefgh      opqrstuvwxyzabcdefghijk     qrstuvwxyz
abcdefgh                                  qrstuvwxyz
abcdefgh                                  qrstuvwxyz
abcdefgh                                  qrstuvwxyz
abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz

Aufg1416.java

17. [B] (Rechteck mit Beschriftung) Schreiben Sie eine Methode drawTextRect, die ein Rechteck mit darin enthaltenem Text ausgibt. Die Größe des Rechtecks sowie die Punktgröße der Schrift sollen frei vorgegeben werden können. Benutzen Sie Textmetriken, um den Text innerhalb des Rechtecks sowohl horizontal als auch vertikal zu zentrieren.

18. [B] (3D-Rahmen) Ein hellgraues Rechteck mit 3D-Effekt entsteht, indem man auf der linken und oberen Seite eine weiße Randlinie zeichnet, während auf der rechten und unteren Seite dunkelgraue bzw. schwarze Linien verwendet werden. Schreiben Sie eine Methode draw3DRect, die ein Rechteck mit 3D-Rahmen zeichnen kann. Machen Sie die Breite des Rahmens konfigurierbar und erlauben Sie es, zwischen vertieften und erhabenen Darstellungen zu wählen.

19. [B] (Pfeil zeichnen) Schreiben Sie eine Methode drawArrow, die einen farbigen, flächigen Pfeil ausgeben kann. Die Drehrichtung (in 90-Grad-Schritten) und die Länge des Pfeils sollten veränderbar sein.

20. [B] (Splashscreen) Verwenden Sie die Klasse Window, um mit Hilfe eines rahmenlosen Fensters einen Splashscreen zu erzeugen, der nach dem Starten Ihres Programmes für ca. 4 Sekunden angezeigt und anschließend selbstständig wieder entfernt wird. Ein Splashscreen wird üblicherweise verwendet, um nach dem Aufruf des Programmes eine Startmeldung mit dem Namen des Programmes, der aktuellen Version, Copyrighthinweisen, etc. anzuzeigen. Erstellen Sie ein hellgraues Fenster mit einem eigenen 3D-Rahmen, das die o.g. Informationen in ansprechender Form anzeigt.
Aufg1420.java

21. [B] (Wer das nicht kann...) Ein beliebtes Spiel ist es, vorgegebene Figuren zu zeichnen, ohne den Stift abzusetzen. Das bekannteste Beispiel ist sicher das Haus mit Dach, dessen Erstellung mit den Worten "Wer das nicht kann, kriegt keinen Mann" begleitet wird (eine Silbe je Linie). Schreiben Sie ein Programm, das dieses Haus zeichnet. Die Größe des Hauses soll sich an die aktuelle Größe des Fensters anpassen.

22. [B] (Farbverlauf) Schreiben Sie eine Methode, die ein Rechteck mit einem horizontalen Farbverlauf zeichnen kann. Die Größe des Rechtecks, sowie die Anfangs- und Endfarbe sollen konfigurierbar sein.
Aufg1422.java

23. [B] (Gedrehtes Rechteck) Schreiben Sie eine Methode, die ein Rechteck zeichnet, das um einen beliebigen Winkel gedreht werden kann. Als Parameter sollen die linke obere Ecke, die Seitenlängen des Rechtecks und der Drehwinkel in Grad (gegen den Uhrzeigersinn) angegeben werden. Drehpunkt soll die linke obere Ecke sein.

24. [B] (Smileys) Erweitern Sie das Beispiel Example1903 so, daß die durch Mausklick gezeichneten Smileys nach einem repaint-Ereignis nicht verloren sind, sondern rekonstruiert und wieder auf dem Bildschirm angezeigt werden.

25. [B] (Polygone zeichnen mit Turtlegrafik) Verwenden Sie die Turtlegrafik, um eine Methode drawRegularPolygon zu entwickeln, die ein regelmäßiges Vieleck zeichnen kann. Die Anzahl der Ecken und die Länge jeder Seite soll dabei als Parameter übergeben werden können. Die folgende Abbildung zeigt das Ergebnis für regelmäßige Vielecke der Seitenlänge 60 mit drei, vier und fünf Ecken:

Falls Sie die Turtlegrafik noch nicht implementiert haben, finden Sie weiter unten eine Aufgabe, die genau beschreibt, was zu tun ist.
Aufg1425.java

26. [B] (Kreis zeichnen mit Turtlegrafik) Verwenden Sie die Klasse TurtleGraphics, um näherungsweise einen Kreis von etwa 200 Pixeln Durchmesser zu zeichnen.

27. [B] (Spirale zeichnen mit Turtlegrafik) Mit Hilfe der Turtlegrafik läßt sich sehr leicht eine Spirale zeichnen. Dazu brauchen lediglich eine Reihe kleiner werdender Rechtecke aneinandergereiht und jedesmal um einen festen Winkel gedreht zu werden:

Schreiben Sie ein Programm, das in der Lage ist, diese Art von Spiralen zu zeichnen.
Aufg1427.java

28. [B] (Verschieben eines Balls im Fenster) Schreiben Sie ein Programm, daß in einem Textfenster einen roten Ball anzeigt. Dieser soll per Drag- und Drop mit der Maus verschoben werden können. Verwenden Sie zur Darstellung eine Technik, wie sie in Kapitel 2 auf der Basis des XOR-Modus vorgestellt wurde.

29. [B] (Zeichenprogramm) Schreiben Sie ein einfaches pixelorientiertes Zeichenprogramm, das bei gedrückter Maustaste die Cursorbewegung nachzeichnet. Überlegen Sie sich einen Mechanismus, wie die gezeichnete Information auch nach einem repaint rekonstruiert werden kann.
Aufg1429.java

30. [B] (Eyes) Versuchen Sie, eine einfache Variante des X11-Maskottchens "Eyes" zu programmieren. Das Programm stellt ein paar Augen dar, deren Pupillenbewegung dem Mauscursor folgt, wenn er innerhalb des Fensters bewegt wird. Dadurch entsteht der Eindruck, daß die Augen dem Mauszeiger hinterhersehen.

31. [B] (Fraktales Dreieck) Manchmal ist es überraschend, wie mit Hilfe sehr einfacher Rechenregeln interessante Grafiken erzeugt werden können. Ein Beispiel dafür zeigt das Applet in folgender Abbildung:

Um die Grafik zu erzeugen, werden zunächst die drei Eckpunkte eines gleichseiten Dreiecks erzeugt und gezeichnet. Nun startet das Programm an einem beliebigen dieser Punkte und führt in einer Schleife folgende Schritte aus:

Schreiben Sie ein Programm, das dieses fraktale Dreieck realisiert.
Aufg1431.java

32. [B] (Kochkurven) Wenn man Rekursion und Grafik kombiniert, erhält man oft sehr schöne, fraktale Gebilde. Ein Beispiel dafür sind Kochkurven, die aufgrund ihres besonderen Aussehens auch Koch-Schneeflocken genannt werden:

Betrachten Sie dazu zunächst ein gleichseitiges Dreieck. Stellen Sie sich nun vor, daß in jeder der drei Seiten das mittlere Drittel durch die zwei Seiten eines kleineren gleichseitigen Dreiecks ersetzt wird. Jedes dieser vier Teilstücke wird nun seinerseits nach derselben Konstruktionsvorschrift in vier kleinere Teilstücke unterteilt, usw.

Schreiben Sie ein Programm, das mit Hilfe rekursiver Methodenaufrufe eine Kochkurve zeichnet. Brechen Sie die Rekursion ab, wenn die Länge einer Strecke unterhalb eines festen Minimalwertes liegt. Die Aufgabe ist einfacher zu lösen, wenn die Turtlegrafik verwendet wird. Leider erzielt man dabei aufgrund der Rundungsfehler durch die Drehungen und Bewegungen nur eine begrenzte Genauigkeit. Die obige Abbildung wurde auf diese Weise mit einer bei 10 Pixeln Seitenlänge abbrechen Rekursion erstellt und man kann bereits deutliche Positionierfehler erkennen.
Aufg1432.java

33. [B] (Weicher Schatten) Bei der Darstellung von Images auf Web-Seiten ist es seit einiger Zeit modern, Grafikelemente mit weichen Schatten (Softshadows) auszustatten. Im Gegensatz zu harten Schatten werden diese dabei nicht komplett in vollschwarz gezeichnet, sondern schrittweise über mehrere Graustufen angenähert. Sehen Sie sich das genaue Verfahren an einem Beispiel an und schreiben Sie dann eine Methode fillShadowedPolygon, die in der Lage ist, ein beliebiges Polygon mit einem dahinterliegenden weichen Schatten zu zeichnen.

34. [C] (Diagramme von Abelson und diSessa) Versuchen Sie, die Konstruktionsvorschrift der Diagramme zu verstehen, die in den folgenden Abbildungen gezeigt werden:

Alle wurden auf der Basis ein- und desselben Algorithmus erstellt und unterscheiden sich nur durch die Veränderung zweier Parameter Winkel und Anzahl. Der Startpunkt wurde durch ein schwarzes Kästchen markiert. Schreiben Sie eine Applikation, die diese Figuren erstellen kann und geben Sie Beispiele für Parametersätze, die weitere interessante Abbildungen produzieren. Auch bei der Lösung dieser Aufgabe ist die Turtlegrafik eine große Hilfe.
Aufg1434.java

35. [C] (Ausgabe einer Tabelle) Schreiben Sie ein Programm, das aus einem zweidimensionalen Array von Strings die grafische Darstellung einer Tabelle erzeugt. Die Tabelle soll mit einem Rahmen versehen und automatisch skaliert werden. Die Breite einer Spalte richtet sich dabei nach dem breitesten Element der Spalte. Gehen Sie davon aus, daß kein Element so breit ist, daß innerhalb eines Tabellenelements ein Zeilenumbruch erforderlich ist. Die erste Zeile des Arrays soll die Spaltenköpfe enthalten, die fett gedruckt werden sollen. Zur Erhöhung der Lesbarkeit sollen die einzelnen Zeilen der Tabelle einen farbigen Hintergrund haben. Dieser soll bei der Kopfzeile hellgrau und bei den anderen Zeilen abwechseln weiß und blaßgrün sein (in der Art von Tabellierpapier).

36. [C] (Linie zeichnen nach Bresenham) Die folgende Methode verwendet den Algorithmus von Bresenham, um eine gerade Linie zu zeichnen. Bresenham's Verfahren, das bereits 1965 publiziert wurde, verwendet nur Ganzzahlarithmetik ohne Multiplikationen und Divisionen (lediglich eine Multiplikation mit 2, die durch eine Schiebeoperation realisiert werden kann) und ist damit eines der schnellsten bekannten Verfahren zum Zeichnen einer Linie.

void drawLine(int x1, int y1, int x2, int y2)
{
   int sum, curx, cury;
   int dx, dy, i;

   sum  = x1 - x2;
   dx   = 2 * (x2 - x1);
   dy   = 2 * (y2 - y1);
   curx = x1;
   cury = y1;

   for (i = 0; i <= -sum; ++i) {
      setPixel(curx, cury);
      ++curx;
      sum += dy;
      if (sum >= 0) {
         ++cury;
         sum -= dx;
      }
   }
}
Eine Eigenart des Bresenham-Algorithmus ist es, daß er in der abgebildeten Form lediglich im ersten Quadranten funktioniert. Erweitern Sie die vorgestellte Methode so, daß sie in allen vier Quadranten funktioniert.

37. [C] (Textausgabe mit Zeilenumbruch) Schreiben Sie eine Methode drawFormattedText, die einen beliebigen Text innerhalb eines Rechtecks vorgegebener Größe ausgeben kann. Falls der Text nicht in eine Zeile paßt, soll er geeignet umbrochen und auf mehrere Zeilen verteilt werden. Der Umbruch soll dabei möglichst nur zwischen zwei Worten erfolgen. Die Methode soll die Standardfarbe und -schriftgröße des Fensters verwenden, in dem die Ausgabe erfolgt.

38. [C] (Hintergrund kacheln) Schreiben Sie ein Programm, das zwei Fenster besitzt. In einem der beiden Fenster kann ein 16 * 16 Pixel großes Icon mit der Maus editiert werden. Jeder Mausklick auf eines der Felder schaltet dieses abwechselnd zwischen schwarzer und weißer Darstellung um. In dem anderen Fenster wird das Icon in Originalgröße dargestellt. Dies erfolgt jedoch nicht nur einmal, sondern es werden soviele Icons neben- und übereinander ausgegeben (gekachelt), wie auf dem Fenster Platz finden. Mit diesem Programm besitzen Sie einen interaktiven Editor zum Entwurf gekachelter Hintergrundbilder.

39. [C] (Flächenfüllung) Pixelorientierte Malprogramme wie beispielsweise Paintbrush besitzen in der Regel eine Funktion, mit der sich zusammenhängende Farbflächen in einer beliebigen Farbe ausfüllen lassen. Dabei spielt es keine Rolle, ob die Fläche regelmäßig geformt ist oder nicht. Die Farbe erreicht alle Ecken, die vom Startpunkt über einen Weg von mindestens ein Pixel Breite zu erreichen sind. Schreiben Sie eine Methode fillWithColor, die eine einfarbige Fläche, die durch eine beliebig geformte andersfarbige Umrandung begrenzt wird, in einer weiteren Farbe einfärbt. Übergeben Sie die Füllfarbe und einen innerhalb der Füllfläche liegenden Punkt als Argument an die Methode.

Dieses Problem ist nicht so einfach zu lösen, wie es vielleicht scheinen mag. Die Schwierigkeit liegt darin, daß der Randbereich beliebig geformt sein kann und daher Teile der Fläche nicht direkt, sondern nur auf verschlungenen, engen Pfaden zugänglich sind. Ein mögliche Implementierung besteht darin, einen Stack zu verwenden, der eine Menge von waagerechten Linien enthält, die noch gezeichnet werden müssen und an deren oberem und unterem Rand jeweils weitere, potentiell zu füllende Bereiche anschließen. Jede Linie auf dem Stack wird durch ihren y-Wert sowie die beiden x-Werte für den Anfang und das Ende der Linie repräsentiert. Der Algorithmus kann grob wie folgt beschrieben werden:

  1. Zunächst wird der Stack initialisiert und die erste Linie darauf abgelegt. Sie ergibt sich, indem der als Parameter übergebene Startpunkt soweit wie möglich nach links und rechts verlängert wird.
  2. Solange der Stack nicht leer ist, wird nun jeweils das oberste Element vom Stack geholt und wie folgt bearbeitet:
    1. Die Linie wird gezeichnet.
    2. Nun wird von links nach rechts für jedes Pixel der Linie das unmittelbar darüber liegende Pixel betrachtet. Liegt es innerhalb der Füllfläche (hat also deren ursprüngliche Farbe), so wird es nach links und rechts solange verlängert, bis es die breiteste Linie ergibt, die ohne Unterbrechnung komplett innerhalb der Füllfläche liegt. Diese Linie wird auf den Stack gelegt und dieser Schritt wird mit dem nächsten Pixel rechts unter dem rechten Ende der eben erzeugten Linie wiederholt.
    3. Ist das rechte Ende der ursprünglichen Linie erreicht, wird der vorige Schritt analog mit dem Teil der Füllfläche ausgeführt, der unterhalb der Linie liegt.
    4. Anschließend wird die Linie vom Stack entfernt.
  3. Nachdem alle Elemente vom Stack entfernt wurden, ist die Fläche gefüllt.
Ihre Aufgabe besteht nun darin, die Methode fillWithColor zu implementieren und innerhalb eines kleinen Testprogramms auszuprobieren. Da es nicht ganz einfach ist, die aktuelle Farbinformation aus dem Bildschirmspeicher zu lesen, empfehlen wir Ihnen, diese in einem zweidimensionalen Array abzulegen, dessen Inhalt in der paint-Methode angezeigt wird. Mit der Maus sollte es möglich sein, die Farbe einzelner Pixel zu verändern und so eine beliebig geformte Füllfläche zum Test des Verfahrens zu erzeugen.

40. [C] (Texturen) Texturen sind Strukturen, die auf vom Computer erzeugte Oberflächen projiziert werden, damit sie echter wirken und das Aussehen bestimmer Materialien nachahmen. Texturen können mit Hilfe von Images erzeugt werden, die man auf die Oberfläche kopiert, oder sie können mit Hilfe algorithmischer Verfahren errechnet werden. Ihre Aufgabe besteht nun darin, ein Fenster mit holzartiger Oberfläche zu konstruieren. Verwenden Sie dazu kein Image, sondern versuchen Sie, die Textur auf algorithmische Weise anzunähern. Die Güte Ihres Verfahrens bestimmt die Authenzität der Oberfläche.

41. [C] (Button) Versuchen Sie, einen Button nachzuprogrammieren. Schreiben Sie dazu ein Programm mit einem Fenster, das einen Button zeichnet und dessen optische Veränderungen beim Drücken oder Loslassen der Maustaste nachahmt. Versuchen Sie, das Standardverhalten eines Buttons so genau wie möglich nachzuahmen. Sehen Sie sich dazu genau an, wie ein Button reagiert, wenn man bei gedrückter Maustaste die Schaltfläche verläßt (und wieder betritt) oder was passiert, wenn die Maus mit gedrückter Taste auf den Button gezogen wird.

42. [C] (Turtlegrafik) In den 70er Jahren wurde das Prinzip der Turtlegrafik von Seymor Papert und seinen Kollegen am renommierten Massachusetts Institute of Technology entwickelt. Populär wurde die Turtlegrafik mit der Sprache LOGO, deren integraler Bestandteil sie ist.

Die Turtlegrafik dient dazu, Zeichnungen auf einem hochauflösenden Bildschirm oder Drucker auszugeben. Dazu besitzt sie einen imaginären Zeichenstift, der zu jedem Zeitpunkt an einer bestimmten Stelle der Ausgabefläche steht, in eine bestimmte Richtung zeigt und entweder die Ausgabefläche berührt oder über ihr schwebt. Der Zeichenstift kann nun folgende Aktionen ausführen:

Mit der Turtlegrafik lassen sich sehr leicht einfache und auch komplexe Grafiken anfertigen. Ein Rechteck der Seitenlänge 100 wird beispielsweise durch die Befehlsfolge:
Vorwärts 100
Rechts 90
Vorwärts 100
Rechts 90
Vorwärts 100
Rechts 90
Vorwärts 100
Rechts 90
erzeugt. Der Vorteil gegenüber x-/y-achsenbezogener Grafikausgabe besteht darin, daß die gezeichnete Figur sehr leicht gedreht und verschoben werden kann. Dazu muß lediglich die Startposition oder der Anfangswinkel, den der Zeichenstift vor dem Zeichnen der gewünschten Figur hat, verändert werden. Die Ausgabekommandos bleiben dagegen unverändert. Fast alle Prrogramme, die aufwendige Turtlegrafiken erstellen, machen sich dieses Prinzip zu Nutze und verwenden leicht parmetrisierbare Primitive, die in verschiedenen Größen, Ausrichtungen und an verschiedenen Bildschirmpositionen wiederholt ausgegeben werden.

Implementieren Sie eine Klasse TurtleGraphics, die aus Graphics abgeleitet wird. Realisieren Sie folgende Methoden:

Testen Sie ihre Klasse TurtleGraphics an einigen einfachen Beispielen, bei denen Dreiecke, Rechtecke oder ähnliche Figuren in verschiedenen Größen und Orientierungen ausgegeben werden. Die nächsten Aufgaben werden einige interessante Anwendungen der Turtlegrafik zeigen.

Der Schlüssel zur Implementierung der Methode movePen liegt in der korrekten Anwendung der Winkelfunktionen sin und cos. Betrachten Sie die zurückzulegende Strecke als Hypothenuse eines rechtwinkligen Dreiecks, dessen Katheten parallel zu den Achsen des Koordinatensystems verlaufen. Ihre Länge bestimmt die Entfernung in x- und y-Richtung, die der Zeichenstift bewegt werden muß, um seine Zielposition zu erreichen.
Aufg1442.java TurtleGraphics.java

43. [C] (Baum des Phythagoras) Der Baum des Pythagoras ist eine sehr reizvolle Aufgabe aus dem Gebiet der fraktalen Grafiken. Er illustriert den Satz des Pythagoras und entsteht, indem über den Seiten eines rechtwinkligen Dreiecks fortlaufend Quadrate und über ihnen weitere rechtwinklige Dreiecke usw. gezeichnet werden:

Schreiben Sie ein Programm, das mit Hilfe der Turtlegrafik den Baum des Pythagoras zeichnet. Ihr Programm soll die Lage und Größe des Anfangsquadrats und das Seitenverhältnis des Dreiecks abfragen. Experimentieren Sie mit unterschiedlichen Farbverläufen bei zunehmender Rekursionstiefe und mit verschiedenen Startparametern und geben Sie einige Beispiele für besonders hübsche Bäume.
Aufg1443.java

44. [C] (Histogramm zeichnen) In den Aufgaben zu Kapitel 4 bis 6 sollten Sie ein Programm entwickeln, das ein Histogramm zur pseudographischen Darstellung einer Menge von Ganzzahlen darstellt. Implementieren Sie nun eine GUI-basierte Variante, die das Histogramm in hochauflösender Grafik ausgibt.

45. [C] (Terminalfenster) Auch in Zeiten fortgeschrittener GUI-Programmierung bieten viele Entwicklungssysteme ein textorientiertes Fenster, in dem zeichenorientierte Ein- und Ausgaben vorgenommen werden können. Selbst Java stellt ein solches bei Zugriff auf System.out und System.in automatisch zur Verfügung. Ihre Aufgabe besteht nun darin, eine Klasse TerminalFrame zu entwickeln, die ein Terminalfenster mit einer Größe von 40 * 15 Zeichen (z.B. für die Simulation eines Palmtops) zur Verfügung stellt. Das Fenster soll alle Zeichen des ASCII-Zeichensatzes plus deutsche Umlaute anzeigen können. Sein Inhalt soll gepuffert werden, um nach einem repaint automatisch rekonstruiert werden zu können. Daneben sollen folgende Methoden zur Verfügung gestellt werden (als Remineszenz an Turbo Pascal 3.0, 1987):

Automatische Scrollfunktionen sollen nicht realisiert werden. Schreibt das Programm über den Rand, bleibt der überschüssige Text unsichtbar, die Positionierung erfolgt ausschließlich mit gotoxy.
© 1995-2004 Guido Krüger - Last updated 31 Dec 2003 - Back to top-level page