sebadorn.de

PS09: Grabung, Luftkurort, Titan (der)

Diese Geschichte ist parallel veröffentlicht auf dem Projekt-Blog.

Sie hatte die Augen noch geschlossen. In ihrem Kopf pochte es, doch etwas Nass-Kühles lag auf ihrer Stirn und machte es erträglich. Der restliche Körper lag unter einer Decke. Alles schwankte und schaukelte leicht, wie auf See. Wo?, dachte sie sich. Benommen schaute sie sich den Ort an, an dem sie unerwartet erwacht war. Sie ahnte ein rustikales Haus, das komplett aus Holz gebaut war, das nur aus diesem einen Raum bestand und aus dessen Fenstern man viel Himmel sah. Sie zuckte überrascht zusammen, als sie am Fenster einen jungen Mann bemerkte.

„Ah, du bist wach! Wie fühlst du dich?“ Er kam ans Bett und ließ sich neben ihr auf den Holzplanken nieder. Sie antwortete: „Geht so“ Vorsichtig tastete sie nach ihrer Stirn und nahm den nassen Lappen herunter. Er nahm ihn ihr ab. „Soll ich ihn dir noch mal anfeuchten?“ Sie beachtete seine Frage nicht und stemmte sich stattdessen mit den Armen im Bett hoch, sodass sie an der Wand lehnen konnte. Im nächsten Moment pochte ihr wieder der Schädel und sie stützte den Kopf in die Hand. Ein geseufztes „Ouw“ entwich ihr.

Der Mann schien eher amüsiert als besorgt. „Schon dich lieber, kleine Tomate.“ „Tomate?“ „Haja, zugegeben, jetzt ist es nicht mehr ganz so schlimm. Aber als wir dich gefunden haben, war dein Kopf knallrot. Lagst bewusstlos mitten in einer Grube, der prallen Sonne ausgesetzt. Sonnenstich, vermute ich mal. Was hast du da getrieben?“ „Getrieben? Ich … ouw …“ Sie fasste sich wieder an die Schläfe. „Kann ich vielleicht doch noch mal den Lappen haben? – Danke. – Dort war meine archäologische Grabung. Ich hab mich wohl im Eifer des Gefechts verloren, als ich Ansätze mehrerer Knochen entdeckt habe.“ „Eine Archäologin? Aha“, mehr sagte er dazu nicht. Schon klar, klingt unglaublich spannend für dich.

Nach kurzem Überlegen fragte sie: „Ich war also weggetreten und du hast mich gefunden?“ „Ich und mein steter Reisebegleiter Asot.“ „Vielen Dank für die Pflege. Wie heißt du?“ „Joshua.“ „Vielen Dank dafür, Joshua. Und deinem Freund möchte ich auch noch danken.“ „Schon gut. Ich stelle ihn dir später vor. Ruh dich erst noch etwas aus.“ Er stand auf und nahm wieder seinen Platz am Fenster ein. Wie beiläufig fragte er: „Wie heißt eigentlich unsere Patienten?“ „Marina“, flüsterte sie noch. Dann kroch sie wieder unter die Bettdecke und schlief

bis in die frühen Stunden des nächsten Morgens. Sie stand auf und genoss die sommerliche Kühle, die vor dem Sonnenaufgang in der Luft hing. Es hat aufgehört zu schwanken. Joshua befand sich nicht im Raum. Sie ging an das Fenster, wo er gestern gestanden hatte. Was für eine Aussicht. Diese Hütte muss irgendwo auf einem Berg stehen. Frische Brisen wehten herein und ihr salziger Duft erinnerte sie an den Luftkurort an der See, den sie damals – in einem Alter von nicht mehr als 17 Jahren – mit ihrer Mutter besucht hatte.

Dielen knarzten und Joshua begrüßte sie mit „Wieder fit?“ Gut gelaunt antwortete sie: „Springlebendig! Sag mal, wo befinden wir uns eigentlich? Nahe der See?“ Er stand in der Tür und deutete ihr mitzukommen. „Ich stell dir Asot vor. Und ja, wir sind nahe der See.“

Sobald sie das Haus verlassen hatte, stand sie auf steinigem Untergrund. Nur einige Meter entfernt zur Tür befand sich ein mehrere Mann hoher Geröllklotz. Joshua stand dicht davor und klopfte daran. „Hey, Kumpel!“ Im nächsten Moment geriet der Klotz in Bewegung und drehte sich in ihre Richtung. Er nahm wieder etwas Abstand und zeigte mit flacher Hand auf das steinige Gesicht hinter ihm. „Das ist Asot. Asot, das ist Marina.“ Marina sagte Nichts, schrie aber in sich hinein. Ein … ein Titan! Dann stehe ich gerade auf seiner Schulter und das Haus … das Haus … „Ich lebe wie ein Parasit auf Asots Schulter“, kam Joshua ihren Gedanken zuvor. „Nur ohne Schaden für den Wirt. Stimmt’s Asot?“ Marina betrachtete den Kopf eingehender. Die Steine bildeten so etwas wie ein Gesicht, das sich minimal verändern konnte. Gerade zeigte es ein angedeutetes Lächeln. Weißes Licht drang aus seinen leeren Augenhöhlen und vermischte sich mit den ersten Sonnenstrahlen. Für einen Augenblick sah Marina die Illusion eines menschlichen Wesens.

Sie schritt vorsichtig näher an den Abhang und ihr Blick glitt viele hundert Meter über riesige Steinplatten, Moos und selbst vereinzelte Bäume, die zwischen den Spalten heranwuchsen, hinunter zum Boden. „Asot, hm?“, murmelte sie. Joshua kam näher zu ihr. „In der nächsten Stadt, die wir erreichen, werden wir dich absetzen. Wenn du Geld für die Rückreise benötigst, leihe ich dir welches.“ Marina hörte ihm gar nicht zu. Sie war zu sehr in Gedanken. Der Kerl reist in einem Haus, das auf der Schulter eines Titanen gebaut wurde, durch die Weltgeschichte. Ein steinerner Titan, verdammt! Ob es noch mehr solcher Wesen gibt? Ihr Blick klärte sich wieder und sie sprach ohne zweiten Gedanken: „Lasst mich mit euch reisen!“


Mein Logo für Projekt 52

Vom Logogestalten habe ich keine besonderen Kenntnisse. Ob ich das im Studium noch lerne? Für Projekt 52 habe ich mich mal versucht:

Projekt 52 Logo in Grün

Projekt 52 Logo in Blau

Projekt 52 Logo in Rot


P52: Die Vier Elemente (Woche 43)

Die Vier Elemente (Woche 43)

Dieses Thema hat mich lange aufgehalten. Aber hey, die Idee ist doch gut!

Da hätten wir also eine Schaufel für die Erde,
Streichhölzer für das Feuer,
eine Gießkanne entsprechend dem Wasser und
einen Fön für die Luft.

Links

Thema auf Mondgras: mondgras.de/sari02/…/projekt-52-43-wochenthema/
Flickr: flickr.com/photos/32192438@N02/3146949967/sizes/o/


P52: Da stimmt etwas nicht (48. 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