Programmierung der Apfelmännchen mit Turbo Pascal

© Norbert Meier 2019


Veranlassung

Schon vor etwa 30 Jahren habe ich auf dem Commodore C64 mit der Programmiersprache
Basic ein Programm geschrieben, dass farbige Apfelmännchen auf dem Bildschirm erzeugt.
Wenn Sie als Leser gleich mal einige Bilder von Apfelmännchen anschauen möchten, dann
geben Sie bei Google das Stichwort "Apfelmännchen" ein und klicken oben in der Menü-
leiste auf "Bilder". Im Suchergebnis auf der ersten Seite können Sie die folgenden vier Bilder
mit Apfelmännchen ausfindig machen.

Bild 1

Ich habe nun vor, auf meinem Laptop "ASUS F751L" mit Hilfe der leicht erlernbaren Programmier-
sprache "Turbo Pascal" unter Windows 10 die Apfelmännchen zu programmieren. Von dieser Pro-
grammiersprache befindet sich in meinem Bücherschrank noch ein wertvolles Nachschlagewerk mit
dem Titel "Turbo Pascal 7.0" von W. und V. Kassera.

Bild 2

Das Kompendium zeigt eine Reihe von Programmier-Beispielen. Für mein Vorhaben ist besonders
wichtig das Kapitel "Grafik mit dem BGI" um den Grafikmodus im Programm einschalten zu können.
Zu Turbo Pascal gehört ein leistungsfähiges Grafikpaket, das sich Borland Graphic Interface, kurz
BGI, nennt. Ein kompakter Grafikbefehl ist z.B. das Setzen eines farbigen Punktes mit putpixel(x,y, -
farbe).
Besonders komfortabel ist der Editor von Turbo Pascal: Im Menü "Edit" kann man Programmteile
kopieren, einfügen und ausschneiden. Das geschriebene Programm läßt sich dann als Textdatei
abspeichern.


Mathematische Grundlagen zur Beschreibung der Apfelmännchen

Ab etwa 1980 wurde ein neues Forschungsgebiet der Mathematik begonnen: Es werden Zahlen-
folgen untersucht, die durch die nachfolgend dargestellte Formel berechnet werden können.

Bild 3

Achtung, die Formel besitzt eine komplexe Schreibweise, dass heißt, sowohl die Konstante C als
auch die Zahlen Zn und Zn+1 sind komplexe Zahlen, die aus einem Realteil (Re) und einem Imagi-
närteil (Im) bestehen. Die Konstante C ist eine komplexe Zahl in der Form

C = cx + cy·i .

Bei der komplexen Zahl C heißt cx der Realteil und cy der Imaginärteil von C .
Realteil cx und Imaginärteil cy sind rellen Zahlen und i ist die imaginäre Einheit.

Für die komplexe Zahl Z wird definiert:

Z = zx + zy·i .

Von den beiden komplexen Zahlen, zum Beispiel:

Z1 = zx1 + zy1·i und Z2 = zx2 + zy2·i

mit Real- und Imaginärteil ist die Summe wieder eine komplexe Zahl und lautet:


Z1 + Z2 = (zx1 + zx2) + (zy1 + zy2)·i .

Es werden also lediglich die Realteile und die Imaginärteile addiert.

Aus der anfangs dargestellten Formel für die komplexe Zahlenfolge ist nun das Quadrat von Z zu
bilden:

Z2 = (zx + zy·i)·(zx + zy·i).

Das Zwischenergebnis für das Quadrat von Z ist zunächst:


Z2 = (zx)2 + zx·zy·i + zx·zy·i + (zy)2·i·i = (zx)2 + 2·zx·zy·i + (zy)2·i·i

Das Quadrat i·i kann berechnet werden, wenn man die Definition der imaginären Einheit verwendet,
die vom Schweizer Mathematiker Leonhard Euler (1707 - 1783) stammt.

Bild 4

Auch das Quadrat von Z ist wiederum eine komplexe Zahl in der Form:


Z2 = (zx)2 - (zy)2 + 2·zx·zy·i


Für die komplexe Folge lautet damit die Rechenvorschrift für das Folgeglied:


Zn+1 = {(zx)2 - (zy)2 + cx} + (2·zx·zy + cy)·i .

Im Programm wird der Realteil berechnet mit: (zx)2 - (zy)2 + cx

und der Imaginärteil mit: 2·zx·zy + cy .


Darstellung komplexer Zahlen

