Lehrer Nussbaumer - JAVA (eine kleine Einführung ;)

Grundlagen

GUI

Eingabe

Ausgabe

Applikationen

Applets

  1. CheckBoxes
  2. Events
  3. Menüs
  4. Langton-Ameise
  5. Turmiten
  6. Fraktale
  7. Zelluläre Automaten
  8. Fraktales Wachstum
  9. Logistisches Wachstum
  10. Feigenbaum Diagramm
  11. Sortieralgorithmen
  12. Lorenz-Plot

Servlets

Beispiele

Spiele

IDEs

Skriptum

JAVA-DOCS


-----------------
letzte Änderung:
09 December 2021
-----------------
Lehrer Nussbaumers Seite

... in Arbeit ...

Fraktale

Fraktale Geometrie wird durch Algorithmen beschrieben, die beispielsweise in einer Art "Rückkopplung" definiert sind. Um dies realisieren zu können, setzen wir das Verständnis von Rekursionen und die Verwendung einer einfachen Turtlegrafik voraus.

Von einer Rekursion sprechen wir, wenn eine Methode sich selber aufruft. Dieser Vorgang muss mit einer bestimmten Abbruchbedingung beendet werden. Verringert man bei jedem Aufruf etwa die Größe eines Objekts, so erhält man die oben skizzierte Rückkopplung.

Von frühren Programmiersprachen her (vgl. LOGO) wird eine einfache Turtlegrafik überliefert: Eine "Schildkröte" bewegt sich über das Zeichenfeld und hinterlässt dabei die gewünschte Zeichenspur... Wir verwenden dabei nur zwei Zeichenoperationen, die wir (in Anlehnung an die Turtlegrafik von LOGO)

fd(strecke)
und
rt(winkel)
nennen.

Turtle.java

 import java.awt.*;

class Turtle {
    double x;
    double y;
    double alpha;
    Container c;
    Graphics g;

    Turtle(Container ct, double x, double y) {
	c = ct;
	g = c.getGraphics();
	g.setColor(Color.black);
	this.x = x;
	this.y = y;
	alpha = 0;
    }

    public void fd (double strecke) {
	double aa  = alpha * Math.PI / 180;
	double dx = strecke * Math.cos(aa);
	double dy = strecke * Math.sin(aa);
	g.drawLine((int) x, (int) y, (int) (x+dx), (int) (y+dy));
	x = x+dx;
	y = y+dy;
    }

    public void rt (double winkel) {
	alpha = alpha - winkel;
    }
}

In der Klasse Turtle verwenden wir die Instanzvariablen x und y: Damit wird die Startposition der Turtle festgelegt. Die Klasse Container wtellt ein Objekt zur Verfügung, das andere Objekte enthalten kann; hier ist das die Zeichenfläche g.

In der Methode fd(strecke) wird zunächst der "aktuelle" Winkel der Turtle ins Bogenmaß umgerechnet. Aus der Strecke und dem Winkel wird mit Hilfe der Winkelfunktionen der Zuwachs dx und dy in den beiden Koordinatenrichtungen bestimmt und schließlich die Linie von der alten Position (x,y) zur neuen (x+dx, y+dy) gezeichnet. Die neue Position wird anschließend in den Variablen x und y gespeichert.

In der Methode rt(winkel) wird der Drehwinkel einfach zum aktuellen Winkel addiert (die Subtraktion ergibt sich aus der Orientierung der y-Achse von "oben nach unten").

Beispiel: Die Kochkurve

Ausgangspunkt der Kochkurve ist eine gerade Linie, die in drei gleiche Strecken geteilt wird. Über dem mittleren Teilstück wird ein gleichseitiges Dreieck (ohne Basis) errichtet. Durch Rekursion erhält man längs jeder neuen Verbindungsstrecke die gleiche (verkleinerte) Figur...


Code:

import java.awt.*;
import java.applet.*;
import Turtle.*;

public class koch extends Applet {

    public void paint (Graphics g) {
	Turtle t = new Turtle(this,0,100);
	kochkurve(t, 300, 5);
    }

    public void kochkurve (Turtle t, double strecke, int ebene) {
	if (ebene > 0) {
	    kochkurve (t, strecke/3, ebene - 1);
	    t.rt(60);
	    kochkurve(t, strecke/3, ebene -1);
	    t.rt(-120);
	    kochkurve(t, strecke/3, ebene -1);
	    t.rt(60);
	    kochkurve(t, strecke/3, ebene -1);
	} else t.fd(strecke);
    }
}

Kommentar:

Die Klasse Turtle muss (hier) im gleichen wie die Klasse koch.java gespeichert sein.


Weitere Fraktale:


© Alfred Nussbaumer, Weblog "MiniNuss"