Schreiben Sie ein Programm zur Darstellung der folgenden Figur:

Dabei wird ein vorgegebenes Rechteck mit den Kantenlängen a und b n-mal gezeichnet, wobei jedes weitere Rechteck in der Kantenlänge jeweils halbiert und zentriert dargestellt wird.
Wie lautet das Programm, wenn alle Rechtecke die gleiche rechte obere Eckkoordinate besitzen:

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.
Zentriert
import java.util.Scanner; // Scanner für die Eingabe von Werten
import unibwm.*; // Grafik für die Ausgabe der Rechtecke
public class Aufgabe9
{
public static void main(String[] args)
{
// Variablen Deklaration
Scanner scnEingabe = new Scanner(System.in);
Grafik gfkZeichnung = new Grafik();
int iRechtecke;
double dStartBreite, dStartHoehe, dAktuelleBreite, dAktuelleHoehe;
// Variablen Initialisierung
System.out.print("Bitte Anzahl der Rechtecke eingeben: ");
iRechtecke = scnEingabe.nextInt();
System.out.print("Bitte Breite des ersten Rechtecks eingeben: ");
dStartBreite = scnEingabe.nextDouble();
System.out.print("Bitte Höhe des ersten Rechtecks eingeben: ");
dStartHoehe = scnEingabe.nextDouble();
dAktuelleBreite = dStartBreite;
dAktuelleHoehe = dStartHoehe;
for (int i = 0; i < iRechtecke; ++ i)
{ // Zeichnet angegebene Anzahl an Rechtecken ineinander
if (i > 0)
{
dAktuelleBreite = dStartBreite / Math.pow(2, i);
dAktuelleHoehe = dStartHoehe / Math.pow(2, i);
} // end if
gfkZeichnung.addLine
(dStartBreite / 2.-dAktuelleBreite / 4.,
dStartHoehe / 2.-dAktuelleHoehe / 4.,
dStartBreite / 2.+dAktuelleBreite / 4.,
dStartHoehe / 2.-dAktuelleHoehe / 4.);
gfkZeichnung.addLine
(dStartBreite / 2.+dAktuelleBreite / 4.,
dStartHoehe / 2.-dAktuelleHoehe / 4.,
dStartBreite / 2.+dAktuelleBreite / 4.,
dStartHoehe / 2.+dAktuelleHoehe / 4.);
gfkZeichnung.addLine
(dStartBreite / 2.+dAktuelleBreite / 4.,
dStartHoehe / 2.+dAktuelleHoehe / 4.,
dStartBreite / 2.-dAktuelleBreite / 4.,
dStartHoehe / 2.+dAktuelleHoehe / 4.);
gfkZeichnung.addLine
(dStartBreite / 2.-dAktuelleBreite / 4.,
dStartHoehe / 2.+dAktuelleHoehe / 4.,
dStartBreite / 2.-dAktuelleBreite / 4.,
dStartHoehe / 2.-dAktuelleHoehe / 4.);
} // end for
gfkZeichnung.show("Ausgabe zur Aufgabe 9");
} // end main
} // end class
oben rechts ausgerichtet
import java.util.Scanner; // Scanner für die Eingabe von Werten
import unibwm.*; // Grafik für die Ausgabe der Rechtecke
public class Aufgabe9b
{
public static void main(String[] args)
{
// Variablen Deklaration
Scanner scnEingabe = new Scanner(System.in);
Grafik gfkZeichnung = new Grafik();
int iRechtecke;
double dStartBreite, dStartHoehe, dAktuelleBreite, dAktuelleHoehe;
// Variablen Initialisierung
System.out.print("Bitte Anzahl der Rechtecke eingeben: ");
iRechtecke = scnEingabe.nextInt();
System.out.print("Bitte Breite des ersten Rechtecks eingeben: ");
dStartBreite = scnEingabe.nextDouble();
System.out.print("Bitte Höhe des ersten Rechtecks eingeben: ");
dStartHoehe = scnEingabe.nextDouble();
dAktuelleBreite = dStartBreite;
dAktuelleHoehe = dStartHoehe;
gfkZeichnung.addLine(0, dStartHoehe, dStartBreite, dStartHoehe);
gfkZeichnung.addLine(dStartBreite, 0, dStartBreite, dStartHoehe);
for (int i = 0; i < iRechtecke; ++ i)
{ // Zeichnet Rechtecke oben rechts in die Ecke
if (i > 0)
{
dAktuelleBreite = dStartBreite / Math.pow(2, i);
dAktuelleHoehe = dStartHoehe / Math.pow(2, i);
} // end if
gfkZeichnung.addLine
(dStartBreite-dAktuelleBreite,
dStartHoehe-dAktuelleHoehe,
dStartBreite,
dStartHoehe-dAktuelleHoehe);
gfkZeichnung.addLine
(dStartBreite-dAktuelleBreite,
dStartHoehe-dAktuelleHoehe,
dStartBreite-dAktuelleBreite,
dStartHoehe);
} // end for
gfkZeichnung.show("Ausgabe zu Aufgabe 9 (Alternativlösung)");
} // end main
} // end class


