Die Objekte können koloriert werden, indem durch eine Formel Koordinaten des Raumes (oder, ab Version 1.0, andere Parameter) mit Farben verknüpft werden. Die Palette der Farben kann aus bis zu 50 einzelnen Farben oder Farbverläufen bestehen.
Zusätzlich ist es möglich, Schnittebenen zu definieren. Es kann so der innere Aufbau der Fraktale dargestellt werden. Besonders interessant ist natürlich ein Schnitt mit der komplexen Ebene, man erhält als Schnittfigur das normale zweidimensionale Fraktal, das z.B. auch mit "Fractint" berechnet werden kann. Zusätzlich sieht man aber, wie verschiedene Regionen des zweidimensionalen Fraktals im dreidimensionalen Raum miteinander verknüpft sind.
Screenshot von Quat 1.0 (unter Linux):
Die Berechnung und Speicherung des Bildes erfolgt grundsätzlich in 24bit True-Color, die Anzeige während der Berechnung funktioniert hingegen auch in 256-Farben-Modi (allerdings in verminderter Qualität.)
Die von Quat berechneten Fraktale entsprechen genau den herkömmlichen, zweidimensionalen "Julia-Mengen", die so gut wie jedes Fraktalprogramm berechnen kann. (Als Iterationsformeln verfügbar sind "Classical Julia" xn+1 = xn2 - c und "Lambda Julia" xn+1=cxn(1-xn); x0 ist der zu berechnende Bildpunkt) Um die dritte Dimension zu bekommen, verwendet Quat anstelle der komplexen Zahlen mit 2 Komponenten (Real- und Imaginärteil) sogenannte "Hamilton'sche Quaternionen". Sie sind eine Verallgemeinerung der komplexen Zahlen und bestehen aus 4 Komponenten (1 Realteil und 3 Imaginärteile). Setzt man zwei der zusätzlichen Imaginärteile Null, so hat man wieder die ganz normalen komplexen Zahlen. Mit den Quaternionen (daher übrigens der Name "Quat") wäre es also möglich, sogar vierdimensionale Fraktale zu berechnen, berechnet werden aber nur dreidimensionale. (Wenn jemand einen vierdimensionalen Monitor erfindet, erkläre ich mich dazu bereit, mein Programm entsprechend umzuändern... :-) )
Die Berechnung einer wirklich dreidimensionalen Ansicht (3D-Stereo) ist möglich. Ohne Hilfsmittel wie 3D-Brillen kann das Fraktal als echt dreidimensionales Objekt gesehen werden.
Als Ausgabeformat wird das PNG-Format verwendet. Es ist der Nachfolger von GIF und bietet ebenso wie GIF eine Komprimierung der Bilddaten ohne Qualitätsverlust (JPEG komprimiert zwar besser, aber die Bildqualität leidet darunter). Nähere Informationen über PNG: http://www.cdrom.com/pub/png. Da PNG das Speichern applikationsspezifischer Daten erlaubt, speichert Quat sämtliche zur Erzeugung eines Bildes nötigen Werte innerhalb des PNG-Bildes.
Quat verwendet zum Speichern der PNG-Bilder eine Library namens "ZLIB". Diese Library ist eine Komprimierungs-Library und hat nichts mit Fraktalberechnung zu tun. Sie wurde von Jean-loup Gailly und Mark Adler geschrieben. Nähere Informationen zu ZLIB: http://www.cdrom.com/pub/infozip/zlib
Die Benutzeroberfläche wurde mit dem portablen "Fast Light Toolkit"
(FLTK) erstellt. Die Homepage des Toolkits ist unter:
http://www.fltk.org
Quat ist freie Software. Sie können es unter den Bedingungen der GNU General Public License, wie von der Free Software Foundation herausgegeben, weitergeben und/oder modifizieren, entweder unter Version 2 der Lizenz oder (wenn Sie es wünschen) jeder späteren Version.
Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, daß es Ihnen von Nutzen sein wird, aber OHNE JEDE GEWÄHRLEISTUNG - sogar ohne die implizite Gewährleistung der MARKTREIFE oder der EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Details finden Sie in der GNU General Public License.
Sie sollten eine Kopie der GNU General Public License zusammen mit diesem Programm erhalten haben. Falls nicht, schreiben Sie an die Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
Ein besonderer Dank an Max Schwoerer für die Klärung einiger
rechtlicher Fragen und an Oliver Siemoneit für die Hilfe bei der englischen
Übersetzung.
Vielen Dank an Larry Berlin (lberlin@sonic.net)
für seine Hinweise zu Themen wie 3D-Stereo-Ansicht, für seine
vielfältigen Ideen zur Verbesserung des Programms (speziell der Benutzeroberfläche)
und für das Testen der Vorversionen von Quat 0.92.
Larry Berlin bietet ein großartiges 3D-Ezine an (http://3dzine.simplenet.com/3dzine.html)
und hat vor, dort eine Galerie von Bildern zu zeigen, die er auf der Grundlage
der von Quat berechneten Objekte erstellt hat. Ich hatte Gelegenheit, einige
Beispiele zu sehen. Ist wirklich einen Besuch wert!
Dank auch an Eva-Maria von Garrel für's Testen.
Die Voraussetzungen für die vorcompilierten Versionen von Quat:
Ein Punkt in diesem Zusammenhang ist eine komplexe Zahl (im Falle eines
zweidimensionalen Fraktals). Eine komplexe Zahl besteht aus 2 voneinander
unabhängigen Komponenten, die man Real- und Imaginärteil nennt.
Ist der Imaginärteil Null, so entsprechen die komplexen Zahlen den
reellen (also z.B. 1.23324, -23, ...). Zur Kennzeichnung des Imaginärteils
dient der Buchstabe "i", wobei gilt: i*i=-1. (Hieran sieht man, daß
"i" keine reelle Zahl sein kann, denn keine reelle Zahl im Quadrat ergibt
-1.)
Eine komplexe Zahl c schreibt sich also allgemein so: c = a + i*b
Hierbei ist a der Real- und b der Imaginärteil. In zweidimensionalen
Fraktalprogrammen identifiziert man den Realteil mit der x-Koordinate auf
dem Schirm, den Imaginärteil mit der y-Koordinate.
Quat benötigt zur Berechnung seiner dreidimensionalen Fraktale Zahlen, die aus noch einer Komponente mehr bestehen, die dann mit der z-Koordinate gleichgesetzt wird. Solche Zahlen gibt es nicht, es gibt jedoch welche mit 4 Komponenten: Die Hamilton'schen Quaternionen (auch hyperkomplexe Zahlen genannt). Sie besitzen einen Realteil und 3 imaginäre Teile. Die Bezeichnungen für diese Teile lauten e, j, k und l. "e" entspricht dem Realteil, "j" dem Imaginärteil der komplexen Zahlen. Sind also k- und l-Teil Null, so haben wir wieder die alten komplexen Zahlen. Zwischen e, j, k und l bestehen bestimmte Rechenregeln für die Multiplikation. (Hier besteht ein Unterschied zwischen Quaternionen und hyperkomplexen Zahlen, der uns aber nicht interessieren muß. Quat verwendet Quaternionen, der Einfachheit halber werden beide Begriffe im Folgenden aber austauschbar verwendet.)
4 Komponenten würden sogar für vierdimensionale Fraktale ausreichen, aus naheliegenden praktischen Beschränkungen (s. oben) und der Beschränktheit des menschlichen Wahrnehmungsvermögens (also nicht aus Unfähigkeit des Programmierers...) kann Quat "nur" dreidimensionale Fraktale erzeugen. Die zusätzliche 4. Dimension (4. Komponente) wird auf einen konstanten Wert gesetzt, der über den Parameter "lvalue" in der OBJ-Datei festgelegt wird (Versionen mit Benutzeroberfläche: Im Object Editor). Diese Vorgehensweise erzeugt einen dreidimensionalen Schnitt aus einem vierdimensionalen Fraktal, analog zum zweidimensionalen Schnitt, den gewöhnliche Fraktalprogramme aus den von Quat berechneten dreidimensionalen Fraktalen machen.
Zurück zu unserer Iterationsformel. Quat benutzt u.a. eine der folgenden
Formeln: xn+1 = xn2 - c oder xn+1
= cxn(1-xn)
x0 ist der Startwert (=Punkt, der berechnet werden soll)
"n" ist ein Abzählindex, mit dem die "x" durchnumeriert werden
(n=0,1,2,3...). Der in der Formel auftretende Wert "c" ist wiederum eine
hyperkomplexe Zahl, die während der ganzen Berechnung konstant bleibt
und in der OBJ-Datei/im Object Editor als Parameter "c"
festgelegt wird. "c" bestimmt die Form des Fraktals.
Man stellt fest, daß die durch die Iterationsformel definierte Folge der xn (auch "Orbit" genannt) drei verschiedene Verhaltensweisen an den Tag legt:
Diese Formulierung ist noch nicht ganz exakt: Es besteht das praktische Problem, daß ein Computer die Iteration nicht ad infinitum ausführen kann, um zu sehen, ob die Folge sich einpendelt oder nicht. (Das liegt an der Beschränktheit der menschlichen Lebensdauer, wiederum nicht an der Unfähigkeit des Programmierers :-) ). Deshalb wird nach einer gewissen Anzahl von Iterationen abgebrochen. Die maximale Zahl von Iterationen wird im Object Editor/OBJ-Datei durch den Parameter "maxiter" festgelegt. Wie wird nach Ablauf dieser maxiter Iterationen nun festgelegt, ob die Folge gegen unendlich geht oder nicht? Dazu dient der Wert "bailout" (Benennung frei nach "Fractint"). Wurde dieser Wert im Laufe der maxiter Iterationen überschritten, so wird angenommen, daß die Folge gegen unendlich geht.
Nun können wir das berechnete Objekt ganz präzise beschreiben: Es ist die Menge aller Punkte (= Zahlen) x0, für die die durch die Iterationsformel definierte Folge der xn nach höchstens maxiter Iterationen den Wert bailout nicht überschritten hat. (Wie kompliziert doch schöne Formen mathematisch zu beschreiben sind... Andererseits: Wie schön doch Mathematik sein kann!)
Zur Beruhigung: Auch wer das alles nicht versteht oder wen's ganz einfach nicht interessiert, der kann trotzdem schöne Bilder berechnen.
Es ergeben sich so 2 verschiedene Koordinatensysteme: Einmal das "darzustellende" System (der Q-Raum), außerdem das "darstellende" Koordinatenystem (Bildebene, Monitor).
Der Q-Raum wird aufgespannt durch 3 Achsen, die im Folgenden mit e, j und k bezeichnet werden, analog zu den Komponenten der hyperkomplexen Zahlen (der l-Teil wird auf einen konstanten Wert gesetzt, s.o.). Die e-Achse ist also die reelle Achse ("Zahlenstrahl"), die von der e- und j-Achse aufgespannte Ebene die komplexe Ebene, in der 2D-Fraktalprogramme ihre Fraktale berechnen.
Auf der Bildebene liegen zwei Achsen des Bildkoordinatensystems, die x- und y-Achse heißen und der horizontalen und der vertikalen Achse des Monitors entsprechen. Außerdem gibt es eine z-Achse, die senkrecht auf der Bildebene steht und so die Richtung anzeigt, in der man auf das Fraktal sieht.
Da sich die fraktalen Objekte immer um den Ursprung im Q-Raum herum ansiedeln, ist folgende Art der Konstruktion der Bildebene naheliegend. In der Initialisierungsdatei wird dazu ein Punkt im Q-Raum festgelegt, der "viewpoint". Die Bildebene geht durch "viewpoint" und steht senkrecht auf dem Ortsvektor "viewpoint" ("viewpoint" hat also eine doppelte Bedeutung: Aufpunkt und Normalenvektor der Bildebene). Durch "viewpoint" ist so schon die z-Achse des Bildkoordinatensystems festgelegt. Im Folgenden bewegen wir uns nur noch auf der Bildebene.
Nun wird von dieser Ebene ein rechteckiger Ausschnitt genommen (= das Sichtfenster), der auf der Ebene so orientiert wird, daß 2 gegenüberliegende Seiten des Rechtecks parallel zur Projektion des "up"-Vektors (s.u.) auf die Bildebene sind. Die Richtung dieser Projektion wird y-Richtung genannt und entspricht nachher der vertikalen Richtung auf dem Monitor. Die horizontale Richtung heißt x-Richtung und entspricht den anderen beiden Seiten des Rechtecks. Der "up"-Vektor definiert also, wo oben ist. Damit sind also schon die Richtungen der x- und y-Achse festgelegt.
Die Diagonalen dieses Sichtfensters schneiden sich im "viewpoint" (das heißt, daß der "viewpoint" in der Mitte des Sichtfensters/Bildschirms liegt). Nun wird das Sichtfenster um den "viewpoint" herum zentrisch gestreckt ("skaliert"), und zwar so, daß die in x-Richtung liegende Seite hinterher die Länge "lxr" im Q-Raum hat (s. Parameter "lxr"), und das Verhältnis von x/y dem gewählten Auflösungsverhältis (siehe "resolution") entspricht. (für verzerrungsfreie Darstellung). Die Basisvektoren des Sichtfensters (gewonnen aus der x- und y-Richtung) haben den Betrag 1. Nun sind wir im Prinzip fertig. Das Bildkoordinatensystem ist vollständig definiert.
Um alle möglichen Lagen des Bildschirmrechtecks erreichen zu können (bisher dreht sich alles um den Ursprung), wird zum Schluß die Bildebene um die bei "Move" angegebenen Werte in x- und y-Richtung (in ihrem eigenen Koordinatensystem) verschoben.
Grafik 1: Verschiedene Wege zum fertigen Bild
ZBuffer eröffnen ein weites Feld an Experimentiermöglichkeiten,
man kann die beste Darstellung des Objektes durch Probieren herausfinden.
ZBuffer haben die Dateiendung "ZPN". In einem ZBuffer ist der volle
Satz an Parametern gespeichert, wie auch in jedem Bild (PNG). ZBuffer sind
ganz normale PNG-Dateien, sie enthalten bloß kein Bild. Manche Grafikprogramme
erkennen sie sogar und zeigen sie problemlos an, wenn man sie öffnet,
andere machen es notwendig, die Endung in PNG umzubenennen. Ob das direkte
Anzeigen allerdings einen Sinn hat, weiß ich nicht, da man mit den
in den Dateien gespeicherten Daten in der Regel wenig anfängt.
"Image"-Menü:
Image | Open...
(Bild | Öffnen). Öffnet ein Bild (PNG-Datei), zeigt es an
und lädt die Parameter, die in ihm gespeichert sind. Abschließend
zeigt Quat an, wie weit das Bild bereits berechnet ist.
Möglicherweise erhalten Sie die Fehlermeldung "PNG file has no
QUAT chunk". Das passiert, wenn Sie versuchen, eine PNG-Datei zu öffnen,
die von einem anderen Programm geschrieben wurde. In diesem Fall kann Quat
die fraktalen Parameter nicht lesen.
Hinweis: In 256-Farben-Modi sollten Sie ein spezielles Bildbetrachtungsprogramm
verwenden, das vermutlich mehr aus der begrenzten Farbzahl herausholen
kann. "Graphic Workshop for Windows 1.1u" oder "Paintshop Pro" unterstützen
PNG-Bilder (Windows), auch "XV 3.10a" mit dem PNG-Patch (X).
Image | Close
(Bild | Schließen). Schließt das Bild, läßt
aber die dazugehörigen Parameter im Speicher. Wenn Sie einige Parameter
eines Bildes ändern wollen, müssen Sie erst das Bild schließen,
dann die Parameter verändern und als letzten Schritt das Bild neu
berechnen.
Image | Save
(Bild | Speichern). Speichert das Bild (PNG) unter dem Namen, der in
der Titelzeile angezeigt wird. Oft ist dieser Name computergeneriert mit
einer Nummer am Ende.
Alle Parameter, die benötigt werden, um das Bild neu zu berechnen,
werden zusammen mit dem Bild gespeichert.
Image | Save As...
(Bild | Speichern unter). Speichert das Bild wie unter "Image | Save"
beschrieben, bloß mit einem benutzerdefinierten Namen. Den Namen
können Sie in dem Dialog eingeben, der erscheint, nachdem Sie diesen
Menüpunkt angewählt haben.
Image | Adjust Window
(Bild | Fenster einstellen). Setzt die Größe des Fensters
entsprechend der Bildgröße (solange es auf den Bildschirm paßt).
Image | About
(Bild | Über). Zeigt Informationen zu Quat an.
Image | Exit
(Bild | Beenden). Beendet Quat.
"Calculation"-Menü:
Calculation | Start/Resume an image
(Berechnung | Starten/Fortsetzen eines Bildes). Beginnt die Berechnung
eines Bildes unter Benutzung der aktuellen Parameter (siehe "Parameters"-Menü)
oder setzt eine unterbrochene Berechnung fort.
Wenn ein ZBuffer geöffnet ist (der vollständig berechnet
sein muß), können Sie ihn mit diesem Menüpunkt zu einem
Bild machen (siehe Abschnitt 2.3).
Ein Bild ist ein fraktales Objekt, das beleuchtet und gefärbt
ist, im Gegensatz zu einem ZBuffer.
Calculation | Start/Resume a ZBuffer
(Berechnung | Starten/Fortsetzen eines ZBuffers). Beginnt die Berechnung
eines ZBuffers unter Benutzung der aktuellen Parameter (siehe "Parameters"-Menü)
oder setzt eine unterbrochene Berechnung fort.
Ein ZBuffer hat die Form eines fraktalen Objektes, aber es ist nicht
beleuchtet oder eingefärbt. Die Berechnung eines ZBuffers erledigt
den langsamen Teil der ganzen Berechnung, den ZBuffer in ein Bild zu verwandeln
ist relativ schnell. Der Vorteil von ZBuffern ist, daß man noch einige
Parameter, die die Form des Fraktals nicht beeinflussen (Beleuchtung und
Farbe), ändern kann und dann recht schnell ein Bild berechnen kann.
Wenn Sie das Aussehen des Fraktals nicht mögen, schließen Sie
einfach das Bild, wodurch Sie wieder zum ZBuffer zurückgelangen. Mehr
über ZBuffer in Abschnitt 2.3.
Calculation | Stop
(Berechnung | Stop). Unterbricht eine laufende Berechnung (sowohl die
eines Bildes, als auch eines ZBuffers). Sie können die Berechnung
fortsetzen, siehe die beiden Menüpunkte oben.
"Parameters"-Menü:
Parameters | Reset
(Parameter | Zurücksetzen). Setzt alle Parameter zurück auf
ihre Vorgabewerte. Wenn Sie mit diesen Werten ein Bild berechnen, erhalten
Sie eine Kugel.
Parameters | Read from INI...
(Parameter | Lies aus INI). Liest die Parameter ein, die nötig
sind, um ein Bild zu erstellen. Die Werte werden vorher nicht auf
die Vorgabewerte zurückgesetzt! (Benutzen Sie "Reset", um das zu machen).
Die INI-Datei kann mit "Save As" oder mit einem Texteditor erstellt
worden sein. Eine INI-Datei beinhaltet die Daten, die nötig sind,
um ein Bild zu generieren. Sie können ebenso eine COL-Datei laden,
die nur Farbinformationen enthält.
Parameters | Read from PNG...
(Parameter | Lies aus PNG). Alle Daten zur Bilderzeugung werden mit
dem Bild selbst mitgespeichert (wie es die PNG-Spezifikation erlaubt).
Dieser Menüpunkt liest die Daten aus dem Bild wieder ein, um ein neues
zu erzeugen oder die Parameter zu editieren.
Parameters | Save As...
(Parameter | Speichern unter). Speichert die Parameter in einer INI-Datei,
die eine einfache Textdatei ist und mit einem Texteditor bearbeitet werden
kann. Dieser Befehl ist nützlich, wenn Sie das Bild mit der Textversion
von Quat berechnen wollen. (Die Textversion benutzt INI-Dateien, um die
Parameter zu erhalten, die sie benötigt).
Parameters | Edit...
Es öffnet sich der sog. "Parameter Editor", der folgendermaßen
aussieht (hier gezeigt: X-Window-Version mit KDE Window Manager. Die Karteikarte
"Object" ist selektiert):
In diesem Dialog können Sie alle Parameter einstellen, die das
Fraktal bestimmen. Sie können sich zusätzlich eine Vorschau zu
den jeweils aktuell eingestellten Parametern berechnen lassen.
Mit den Tabs ("Reitern") können Sie wählen, welche Art von
Parametern Sie verändern wollen:
Im Vorschaufenster wird das Fraktal berechnet, wie es bei der aktuellen
Wahl der Parameter aussehen würde. Das ist praktisch zum Herumexperimentieren,
da sich selten die Auswirkung beim Ändern eines Parameters einfach
voraussagen läßt.
Der Button "Do!" (Tue!) berechnet die Vorschau und zeigt sie rechts
an. Ist gleichzeitig der Button "own" (eigene) aktiviert (gelbes Licht),
so werden tatsächlich die Parameter zur Berechnung benutzt, die momentan
im Editor eingestellt sind. (Außer natürlich der Auflösung
und auch dem Anti-Aliasing). Ist dieser Knopf nicht aktiv, so wird eine
Standard-Sicht des Fraktals berechnet. Das kann z. B. notwendig sein, wenn
man sich "verirrt" hat, oder beispielsweise als Farbe aus Versehen schwarz
gewählt hat.
Ist im View Editor eine "Interocular Distance" (Abstand zwischen den Augen) ungleich Null eingetragen, so kann mit dem "Stereo"-Button gewählt werden, ob die Vorschau in Stereo (langsamer, dafür wirklich dreidimensional) oder in Mono berechnet wird. Das reale Bild wird in diesem Fall immer in Stereo berechnet.
Die View-Selektoren (Ansicht-Wähler) sind eigentlich eine Ergänzung zum View Editor, die aber aus Platzgründen im gemeinsamen Bereich untergebracht werden mußten. Eine Besprechung ihrer Funktionalität siehe View Editor.
Die Aktions-Buttons entsprechen den Befehlen im "Parameters"-Menü, sie erlauben es also, im Parameter Editor eine INI-Datei zu lesen, die Parameter (oder Teile davon) abzuspeichern, die Parameter zurückzusetzen oder sie aus einem PNG-Bild zu importieren.
Der Object Editor:
In diesem Dialog können Sie die fraktalen Daten des Objektes angeben.
Diese Daten bestimmen die Gestalt des Fraktals. Für folgende Schlüsselwörter
können Werte eingegeben werden: "Maximum iteration
(maxiter)", "4th-dim. Intersection (=lvalue)",
"Bailout" und "c". (Siehe
deren Beschreibungen in Abschnitt
4.1)
Es gibt ein Fenster (genannt Mandel-Vorschau), in dem die Mandelbrotmenge (das Apfelmännchen) angezeigt wird (oder genauer, einen zweidimensionalen Schnitt aus der vierdimensionalen Verallgemeinerung der Mandelbrotmenge). Sie kann als Landkarte für "Julia-Mengen" (den Objekten, die Quat berechnet) angesehen werden. Das rote Kreuz markiert den gewählten Punkt "c". Jeder Punkt "c" erzeugt eine andere Julia-Menge. Punkte, die innerhalb der Mandelbrot-Menge (also dem schwarzen Gebiet) liegen, führen zu verbundenen Julia-Mengen, im anderen Fall zu unterteilten.
Sie können mit der Maus an eine beliebige Stelle des Mandel-Vorschau-Fensters
klicken (oder auch ziehen), um das rote Kreuz zu verschieben. Die ersten
beiden Teile des Parameters "c" werden dementsprechend aktualisiert.
Wenn es notwendig sein sollte, die Mandel-Vorschau zu aktualisieren,
bekommt das Fenster einen roten Rahmen. Drücken Sie dann den "Redraw"-Button
(Neuzeichnen). Das ist z. B. notwendig, wenn einer der Parameter "bailout",
"maxiter" oder die letzen beiden Teile des Parameters "c" geändert
wurden.
Die sechs Buttons unter dem Mandel-Preview dienen der Navigation in
der Mandelbrotmenge. Der Bereich, der angezeigt wird, kann verschoben und
gezoomt werden.
Der oberste Button "up" bewegt den sichtbaren Ausschnitt nach oben,
der unterste ("down") nach unten. Der Button ganz links nach links, der
rechts nach rechts. Die beiden Buttons in der Mitte zoomen in die Mandelbrotmenge
hinein (+) und heraus (-).
Der View Editor
Der Parameter Editor mit selektierter View-Karteikarte sieht folgendermaßen
aus (Windows-Version):
In diesem Dialog wird definiert, wie das Objekt gesehen werden soll. Die Bildebene, auf die das Fraktal projiziert wird, wird durch folgende Parameter festgelegt: "View Point", "Up", "Move", "Length of View Plane's X-Axis (lxr)" und "Interocular Distance". Die Lichtquelle ("Light Source") wird hier ebenfalls angegeben. (Siehe Beschreibungen in Abschnitt 4.1).
Unter der Eingabezeile für "interocular distance" ist ein Winkel angegeben. Sie können wählen, ob bei Veränderungen des Sichtpunktes der Winkel oder der Abstand der Augen festgehalten werden soll. Wenn Sie ein 3D-Stereo-Paar generieren wollen, sollte dieser Winkel zwischen 5 und 8 Grad betragen. Wenn "interocular" Null ist (und damit auch der Winkel), wird eine 2d-Projektion des fraktalen Objektes erzeugt.
Da es langweilig wäre, wenn man nur Werte eingeben könnte,
die man auch in einem Texteditor angeben könnte (INI-Datei), befinden
sich drei Ansichten des Sichtpunktes und der Bildebene im Parameter Editor.
(Man sieht den Sichtpunkt von oben "from above", von der Seite "from beside"
und von vorne "from front"). Die schwarzen Pfeile sind die Achsen im Quaternionen-Raum
(bzw. im dreidimensionalen Unterraum, der durch "4th-dim. Intersection"
definiert wird). "1" ist die ganz normale reelle Zahlenachse, "i" die imaginäre
Achse (wie bei den komplexen Zahlen; diese beiden werden bei jedem 2D-Fraktalprogramm
benutzt) und "j" ist die Achse in die dritte Dimension (Es gibt hier keine
"k"-Achse, da der k-Wert konstant gehalten wird).
Die Pfeile deuten die Richtung der positiven Zahlen an, die Länge
der Pfeile entspricht der Länge 2 im Q-Raum.
Das kleine blaue Rechteck markiert den Sichtpunkt ("viewpoint"), das
grüne Rechteck stellt die Bildebene dar. Wenn man in das blaue Rechteck
klickt, kann man durch Ziehen der Maus den Sichtpunkt verschieben. Manche
Positionen für den Sichtpunkt sind nicht definiert (wenn er (0,0,0)
ist oder wenn er so liegt, daß der "up"-Vektor rechtwinklig zur Bildebene
liegt). In diesem Fall werden die Eingabefelder, die dafür verantwortlich
sind, rot unterlegt.
Der kleine türkise Kreis ist der Ursprung des Bildkoordinatensystems
(= der linke obere Punkt auf dem Bildschirm).
Der Color Editor
Hier eine Abbildung des Parameter Editors mit seleketierter Karteikarte
"Color" (Linux-Version).
Hier können Farben (oder besser, Farbverläufe) definiert werden. Oben ist eine Laufleiste zu sehen, die dazu dient, denjenigen Farbverlauf auszuwählen, den man editieren möchte. Sie können dazu entweder die Pfeil-Buttons (wie bei einer normalen Bildlaufleiste) benutzen, oder direkt in den Farbverlauf klicken.
Darunter in der linken Spalte ("Range") sind zwei Buttons "Add" und "Del" (Hinzufügen und Löschen). "Add" fügt eine neue Farbe vor der aktuellen Position in der Palette hinzu, "Del" löscht die aktuell ausgewählte. Es muß mindestens eine Farbe existieren, aber nicht mehr als 30. Für jeden Farbverlauf können Sie eine Startfarbe ("Color 1"), eine Endfarbe ("Color 2") und eine Gewichtung ("Weighting") angeben. Die Gewichtung gibt an, welcher Anteil an der gesamten Palette der Farbverlauf ausmacht. Dieser Wert darf nicht Null sein. (Siehe auch Abschnitt 4.2)
Wenn Sie die Buttons "Sel" neben der jeweiligen Farbe anklicken, erhalten Sie einen Dialog, um eine Farbe auszuwählen. Falls Sie anstatt eines Farbverlaufs nur eine einfache Farbe definieren wollen, setzen Sie beide Farben des Farbverlaufs (Color 1 und Color 2) auf dieselben Werte.
Mit "Copy" wird die jeweilige Farbe in die Zwischenablage kopiert (nicht in die globale von Windows/X, sondern in das Feld rechts oben im Dialog), mit "Paste" können Sie die jeweilige Farbe durch die Farbe in der Zwischenablage ersetzen.
Unten ist das Eingabefeld, in das Sie die Farb-Formel eintragen können, entweder direkt, oder durch Anklicken einer vordefinierten Formel. (Beschreibung siehe Schlüsselwort "colorscheme").
Der Intersection Editor
Ein Screenshot des Intersection Editors (Linux Version):
Wird benutzt, um Schnittebenen zu definieren. Die Laufleiste links hat genau denselben Zweck wie die beim Farbeditor oben: das zu bearbeitende Objekt auszuwählen. Die Buttons "Add" und "Del" funktionieren ebenfalls wie oben, der eine fügt eine neue Schnittebene hinzu, der andere löscht die gerade gewählte. Es können zwischen 0 und 20 Schnittebenen eingerichtet werden. Eine Ebene wird definiert durch den Normalenvektor (der in den Halbraum zeigt, der vom Objekt weggeschnitten wird), der nicht Null sein darf, und einem Aufpunkt auf der Ebene. (Siehe auch Abschnitt 4.3)
Andere Parameter:
Die anderen Parameter sind: "resolution",
"phong", "ambient" und
"antialiasing". Beschreibung des ersten
siehe Abschnitt 4.4, der letzten drei siehe Abschnitt
4.1.
In diesem Dialog befinden sich fünf Buttons, die als Abkürzung
für bestimmte Auflösungen dienen. Wenn Sie einen davon drücken,
wird die Auflösung auf die angegebenen Werte gesetzt.
"ZBuffer"-Menü:
Zu ZBuffern lesen Sie bitte Abschnitt 2.3. Die Menüpunkte in diesem Menü dienen dem Laden, Speichern, Speichern Als und Schließen eines ZBuffers.
-i <INI-Datei> | Berechnet ein Bild aus einer INI-Datei. (INI-Dateien werden benutzt, um Quat mit den Werten zu füttern, die das Fraktal und die Ansicht, etc., bestimmen.) |
-z <INI-Datei> | Berechnet einen ZBuffer (Dateityp ZPN) aus einer INI-Datei |
-i <ZPN-Datei> | Erzeugt ein Bild unter Verwendung eines vorher berechneten ZBuffers. (Ist natürlich wesentlich schneller als die Erzeugung aus einer INI-Datei.) |
-i <ZPN-Datei> <INI-Datei> | Erzeugt ein Bild aus einem ZBuffer, ersetzt jedoch bestimmte Parameter (z.B. Farbgebung) durch die in der INI-Datei angegebenen Werte. |
-p <PNG- oder ZPN-Datei> | Liest die Parameter, mit denen das betreffende Bild/ZBuffer berechnet wurde und schreibt sie in eine INI-Datei. |
-c <PNG- oder ZPN-Datei> | Setzt die Berechnung eines unfertigen Bildes oder ZBuffers fort. Die INI-Datei, aus der das Bild/ZBuffer generiert wurde, wird nicht mehr benötigt. |
-h | Anzeigen einer Kurzinformation |
Ein Aufruf sieht also beispielsweise so aus:
quat -i test.ini
Eine Berechnung wird abgebrochen, indem
0 | Classical Julia | xn+1 = xn2 - c |
1 | Lambda Julia | xn+1 = cxn(1-xn) |
2 | xn+1 = xn*ln(xn) - c | |
3 | Cubic Julia | xn+1 = xn3 - c |
4 | xn+1 = xnp1 - c |
Spezielle Funktionen zur Fraktalberechnung sind:
orbite(n): Der e-Teil des Quaternions nach n Iterationen.
orbitj(n): Der j-Teil des Quaternions nach n Iterationen.
orbitk(n), orbitl(n): ebenso
Mit diesen orbit-Funktionen läßt sich eine Farbgebung erzielen, die sich am Objekt selber orientiert.
![]() |
![]() |
![]() |
Bild 1: Ein Bild mit zu geringer Tiefenauflösung
(240): "resolution 320 240 240". Man sieht gut die ausgefransten (gezackten)
Ränder der blau eingefärbten Objektteile. An diesen Stellen ist
das Fraktal so dünn, daß es bei der Berechnung mit 240 als z-Auflösung
nicht getroffen wird.
Es wird kein Antialiasing durchgeführt: "antialiasing 1" |
Bild 2: Bei diesem Bild ist die z-Auflösung
deutlich erhöht (2048): "resolution 320 240 2048". Die Ränder
sind nicht mehr ausgefranst.
Allerdings erkennt man noch leicht störende Pixelmuster, die vom sogenannten Moire-Effekt herrühren (beispielsweise auf den orangenen Bildteilen). Mit Antialiasing kann man sie beseitigen. Hier wird keines vorgenommen: "antialiasing 1" |
Bild 3: Dies ist das Referenzbild.
Es hat die genügend hohe z-Auflösung von 2048: "resolution 320 240 2048", wie das Bild links. Für Antialiasing wird der Wert 4 verwendet: "antialiasing 4" Jeder Pixel auf dem Objekt wird also gemittelt aus 4x4 Unterpixeln. |
Sehen Sie sich das obige Beispielbild an. Setzen Sie sich dazu in ganz
normalem Arbeitsabstand vor den Bildschirm und halten Sie den Daumen zwischen
Augen und Bildschirm (mehr zum Auge hin). Sie sollten gerade davor sitzen
und nicht den Kopf neigen oder von der Seite hinsehen. Blicken Sie ganz
normal auf den Daumen. Achten Sie auf die beiden Bilder auf dem Bildschirm
(ohne direkt hinzublicken, also immer auf den Daumen sehen!)
Wenn Sie jetzt 4 Bilder sehen, so ist der Daumen zu nah am Auge. Gehen
Sie mit dem Daumen ein bißchen weiter weg von den Augen und schauen
sie erneut auf den Daumen, während Sie auf den Hintergrund achten.
Probieren Sie solange mit verschiedenen Abständen Daumen-Auge, bis
Sie nur noch 3 Bilder sehen. Nun ist das mittlere dreidimensional, vermutlich
aber noch nicht scharf. Das Scharfstellen ist anfangs eine Sache der Konzentration,
it wachsender Übung geht es einfacher. Achten Sie eine Weile auf das
noch unscharfe Bild (nicht direkt hinsehen). Irgendwann beginnt das Gehirn
zu erkennen, daß die Daten, die es empfängt, durchaus einen
Sinn ergeben, und versucht scharfzustellen. Für manche Menschen ist
dieser Prozeß etwas schwieriger (so war es für mich), andere
sind Naturtalente.
Dieser Blick ist übrigens keine exotische Eigenart von Quat, im
Internet sind solche Stereo-Bilder weit verbreitet. Es ist beispielsweise
auf diese Art auch möglich, Photographien von Landschaften dreidimensional
zu sehen.
In der Textversion wird zum Starten einer Berechnung eine sogenannte
"Initialisierungsdatei" benötigt, in der das Objekt, die Ansicht,
die Farben und Schnittebenen definiert werden können. Diese Datei
(und alle mittels "include" eingefügten, s.u.) sind simple Textdateien,
die mit jedem Texteditor erstellt werden können. (z.B. "edit" unter
DOS, "notepad" unter Windows, "vi" unter Unix).
Die verwendete Syntax ist sehr einfach, in jeder Zeile steht ein Schlüsselwort
und danach folgt eine bestimmte Anzahl von Parametern. (z.B. definiert
"viewpoint 0 0 1" den Sichtpunkt)
In dieser Initialisierungsdatei können andere Dateien automatisch
eingefügt werden (mittels des Schlüsselwortes "include"). Es
ist so möglich, Farbverläufe getrennt von fraktalen Daten oder
Schnittebenen zu speichern (in Dateien mit einer anderen Endung z.B.).
Wird eine solche Datei an einer bestimmten Stelle in der Initialisierungsdatei
"included", so wird sie dort eingefügt, als würde dort ihr gesamter
Inhalt stehen. Die Initialisierungsdatei dient nur dem Starten der Berechnung.
Hat man erstmal eine Berechnung begonnen, so benötigt man sie nicht
mehr. Die Fraktaldaten sind im PNG-Bild selbst gespeichert und können
daraus wieder rekonstruiert werden.
Vorschlag zur Aufteilung der Daten in verschiedene Dateien:
INI Dieser Dateityp ist von Quat fest vorgegeben.
Es ist die Initialisierungsdatei. In ihr kann die gesamte Information,
die zur Erzeugung eines Bildes nötig ist, gespeichert werden, oder
es können auch andere Dateien (wie hier vorgeschlagen) "include"d
werden.
OBJ In Dateien mit dieser Endung werden die fraktalen
Parameter, die die Form bestimmen, die Ansicht, von der aus das Fraktal
gezeigt werden soll, sowie einige Raytracing-spezifische Parameter, die
die Beleuchtung spezifizieren, definiert.
COL Hierin wird eine Farbe oder ein Farbverlauf gespeichert.
CUT Diese Dateien dienen der Angabe einer Schnittebenen-Konfiguration
(in den meisten Fällen wohl nur eine einzige Schnittebene).
Dieses Konzept mag auf den ersten Blick kompliziert aussehen, es bietet aber eine hohe Flexibilität. So können Fraktale schnell mit anderen Farben "ausgestattet" werden oder neue Schnittebenen hinzugefügt werden, ohne an der Objektdefinition selbst etwas zu ändern: Es wird einfach nur eine Zeile in der INI-Datei verändert. Aber für alle, die das immernoch für zu kompliziert halten: Man kann alle Schlüsselwörter auch in der Initialisierungsdatei benutzen.