Die Darstellung komplexer Zahlen erfolgt in der Gauß'schen Zahlenebene mit eingefügtem kartesischen
Koordinatensystem. Der Realteil (Re) wird als Abszisse und der Imaginärteil (Im) als Ordinate aufgetragen,
wie das folgende Bild zeigt:

Bild 5


Berechnung der komplexen Zahlenfolgen

Beispiel 1: Mit der Konstanten C = 3 + 2·i erhält man:


Z0 = 0
Z1 = 3 + 2·i
Z2 = 32 - 22 + 3 + ( 2·3·2 + 2)·i = 8 + 14·i
Z3 = 82 - 142 + 3 + ( 2·8·14 + 2)·i = -129 + 226·i


Beispiel 2: Mit der Konstanten C = -0,5 - 0,4·i erhält man:


Z0 = 0
Z1 = -0,5 - 0,4·i
Z2 = 0,52 - 0,42 - 0,5 + ( 2·0,5·0,4 - 0,4)·i = -0,41 + 0·i
Z3 = 0,412 - 02 - 0,5 + ( -2·0,14·0 - 0,4)·i = -0,3319 - 0,4·i


Ein Apfelmännchen nur im Bereich des Nullpunktes

Um überhaupt einmal die Lage und die Ausdehnung des Apfelmännchen in der Gauß'schen Ebene
zu erkennen, habe ich einen großen Bereich untersucht und kann zeigen, dass das Apfelmännchen
nur im Nahbereich des Nullpunktes in Erscheinung tritt.

Bild 6


Das Koordinatensystem mit Beschriftung und der blau dargestellte Kreis mit dem Radius r = 2
wurden ebenfalls programmiert. Liegt von der komplexen Zahlenfolge ein Punkt Z = zx + zy·i
erstmals außerhalb des Kreises, kann die Berechnung abgebrochen werden, da weitere Punkte
immer weiter vom Nullpunkt entfernt liegen.


Komplexe Zahlenfolge im Bild darstellen

Mit den Programmanweisungen moveto(xm,ym) und dem Folgebefehl lineto(x1,y1) können Verbindungs-
linien zwischen den Punktfolgen gezeichnet werden. Zwei Zahlenfolgen zeigt das nächste Bild:

Bild 7

Liegt die Konstante C außerhalb des Apfelmännchens gehen die berechneten Punkte (siehe gelbe Linien)
der Zahlenfolge schnell aus dem Kreis mit r = 2 heraus; die Folge wird abgebrochen. Liegt dagegen
die Konstante C im Apfelmännchen bleibt die Zahlenfolge im Apfelmännchen (siehe blaue Linien).
Wie man im obigen Bild sehen kann, werden die blauen Linien schließlich nach 11 Iterationsschritten
abgebrochen.
Wenn per Programm die Iterationsschritte auf 100 (Tiefe im Programm) erhöht werden, erkennt man
im folgenden Bild, dass drei verschiedene Folgen im Apfelmännchen, jeweils auf einen endlichen Wert,
zustreben, der von der Lage der Konstanten C (siehe im Bild das Kreuz) abhängig ist.

Bild 8


Großes Apfelmännchen mit Farben im Außenberech

Im Handbuch vom Turbo Pascal Kompendium sind die ersten 15 Farben wie folgt definiert:

Bild 9

Sollen diese Farbnummern im Programm für die Apfelmännchen übergeben werden, liefert
die folgende Pascal-Anweisung die Farbwerte:


farbe := zaehler mod 15;

Die Operation MOD liefert den Rest nach einer Integerdivision. Beispielsweise ist 89 mod 15 zu verstehen
als "Teile 89 durch 15, und gib den ganzzahligen Rest aus". Das Ergebnis ist in diesem Fall 5 .
Der Farbverlauf im Außenbereich des Apfelmännchens sieht dann wie folgt aus:

Bild 10


Der Programm-Code wurde mit Hilfe des Editors von Free Pascal geschrieben. Der
Programmanfang ist im Fenster des Editors zu erkennen.

Bild 11


Das vollständige Programm zum Erzeugen des Apfelmännchen ohne Koordinatenkreuz
kann nachfolgend als Textdatei betrachtet werden.


Da die Struktur der Apfelmännchen symmetrisch zur x-Achse aufgebaut ist, reicht zur Orientierung
die obere Hälfte, wie im folgenden Bild zu sehen ist:

Bild 12

Bei genauerer Betrachtung erkennt man ein gelbes Fadenkreuz. Dies ist der Mittelpunkt (xm,ym)
des nachfolgenden Bildes.


