Spaß-mit-Mathematik.de

Des Schockwellenreiters Seiten über (Unterhaltungs-) Mathematik

Suchen in:
Suche:
In Partnerschaft mit Amazon.de
Startseite | Schockwellenreiter | Impressum

Quelltext der Lorenzgleichung als Java-Applet


/*
	Die Lorenz Gleichung
	nach: Dieter Hermann: Algorithmen für Chaos und Fraktale,
	Bonn (Addison-Wesley) 1994, S. 80ff.
	und: Frank Piefke: Simulation mit dem Personalcomputer,
	Heidelberg (Hüthig) 1991
	Die Parameter der Gleichung sind aus: Ian Stewart: Spielt
	Gott Roulette, Frankfurt (Insel TB) 1993
	(p) Jörg Kantel 1997
*/

import java.awt.*;
import java.applet.Applet;

public class Lorenz extends Applet
{
	// Konstanten-Deklaration.
	private static final double SIGMA	= 10.0;
	private static final double RHO		= 28.0;
	private static final double BETA		= 8.0/3.0;
	private static final double STEP		= 0.01;
	private static final int	 MAXSTEP	= 50;
	// Die Sklaierungsfaktoren in x- und y-Richtung
	private static final double XFAC		= 6.0;
	private static final double YFAC		= 4.5;

	// Globale Variablen.
	private double	dx, dy, dz, x, y, z, xOld, yOld, zOld, t;
	private Button startButton;
	private boolean gestartet = false;

public void init()
	{
		// Erzeuge einen Button und füge ihn zum Applet hinzu.
		// Benutze BorderLayout, um ihn unten anzuordnen.
		setLayout(new BorderLayout());
		setBackground(Color.white);
		startButton = new Button("Start");
		startButton.setForeground(Color.black);
		startButton.setBackground(Color.lightGray);
		this.add("South", startButton);
	}

public boolean action(Event event, Object arg)
	{
		if (event.target == startButton)
		{
			gestartet = true;
			repaint();
			return true;
		}
		else
		{
			return false;
		}
	}

public void paint(Graphics g)
	{
		if (gestartet)
		{
			// Zuerst die Variablen initialisieren
			xOld = 0.01; yOld = 0.01; zOld = 0.0;
			t = 0;
		
			while (t < MAXSTEP)
			{
				// Die Berechnung nach dem Eulerverfahren (Polygonzugmethode).
				dx = SIGMA*(yOld - xOld)*STEP;
				dy = (-xOld*zOld + RHO*xOld - yOld)*STEP;
				dz = (xOld*yOld - BETA*zOld)*STEP;
				x = xOld + dx;
				y = yOld + dy;
				z = zOld + dz;

				// Dann das Kurvensegment skalieren und zeichnen.
				// x-y-Projektion in Rot.
				g.setColor(Color.red);
				g.drawLine((int)(XFAC*xOld) + 200, 250 - (int)(YFAC*yOld),
							  (int)(XFAC*x) + 200,    250 - (int)(YFAC*y));
				// x-z-Projektion in Blau.
				g.setColor(Color.blue);
				g.drawLine((int)(XFAC*xOld) + 200, 250 - (int)(YFAC*zOld),
							  (int)(XFAC*x) + 200,    250 - (int)(YFAC*z));

				t = t + STEP;
				xOld = x; yOld = y; zOld = z;
			}
			// Die Farbe wieder zurücksetzen.
			g.setColor(Color.black);
			gestartet = false;
		}
	}
}

zurück zum Artikel