Zeichnen Sie die folgende Figur. Dabei wird das Basisobjekt jeweils in horizontaler Richtung n-mal unter Beibehaltung der Größe sowie in vertikaler Richtung m-mal unter Halbierung der Größe wiederholt:

Lösung
Zur Lösung dieser Aufgabe wird die Datei unibwm.jar benötigt. Sie kann in der Eclipse Umgebung in den Projektoptionen unter “add external jar” hinzugefügt werden.
import java.util.Scanner; // Scanner für die Eingabe von Werten
import unibwm.*; // Grafik für die Ausgabe der Objekte
public class Aufgabe11
{
public static void main(String[] args)
{
// Variablen Deklaration
Grafik gfkZeichnung = new Grafik();
Scanner scnEingabe = new Scanner(System.in);
int iAnzahlHorizontal, iAnzahlVertikal;
// Abmessungen des Grundobjektes
double dStartBreite, dStartHoehe;
// Skalierte Abmessungen des Grundobjektes und aufsummierte Höhe
double dAktuelleHoehe, dAktuelleBreite, dGesamtHoehe;
// Variablen Initialisierung
dGesamtHoehe = 0;
System.out.print("Bitte horizontale Anzahl eingeben: ");
iAnzahlHorizontal = scnEingabe.nextInt();
System.out.print("Bitte Startbreite eingeben: ");
dStartBreite = scnEingabe.nextDouble();
System.out.print("Bitte vertikale Anzahl eingeben: ");
iAnzahlVertikal = scnEingabe.nextInt();
System.out.print("Bitte Starthöhe eingeben: ");
dStartHoehe = scnEingabe.nextDouble();
dAktuelleHoehe = dStartHoehe;
dAktuelleBreite = dStartBreite;
for (int i = 0; i < iAnzahlVertikal; ++ i)
{ // Äußere Schleife für vertikalen Durchlauf
if (i > 0) // ab dem zweiten Schritt Änderung der Höhe und Breite
{
dGesamtHoehe += dStartHoehe / Math.pow(2, i-1);
dAktuelleHoehe /= 2.;
dAktuelleBreite /= 2.;
} // end if
// Durchgängige horizontale Linie
gfkZeichnung.addLine(0, dGesamtHoehe+dAktuelleHoehe,
dStartBreite * iAnzahlHorizontal,
dGesamtHoehe+dAktuelleHoehe);
for (int j = 0; j < iAnzahlHorizontal * Math.pow(2, i); ++ j)
{ // innere Schleife für horizontalen Durchlauf
double x1, x2, y1, y2;
x1 = dAktuelleBreite * j;
x2 = dAktuelleBreite * (j+1);
y1 = dGesamtHoehe;
y2 = dGesamtHoehe+dAktuelleHoehe;
gfkZeichnung.addLine(x1, y1, x2-dAktuelleBreite / 2., y2);
gfkZeichnung.addLine(x2, y1, x2-dAktuelleBreite / 2., y2);
gfkZeichnung.addLine(x1, y1, x1, y2);
gfkZeichnung.addLine(x2, y1, x2, y2);
} // end for j
} // end for i
gfkZeichnung.show("Ausgabe zu Aufgabe 11");
} // end main
} // end class


