22: Funktionen 6 – Grafikobjekte

 

Schreiben Sie eine Methode zur Implementierung der grafischen Grundfigur aus Aufgabe 11 und lösen Sie Aufgabe 11 unter Nutzung dieser Methode.

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 Grafik

public class Aufgabe22
{
	// statische Variable, damit auch die ZeicheFigur-Funktion Zugriff hat:
	static Grafik gfkZeichnung;

	public static void main(String[] args)
	{
		// Variablen Deklaration
		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

			for (int j = 0; j < iAnzahlHorizontal * Math.pow(2, i); ++ j)
			{ // innere Schleife für horizontalen Durchlauf
				double x1, y1, x2, y2;
				x1 = dAktuelleBreite * j;
				x2 = dAktuelleBreite * (j + 1);
				y1 = dGesamtHoehe;
				y2 = dGesamtHoehe + dAktuelleHoehe;

				ZeichneFigur(x1, y1, x2, y2);
			} // end for j
		} // end for i

		gfkZeichnung.show("Ausgabe zu Aufgabe 11");
	} // end main

	public static void ZeichneFigur(double dStartX, double dStartY,
			double dEndX, double dEndY)
	{
		gfkZeichnung.addLine(dStartX, dStartY, dStartX, dEndY);
		gfkZeichnung.addLine(dStartX, dEndY, dEndX, dEndY);
		gfkZeichnung.addLine(dEndX, dEndY, dEndX, dStartY);
		gfkZeichnung.addLine(dStartX, dStartY,
				.5 * (dEndX - dStartX) + dStartX, dEndY);
		gfkZeichnung.addLine(.5 * (dEndX - dStartX) + dStartX,
				dEndY, dEndX, dStartY);
	} // end ZeichneFigur
} // end class