sebadorn.de

P52: Kitsch (50. Woche)


Mandelbrot-Menge b/w

Mandelbrot-Menge mit 16 Iterationen xmin: -2.0 | ymin: -2.0 | length: 4 | dimension: 450 | maxIt: 16

Mwahaha! Es läuft!

Ohne online nachzuschlagen hätte ich es aber vermutlich auch nicht geschafft. Den mathematischen Weg habe ich von Wikipedia. Aber was nützt mir das Ergebnis, wenn ich nicht verstehe, warum das so ist? Ja, einige Zeit des Pen-and-Paper-Grübelns waren die Folge.

Um zu prüfen, ob ein Programmabschnitt das macht, was er sollte, habe ich auch Fremdcode eingesetzt und geschaut, ob immernoch der gleiche Murks rauskommt. War dies der Fall, hat es nicht an diesem Abschnitt gelegen und ich konnte den Fehler woanders suchen.

Die schönste Suche waren eineinhalb Stunden nur um dann festzustellen, dass da lediglich ein „=“ zu viel war.

Matheteil

Ausgangspunkt ist diese rekursive Folge:
zn+1 = zn2 + c, z0 = 0

c ist eine komplexe Zahl und besteht aus einem Realteil Re(c) und Imaginärteil Im(c).
c = Re(c) + Im(c)
c = a + ib
i = sqrt(-1)

Betrachtet man nun z2 sieht das wie folgt aus:
z0 = 0 ? c0 = 0
z1 = 0 * 0 + c1
z2 = c1 * c1 + c2

Dies wollen wir nun aufteilen in den Realteil und Imaginärteil.
Schauen wir erst einmal auf die Rechenregeln für komplexe Zahlen:
c1 * c2 = (a1a2 - b1b2) + i(a1b2 + b1a2)
c1 + c2 = (a1 + a2) + i(b1 + b2)

Dann machen wir mal. Erst die Multiplikation:
c1 * c1 = (a1a1 - b1b1) + i(a1b1 + b1a1)
c1 * c1 = (a12 - b12) + i(2 * a1b1)

Nun noch die Addition:
c12 + c2 = (a12 - b12 + a2) + i(2 * a1b1 + b2)

Die 1. Klammer beinhaltet den Realteil, die 2. Klammer den Imaginärteil.
Re(z2) = a12 - b12 + a2
Im(z2) = 2 * a1b1 + b2

Wisst ihr was? Das formulieren wir mal allgemein:
Re(zn) = an-12 - bn-12 + an
Im(zn) = 2 * an-1bn-1 + bn

Warum haben wir das gemacht?

Im Programm müssen wir an einer wichtigen Stelle überprüfen, ob der Betrag von zn kleiner Zwei ist. Ach, wo ich ohnehin gerade dabei bin …

Formel allgemein:
|c| = sqrt(a2 + b2)
c2 = a2 + b2

Unsere Bedingung:
Gilt |zn| < 2 bzw. gilt zn2 < 4?

Zu überprüfen gilt also folgendes:
Re(zn) * Re(zn) + Im(zn) * Im(zn) < 4

Java

Der eben beschriebene Teil kann dann so aussehen:

public static int pixelValue(
	double coordX, double coordY, int maxIt) {

	int stepsGone = -1;
	double	OldReZ = 0,
		OldImZ = 0,
		NewReZ = 0,
		NewImZ = 0;

	while(NewReZ*NewReZ + NewImZ*NewImZ < 4
	&& stepsGone < maxIt) {

		OldReZ = NewReZ;
		OldImZ = NewImZ;

		NewReZ = OldReZ*OldReZ - OldImZ*OldImZ + coordX;

		NewImZ = 2*OldReZ*OldImZ + coordY;

		stepsGone++;
	}
	return maxIt - stepsGone;
}

coordX und coordY sind die aktuelle Position im Koordinatensystem. (Diese Methode wird in einer Schleife aufgerufen, die alle Koordinaten nach und nach abklappert.)

maxIt (= Iterationen) ist die Beschränkung, wie oft die Schleife durchlaufen werden soll. Da das Ergebnis in einem Graustufenbild gespeichert wird, wirkt sich diese Zahl auch auf die Anzahl verschiedener Grautöne und somit die Detailgenauigkeit aus.

Zurückgegeben wird der Grauwert des Pixels für die aktuelle Koordinate.

Zum Schluss gesagt …

So, ich hoffe, es hilft jedem mit dieser Aufgabe. Und lasst euch Eines gesagt sein: Mal eben aus dem Ärmel schütteln kann ich so etwas auch nicht. Die Formeln nachzuvollziehen hat mich mit am längsten aufgehalten. Eine große Hilfe beim Programmieren war mir dann der fertige Fremdquellcode (siehe nächster Punkt), den ich zu Vergleichs- und Testzwecken heranziehen konnte.

Hilfen für mich – Hilfen für dich

Java-Code: easy-coding.de/java-mandelbrot-menge-t464.html
Wiki: de.wikipedia.org/wiki/Mandelbrot-Menge#Iteration_eines_Bildpunktes


P52: Wasserspielerei (47. Woche)

Projekt 52: Wasserspielerei (47. Woche)

Wasserspielerei; Regentropfen die … verspielt an der Hecke hängen? Ich bin ja selbst nicht so recht vom Bild überzeugt. Bis zum Jahresende (es werden nur noch zwei Themen gezogen!) möchte ich unbedingt alle Aufgaben fertig habe um rückstandslos im Neuen Jahre wieder anzufangen.

