Profile picture Über mich

sebadorn.de | blog

1/7 – EinfInf

Die Aufgaben in Einführung in die Informatik waren sehr machbar, aber viele. Verschiedene Zahlensysteme umwandeln oder darin rechnen, Codieren, Code-Bäume basteln, Aussagenlogik, Eigenschaften zweier Relationen herausfinden, ein sehr simples Schaltnetz zeichnen und – der fiese Brocken – ein Assemblerprogramm schreiben. Letzteres ist bei mir recht waghalsig ausgefallen.

(Klingt vermutlich alles gibberish, wenn man es nicht gelernt hat.)

Bestanden sein dürfte es. :fine:

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

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!

„Aufgrund der schlechten Wetterlage wird dieser Bus nicht bis zum Nordfriedhof fahren.“

Morgens

Und so sind wir in einer kleinen Gruppe ungefähr eine halbe Stunde lang bergauf durch den Schnee gestapft. Dabei habe ich festgestellt, dass meine Sohlen so gut wie kein Profil mehr aufweisen (und es trotzdem geschafft nicht hinzufliegen). Die kleine Schneewanderung morgens war anstrengend nett.

So kamen wir denn eine Viertelstunde zu spät an, gemeinsam mit einer weiteren Gruppe, die es aber geschafft hatte, ihren Busfahrer zu belatschern doch zu fahren.

Im Vorlesungsraum saßen bereits drei Leute – ohne Dozent.
Dieser stand im Stau und kam noch viel später.

Nachmittags

Damit hätte ich eine Präsentation aus den Schuhen (bleiben noch zwei). In „Präsentation & Rhetorik“ sollten wir nicht länger als fünf Minuten präsentieren. Jede Minute zu viel gäbe entsprechenden Punktabzug. Meine vier Minuten fuffzig sind da vollauf in Ordnung – Nicht in Ordnung waren die Deutlichkeit meiner Aussprache und meine Stimmlage, die bei Präsentationen dummerweise gleich zwei Oktaven höherspringt denn normal. So sieht mein persönliches Fazit aus, denn besprochen wurde noch nichts. Nur wieder gefilmt.

Das Thema meiner Kurzpräsentation war das Hase und Hirsch-Problem aus der Spieltheorie (in vereinfachter Form). Die Themenwahl stand uns völlig frei.

Abschlusstest in InDesign CS3

Es ist eine Doppelseite für eine Fachzeitschrift zu gestalten. Legen Sie ein Dokument mit folgenden Vorgaben an:

Und dann Angaben zum Dokument (Format, Ränder, Spalten, Anschnitt) und den Firmenfarben (HKS, CMYK). Texte und Bilder erhielten wir auch dazu. Mindestens drei Bilder und ein Logogramm sollten wir verwenden. Eine kleine Tabelle und Adressbox wollten auch noch gestaltet und platziert werden.

Geringe Punkte gab es für jede Kleinigkeit, wie z.B. das Anlegen jeder Farbe und jedes Absatzformates. Allein mit dem korrekten Anlegen konnte man knapp die Hälfte der Punktzahl einsacken. Die andere Hälfte sind dann intelligentes Platzieren der Elemente und ansprechendes Gestalten jener.

Joa, Zeitdruck. Habe mich tierisch erschreckt als es hieß: „Abgeben, gleich ziehe ich mir die Dateien auf den Stick. Alles was nicht da ist, sind 0 Punkte!“ Obwohl sie 10 Minuten vorher noch Bescheid gegeben hat – Die 10 Minuten waren dann aber nur gefühlte 2 Sekunden. ^^