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