Links

Thema auf mondgras.de: mondgras.de/…/projekt-52-47-wochenthema/
Foto auf Flickr: flickr.com/photos/32192438@N02/3114478970/sizes/o/


Mandelbrot-Zoom // Mathematical Porn

Deep Mandelbrot Fractal Zoom - to e214 HD from teamfresh.

Auch Apfelmännchen genannt und benannt nach dem Herrn Mandelbrot. Aufgabe in Programmieren ist es nun, in Java ein Programm zu realisieren, das ein solches Mandelbrot-Fraktal in einem PGM-Bild speichert. Also nicht mal annährend auf dem Level von diesem Video. Dafür Zeit haben wir bis Freitag in drei Wochen.

Sounds fun!


Buchreihe: Der Dunkle Turm

The Dark Tower

Die Reihe Der Dunkle Turm (Original: The Dark Tower) besteht aus 7 Bänden:

  1. Schwarz
    Original: The Gunslinger
    336 Seiten als Taschenbuch
  2. Drei
    Original: The Drawing of the Three
    575 Seiten als Taschenbuch
  3. tot.
    Original: The Waste Lands
    750 Seiten als Taschenbuch
  4. Glas
    Original: Wizard and Glass
    956 Seiten als Taschenbuch
  5. Wolfsmond
    Original: The Wolves of the Calla
    940 Seiten als Taschenbuch
  6. Susannah
    Original: Song of Susannah
    494 Seiten als Taschenbuch
  7. Der Turm
    Original: The Dark Tower
    1009 Seiten als Borschur

Sie stammt aus der Feder von Stephen King und beherbergt Genre wie Western, Sci-Fi, Horror und Fantasy gleichzeitig. Die Veröffentlichung aller sieben Romane hat sich über einen Zeitraum von 1982 bis 2007 hingezogen.

Die Handlung

The man in black fled across the desert,
and the gunslinger followed.

Roland von Gilead ist der letzte Revolvermann. Er kennt nur ein Ziel: Den Dunklen Turm erreichen, dessen Zerfall großes Unheil und große Zerstörung bedeuten würde. Mit der Zeit wird er Gefährten finden, die ihn in zahlreichen Abenteuern unterstützen werden.

Auf ihrer Reise begegnen sie den Einwohnern dieser westernartig-anmutenden Welt, finden Türen zu anderen Welten, kämpfen mit Monsterhummern, Mutanten und Dämonen. Dabei erfährt der Leser auch immer mehr über die Vergangenheit der Hauptpersonen.

Faszination Sprache

Die Gefährten bereisen große Teile der Welt (und noch dazu andere Welten). An anderen Orten werden auch andere Dialekte gesprochen, auf die auch weiter eingegangen wird. Was einem sehr häufig begegnet, ist z.B. die Anrede „Sai“ im Sinne von „Herr“. Aber auch als „Danke, Sai!“

Diese Eigenheiten stören nicht im Geringsten. Im Gegenteil hätte man geradezu Lust, sie in die eigene Sprache aufzunehmen. Hört mich an, ich bitte euch! Hört mich wohl an! Auf kenntnislose Mitmenschen dürfte dies jedoch recht befremdlich wirken.

Andere mediale Umsetzungen

Der Dunkle Turm wird derzeit als Comic-Serie im Marvel-Verlag veröffentlicht. Behandelt werden darin in den Büchern nicht erwähnte Ereignisse, die sich vor Band 1 oder nebenher ereignet haben.

Der Regisseur J. J. Abrams (Lost) hat für 19 Mio. US-Dollar die Filmrechte an der Story gekauft. Damit gelang ihm, was King anderen Regisseuren verwehrte.

Die Meinung

Zum Zeitpunkt dieses Artikels bin ich bei der Hälfte von Band 6 Susannah angelangt. Damit kann ich keine Aussage zum Ende treffen.

Als ich hörte, dass der Autor Stephen King ist, war mein erster Gedanke: Der ist doch bekannt für seine Horrorgeschichten, da habe ich ja schon mal eine Ahnung, was mich erwartet … Weit gefehlt! Was einen erwartet ist eine faszinierende Welt voller … voll … Na, voll allem! Eine packende Geschichte mit Hauptpersonen, die auch nur Menschen sind. Sie zeigen heldenartige, unglaubliche Stärken und genauso verständliche, menschliche Schwächen.

Vielleicht liegt es an mir, aber mir fällt es leicht, jede noch so kuriose Erscheinung oder sonst unglaubwürdigen Zufall zu akzeptieren. Ich habe den Eindruck, langsam daran hingeführt worden zu sein. Buch um Buch.

Eine andere interessante Entdeckung war für mich, dass der Schreibstil sich der jeweiligen Person anpasst, der die Handlung gerade folgt.

Für mich ein Meisterwerk, das zu Lesen eine Bereicherung ist!

Sage meinen Dank!

Initialzündung durch Christoph, der mir die Bände ausgeliehen hat.

Links

Können Spoiler enthalten!

Official Page: stephenking.com/DarkTower/
Wikipedia: de.wikipedia.org/wiki/Der_Dunkle_Turm
Illustration von Gokhan Okur: kevinwalker.deviantart.com/art/dark-tower-…