Quat: Online-Dokumentation
Author: Dirk Meyer

# 4. Aufbau der Initialisierungsdatei(en)

Wenn Sie eine Version mit Benutzeroberfläche (ab jetzt VmB angekürzt) benutzen, können Sie diesen Abschnitt 4 überspringen, doch die Unterabschnitte 4.1 - 4.4 sind wieder wichtig, da sie die Beschreibung der Parameter enthalten, die in den Editoren eingestellt werden.

In Textdateien werden die zum Beginnen einer Berechnung notwendigen Parameter angegeben. (Wie schon mehrfach gesagt: Ist die Berechnung ersteinmal begonnen, sind sie nicht mehr notwendig.) Ihr Aufbau ist relativ simpel:
Das Doppelkreuz (`#`) dient als Kommentarzeichen. Alles was in der selben Zeile hinter dem Doppelkreuz steht, wird ignoriert. Ansonsten beginnt eine Zeile mit einem Schlüsselwort, dem ein oder mehrere Parameter folgen.

Die Parameter und das Schlüsselwort müssen in ein und derselben Zeile stehen und durch Leerzeichen voneinander getrennt sein. Es gibt folgende Arten von Parametern:
int: Ganzzahlen (wie 1, -1, 0, 2, 3, 1001, ...)
float: Fließkommazahlen (wie -0.2353, 21.21324, 0.001, ...)
strings: Zeichenketten
Wird ein Schlüsselwort nicht verwendet, so wird ein Vorgabe-Wert eingesetzt. Dem Programm sind einige Beispiel-Dateien beigefügt, sie mal anzusehen und zu berechnen lohnt sich, da vieles beim Anwenden direkt klar wird, was hier umständlich beschrieben ist.

## 4.1 Schlüsselwörter zur Definition von fraktalem Objekt und der Ansicht

- c
  4 float-Parameter folgen. VmB: im Object Editor.
  Die Zahlen geben Real- und 3 Imaginärteile der Konstanten "c" in der Formel "xn+1 = xn2 - c" (oder der anderen, die unterstützt wird) an. Die 4 floats sind 1-, i-, j- und k-Teil der hyperkomplexen Zahl.
  Dieser Parameter entscheidet über die Form und Struktur des Fraktals. Um gute Ergebnisse zu erzielen, sollten sich diese 4 Werte um den Nullpunkt bewegen (Nullpunkt im 4D-Raum!), also alle etwa im Bereich von -2 bis +2 sein.
  Aber: Herumexperimentieren lohnt sich (ist auch der Witz dieses Programms)!
- bailout
  ein float-Parameter folgt. VmB: im Object Editor.
  Hier wird derjenige float-Wert angegeben, bei dessen Überschreitung die Iterationsfolge als "gegen unendlich gehend" angesehen und die Berechnung des Punktes beendet wird.
  Entspricht dem Parameter gleichen Namens des Programms "Fractint".
- maxiter
  ein int-Parameter folgt. VmB: im Object Editor.
  Ist die maximale Anzahl der Iterationen, die durchgeführt wird.
  Wenn nach dieser Anzahl der Wert bailout (s.o.) nicht überschritten worden ist, so wird die Iterationsfolge als "gegen Null gehend oder periodisch" angesehen und gehört somit zur Julia-Menge (also zum Objekt).
  Dieser Wert kommt in jedem Fraktalprogramm unter ähnlichem Namen vor. Im Gegensatz zu 2D-Fraktalprogrammen sollte dieser Wert bei Quat nicht allzu hoch gewählt werden (kleiner als 100): Dieser Wert erhöht im Prinzip den Detailreichtum des Bildes, was im 2D erwünscht, im 3D aber unschön ist, da die Oberflächen der Objekte im Extremfall unendlich zerklüftet werden.
- lvalue
  ein float-Parameter folgt. VmB: im Object Editor.
  Der Wert (für die 4. Komponente eines Punktes im Raum), der die 4. Dimension repräsentiert. Als Iterations-Startwert x0 wird der Punkt im Raum genommen, der berechnet werden soll. Damit hat man erst 3 Komponenten. Die 4. Komponente wird auf den Wert lvalue gesetzt.
- formula
  ein int-Parameter folgt. VmB: im Object Editor.
  Bestimmt, nach welcher Iterationsformel iteriert werden soll. Hier sind die Werte "0" bis "4" zulässig, die für folgende Formeln stehen:

  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

- p1, p2, p3 und p4
  vier float-Parameter folgen jeweils. VmB: im Object Editor (nur wenn sinnvoll).
  p1-p4 sind weitere Parameter für die Iterations-Formel. Bislang wird nur p1 benötigt, und zwar gibt p1 beispielsweise in der 5. Iterationsformel (x^p1-c) den Exponenten an. Die 4 Werte stellen jeweils die 4 Komponenten eines Quaternions dar.
- viewpoint
  drei float-Parameter folgen. VmB: im View Editor.
  "Viewpoint" ist ein Vektor im Q-Raum. Er kennzeichnet den Punkt im Q-Raum, der das Zentrum der Bildebene ist (von dem aus also das Objekt betrachtet wird). Siehe auch Abschnitt 2.2.
