Einzelnen Beitrag anzeigen

Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: Farbskala für eine Juliamenge ($1FFF)

  Alt 3. Dez 2008, 01:54
Eigentlich hat es überhaupt nichts mit der Berechnung des Fraktals zu tun. Dies ist eine von ich würde behaupten unbegrenzt vielen Möglichkeiten Pixeln eine Farbe zuzuweisen, in diesem Fall abhängig davon wie viele Iterationen der Ausgangswert "überlebt" hat.

TCanvas.Pixels[] ist vom Typ Delphi-Referenz durchsuchenTColor, welcher erstmal nichts weiter als ein Integer ist. Dabei werden die 4 Bytes aus denen ein Integer zusammengesetzt ist jeweils als Helligkeitswert für eine der drei Grundfarben interpretiert (das höchste Byte bleibt zunächst einmal ungenutzt). $1FFF würde in diesem Fall als Blau = 0; Grün = $1F; Rot = $FF interpretiert, was einem ganz leicht orangenem Rot entsprechen dürfte. Das Multiplizieren mit (k+x) führt dann im Grunde nur noch dazu, dass für unterschiedliche Werte von k unterschiedliche Farben dabei heraus kommen.
Das Verfahren ist allerdings zugegebenermaßen ein wenig ungewöhnlich, da man in den meisten Fällen Rot, Grün und Blau separat berechnet, und anschließend mit Bei Google suchenBitoperationen zu einem einzigen Farbwert zusammen setzt. Es gibt aber keine Regel die das von dir gezeigte Vorgehen verbieten würde. Es ist eben eine von vielen Möglichen, und du bist nicht gezwungen es genau so zu machen.


Als genereller Tipp: Verabschiede dich von der Untrennbarkeit zwischen Wert und Darstellung. Ich kann z.B. den Wert von 12 auf beliebige Weise darstellen in dem ich einfach ein anderes System verwende. Das allgemein gebräuchliche ist das Dezimalsystem, in welchem dem (modernen) Menschen "12" sofort einleuchtet. Ich kann den selben Wert auch als "C" schreiben, sollte dann nur dazu sagen dass ich das Hexadezimalsystem verwende. In Delphi tut man dies, in dem man das Dollarzeichen der Zahl voran stellt, also "$C". Gemeint ist nach wie vor der Dezimalwert von 12. Man könnte auch ein ganz anderes System, etwa das der Maya verwenden. Dann sieht die Darstellung des Wertes wieder ganz anders aus, aber es ist noch immer der Wert von dezimal 12 gemeint.
$1FFF ist also im Hexadezimalsystem dargestellt, und würde im Dezimalsystem 8191 lauten. Allerdings bietet sich gerade bei Farben die hexadezimale Darstellung an, da immer zwei Stellen der Zahl zu je einem Byte gehören, und somit die Helligkeit jeder der Farbkomponenten ganz gut ersichtlich ist. Im Dezimalsystem ist diese Zuordnung so einfach nicht möglich. Als Beispiel:
$1FFF ist das gleiche wie $001FFF (einfach Nullen vorne auffüllen, tut im Dezimalsystem auch nicht weh). Je Farbkomponente habe ich 2 Stellen, also ist eine "00", eine "1F" und die letzte "FF". Welcher Wert zu welcher Farbe gehört ist eine Sache der Konvention, in diesem Falle ist es Blau, Grün, Rot. Also weiss ich ohne weiteres:
Blau=00 -> ganz dunkel, kein Blau in der Farbe
Grün=1F -> sehr dunkles Grün ist beteiligt
Rot =FF -> volle Pulle Rot
Jetzt ist es hilfreich zu wissen, dass das RGB-Farbsystem ein additives ist (Lichtfarben), und Rot+Grün=Gelb gilt. Da nur sehr wenig Grün dabei ist, wird hier ein sehr rotes Orange (oder auch gelbliches Rot) hinten raus kommen.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat