09: Schleifen 2 – Quadrate zeichnen

 

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