- up
  drei float-Parameter folgen. VmB: im View Editor.
  Gibt die Richtung im Raum an, wo "oben" sein soll. Dieser Vektor darf nicht senkrecht zur Bildebene stehen! Siehe auch Abschnitt 2.2.
- light
  drei float-Parameter folgen. VmB: im View Editor.
  Ist ein Vektor im Bildkoordinatensystem und gibt die Position der Lichtquelle relativ zur Position des Beobachters (viewpoint) an, gemessen in Einheiten des Bildkoordinatensystems.
- lxr
  1 float-Parameter folgt. VmB: im View Editor.
  Gibt die Länge des "Bildschirms" auf der Bildebene im Q-Raum an. Bestimmt so die Größe des Sichtfensters/Objekts. Siehe auch Abschnitt 2.2.
- move
  2 float-Parameter folgen. VmB: im View Editor.
  Hier wird angegeben, wie die Bildebene verschoben werden soll (in ihren eigenen Koordinatenrichtungen x und y). Siehe auch Abschnitt 2.2.
- interocular
  1 float-Parameter folgt. VmB: im View Editor.
  Wenn dieser Wert Null ist, wird eine 2D-Projektion des fraktalen Objekts generiert. Wenn er auf einen Wert ungleich Null gesetzt wird, werden zwei verschiedene 2D-Projektionen berechnet, eine für das linke Auge (die rechte) und eine für das rechte Auge (die linke). Wenn Sie wissen, wie man diese Bilder zu einem einzigen verschmelzen kann, können Sie das Objekt echt dreidimensional sehen! Eine großartige Erfahrung! Sehen Sie nach im Anhang 5.3 ("Kreuzblick"), dort steht eine Erklärung, wie die Bilder verschmolzen werden können.
  Der Wert ist die Entfernung, die der Viewpoint für das linke von dem für das rechte Auge hat (im Q-Raum). Er sollte kleiner als lxr sein.
- phong
  2 float-Parameter folgen. VmB: im Other Editor.
  Die erste Zahl gibt die maximale Intensität des Phong-Highlights an (von 0 bis 1), der zweite, wie scharf das Phong-Highlight sein soll (also wie schnell sich die Helligkeit der normalen Helligkeit ohne Highlight annähert.) (von 0 bis unendlich)
  Ein "Phong-Highlight" ist ein greller Lichtreflex, wie er z.B. auf einer Billardkugel beobachtet werden kann.
- ambient
  1 float-Parameter folgt. VmB: im Other Editor.
  Gibt an, wie hell das Umgebungslicht sein soll. Wert zwischen 0 und 1.
- antialiasing
  1 int-Parameter folgt. VmB: im Other Editor.
  Um störende Moire-Effekte (regelmäßige Muster schwarzer Punkte auf den Objekten) zu verhindern, werden anstelle eines Pixels mehrere Zwischenpunkte berechnet und von diesen der Mittelwert der Helligkeit berechnet. Der Parameter hinter diesem Schlüsselwort gibt an, wieviele Zwischenpunkte berechnet werden. Bei "`antialiasing 2`" z.B. wird ein Pixel durch ein 2x2 Rechteck ersetzt, also 4 Punkte berechnet, deren mittlerer Helligkeitswert die Helligkeit des Pixels bestimmt. Natürlich verlangsamt dies die Berechnung um den Faktor 4 !
  Wert muß zwischen 1 und 5 einschließlich liegen.

## 4.2 Schlüsselwörter zur Definition von Farben

Eine Farbe bei Quat wird repräsentiert durch ein Red-Green-Blue-Tripel, wobei Red, Green und Blue Werte von 0.0 bis 1.0 annehmen können.

In Verbindung mit anderen Farben (also in einer Palette) benötigt jede Farbe noch eine Art Gewichtung, die bestimmt, welchen Anteil an der Palette diese Farbe ausmacht. Gleiches gilt für einen Farbverlauf. Die Gewichtungen aller Farben/Verläufe werden von Quat summiert, um festzulegen, was 100% entspricht.

Es können mehrere Farben und Farbverläufe definiert werden, die zusammen die Palette ausmachen. Die Farbe, die als erstes angegeben wird, entspricht dem Wert "0.0", die letzte Farbe dem Wert "1.0". Das wird später wichtig werden, wenn es darum geht, wie man über eine mathematische Formel eine Farbe ansteuert.
Die Schlüsselwörter:

- color
  4 float-Parameter folgen. VmB: indirekt im Color Editor. (Setzen beider Farben eines Farbverlaufs auf die gleichen Werte).
  Die erste Zahl gibt die Gewichtung der Farbe an (bedeutungslos, wenn die gesamte Palette aus nur einer Farbe besteht) und DARF NICHT NULL sein! Die anderen 3 die Intensität von Rot, Grün und Blau (in dieser Reihenfolge) als Werte zwischen 0.0 (keine Intensität) und 1.0 (maximale Intensität)