Vergrößerung eines kleinen Fensters am Randbereich

Die programmtechnischen Änderungen für kleine Fensterausschnitte sind im Einzelnen:

1. Die Gitterlinien der Gauß'schen Ebene werden nicht mehr dargestellt.
2. Der Mittelpunkt eines rechteckigen Ausschnittes bekommt die Koordinaten xm + ym·i .
3. Die Breite in x-Richtung wird festgelegt. Z.B. die Breite = 0.1 .
4. Die im Programm festgelegten Kenndaten ( xm, ym, Breite) werden oben links im Bild eingeblendet.
5. Ein Massstab in Form einer waagerechten Linie (1/10 Breite) wird ebenfalls eingeblendet.


Bild 13

Bei dieser Vergrößerung sind mehrere kleine Apfelmännchen im obigen Bild zu erkennen.


Darstellung der möglichen Pixelfarbe mit dem Grafikinterface

Weitere Farben können mit Turbo Pascal dargestellt werden, wenn die Farbzahl erhöht wird:

Bild 14

Es besteht im Programm die Möglichkeit, ein Farb-Array zu definieren, um dem Apfelmännchen
am Außenrand z.B. erst rote, dann gelbe, danach hellblau und zum Schluß dunkelblaue Farbzonen
zu geben.

Bild 15


Das "brennende" Apfelmännchen sind mit dieser Farbfestlegung dann so aus:

Bild 16


Wo liegen die Seepferchen ?

Diese bekannten Ausschnitte sind auch im Internet zu finden. Ich begnüge mich mit
schwarzen Seepferdchen mit einem hellgrünen Hintergrund:

Bild 17


Eine weitere Vergrößerung des einzelnen Seepferdchens zeigt das nächste Bild:

Bild 18


Der Fractalizer aus dem Internet

Der Fractalizer ist Freeware und kann daher kostenlos aus dem Internet per Download auf
auf den eigenen Rechner installiert werden. Das Startfenster mit den Bedienmenüs zeigt
ein Apfelmännchen:

Bild 19

Die Bedienung ist sehr einfach: Man kann mit dem gedrückten Cursor einen kleinen weiß/blauen
Bereich, z.B. am Randbereich des Apfelmännchens, aufziehen. Nach dem Loslassen des Cursors
werden vom Bildbereich die Bitmapdaten angezeigt.

Bild 20

Dann kann mit "OK" die Berechnung des ausgewählten Bildbereichs gestartet werden:

Bild 21


Geht man etwas tiefer in den "Zwickel" zwischen dem linken Kopfteil und dem großem Apfelkörper,
etwa in den Breich von -0,675 bis -0,275 auf der x-Achse und von 0,74 bis 0,48 auf der y-Achse,
dann erhält man nach mehreren Bereichs-Eingrenzungen mit automatischer Vergrößerung das folgende
Bild:

Bild 22


Besonders beeindruckend sind die anwählbaren Beispiel-Bilder. Das Bild-Nr.3 zeigt ein Fractal
von einem extrem kleinen Bildbereich, der in der Mitte wieder ein kleines Apfelmännchen zeigt:

Bild 23

Die Kenndaten sind: Breite = 0,000000000000000065 , Iterationstiefe = 5000 und Rechenzeit = 41 Sek.

Es bleibt abzuwarten, ob mein Pascal-Programm mit speziellen Änderungen, z.B. doppelte
Genauigkeit, in diesem Datenbereich brauchbare Ergebnisse zeigen wird.


Kleine Apfelmännchen auf einer Kettenlinie

Auf der rechten Seite des großen Apfelmännchens befinden sich im Bereich der Null-Linie sehr viele
Kopfbereiche von Apfelmännchen am oberen und unteren Rand.

Bild 24

Ausgehend von jedem Kopfbereich erkennt man im obigen Bild, dass kleine Apfelmännchen auf einer
leicht gebogenen Kettenlinie angeordnet sind. Das zweite kleine Apfelmännchen wird nun vergrößert
dargestellt.

Bild 25

Auf der Suche nach kleinen Apfelmännchen zeige ich zum Schluß eine sehr kleines Apfelmännchen mit
100000-facher Vergrößerung.

Bild 26

Die Rechenzeit für diese Bild beträgt ca. 7 Sekunden.


Literatur aus dem Internet

Mandelbrot-Menge (Apfelmännchen)

Apfelmännchen - Theorie und Programmierung

Apfelmännchen - Mathematische Basteleien

Apfelmännchen selbst programmiert


Zurück zur Homepage