- colorrange
  7 float-Parameter folgen. VmB: im Color Editor.
  Die 1. Zahl gibt die Gewichtung an (siehe "`color`"), die nächsten 3 die Farbe, bei der der Farbverlauf starten soll, die letzten 3 die Farbe, bei der der Farbverlauf enden soll.

## 4.3 Schlüsselwörter zur Definition von Schnittobjekten

Es können Objekte (bis jetzt nur Ebenen) definiert werden, die mit dem fraktalen Objekt geschnitten werden.
Schlüsselwörter:

- plane
  6 float-Parameter folgen. VmB: im Intersection Editor.
  Definiert eine Ebene, die den Raum in 2 Halbräume unterteilt. Die ersten 3 Parameter geben den Normalenvektor der Ebene an, die letzten 3 den Aufpunkt der Ebene. Der Normalenvektor zeigt in denjenigen Halbraum, der vom Fraktal weggeschnitten werden soll.

## 4.4 sonstige Schlüsselwörter

- include
  Fügt eine andere Textdatei ein. Das Resultat ist genauso, wie wenn die Angaben, die in der eingefügten Datei stehen, direkt dort stehen würden, wo include steht.
  Es folgt ein String-Parameter, der den Namen der einzufügenden Datei (mit Endung!) angibt. Es sollte vermieden werden, hier Pfade mit anzugeben.
- resolution
  3 int-Parameter folgen. VmB: in Other Editor.
  Die ersten beiden Zahlen geben die Größe des zu berechnenden Bildes in Pixeln an (der erste in x- der zweite in y-Richtung). Der letzte bestimmt die Auflösung des Bildes in z-Richtung (also senkrecht zum Bildschirm). Je größer dieser Wert ist, umso kleiner sind die Schritte, in denen in z-Richtung nach dem Fraktal "getastet" wird.
  Dieser Wert sollte von der Größenordnung der y-Auflösung sein. Wählt man ihn zu niedrig, wird zwar die Berechnung schneller, aber es kann sein, daß die Ränder des Fraktals "ausgefranst" wirken, weil an bestimmten Stellen (vorzugsweise am Rand) das Fraktal nicht getroffen wurde. (In Anhang 5.2 ist ein Beispiel dafür zu sehen).
- colorscheme
  string folgt. VmB: im Color Editor.
  Hier wird die Formel angegeben, die die Farbe des Fraktals in Abhängigkeit vom Punkt im Raum bestimmt. Die Formel sollte im gewählten Raumausschnitt Werte zwischen 0 und 1 annehmen. Verläßt sie diesen Wertebereich, so wird durch eine Art "floating-point-modulo" das Ergebnis wieder auf den Bereich zwischen 0 und 1 reduziert. Besteht die Palette nur aus einer einzigen Farbe, so kann als Formel einfach "`0`" geschrieben werden.
  Es sind folgende Variablen vordefiniert: `x`, `y` und `z`. Sie enthalten die x, y und z-Koordinate des Punktes im Raum, dessen Farbe berechnet werden soll. Es können Klammern zur Bestimmung der Abarbeitungsreihenfolge verwendet werden.
  Neben den normalen mathematischen Operationen (+,-,*,/) und dem Potenzieren (^) sind die folgenden üblichen, mathematische Funktionen definiert:
  `sin, cos, tan, sqr, sqrt, exp, ln, atan, asin, acos, round, trunc, abs, random`
  `sin(x)`: Sinus von x (x im Bogenmaß)
  `cos(x)`: Cosinus von x (x im Bogenmaß)
  `tan(x)`: Tangens von x (x im Bogenmaß)
  `sqr(x)`: x im Quadrat. (`x*x`)
  `sqrt(x)`: Wurzel aus x.
  `exp(x)`: `e^x`. (e hoch x). `e` ist die Euler'sche Zahl, (2.718...)
  `ln(x)`: Umkehrfunktion zu `exp(x)`. Natürlicher Logarithmus.
  `atan(x)`: Arcustangens von x. Umkehrfunktion des Tangens.
  `asin(x)`: Arcussinus von x. Umkehrfunktion des Sinus.
  `acos(x)`: Arcuscosinus von x. Umkehrfunktion des Cosinus.
  `round(x)`: rundet x auf oder ab. `round(2.5)=3.0`; `round(2.4999)=2.0`;
  `trunc(x)`: ergibt die größte Ganzzahl, die kleiner oder gleich x ist. `trunc(2.0)=2.0`; `trunc(2.5)=2.0`; `trunc(2.999)=2.0`;
  `abs(x)`: Betrag von x.
  `random(x)`: Zufallszahl zwischen 0 und x.

  Spezielle Funktionen zur Fraktalberechnung sind:
  `orbite(n)`: Der 1-Teil des Quaternions nach n Iterationen.
  `orbitj(n)`: Der i-Teil des Quaternions nach n Iterationen.
  `orbitk(n)`: Der j-Teil des Quaternions nach n Iterationen.
  `orbitl(n)`: Der k-Teil des Quaternions nach n Iterationen.

  Mit diesen orbit-Funktionen läßt sich eine Farbgebung erzielen, die sich am Objekt selber orientiert.