Videos | Spenden | Impressum | Kontakt

Die Farbkugel



Für meine künstlerische Arbeit brauche ich natürlich Farben. Und da gibt es den Farbkreis von Goethe. Doch der hat nicht alle Farben. Dann gibt es da die RGB Farben. RGB steht für Rot, Grün, Blau. Doch via RGB lassen sich die Farben nicht intuitiv ansteuern und kontinuierlich verändern, da die drei Farbwerte von 0 bis 255 gehen und dann aufhören.

Also erfand ich die Farbkugel.

Die Idee ist ganz einfach. Die Farbkugel hat den Radius 1. Auf ihrer Oberfläche sind die reinen Farben. Der Nordpol ist weiß, der Südpol ist schwarz, der Äquator hat die Regenbogenfarben wie der Farbkreis. Komplementärfarben liegen sich gegenüber, Farben auf dem gleichen Breitenkreis haben immer die gleiche Farbhelle, auch wenn sie innerhalb der Kugel liegen, die Polachse ist farblos und hat die Graustufen.

Und so kann ich leicht über die Polarkoordinaten jede Farbe gezielt ansteuern und verändern ohne Sprünge wie bei den RGB Farben.

Die Farbkugel
Bild "sonstiges:Farbkugel1.PNG"Bild "sonstiges:Farbkugel2.PNG"
Vorderansicht mit Nordpol (links) und Rückansicht mit Südpol (rechts)


Farbkugel - innen
Bild "Mathematik:Farbkugel_innen.PNG"
Schnitt längs des Null-Meridians


Ich habe in Python eine Transformation geschrieben, mit der ich die 3 Polarkoordinaten der Farbkugel in RGB umrechnen kann und wieder zurück. Und weil das alles mehr mit Mathematik zu tun hat, habe ich das hier unter der Kategorie "Mathematik" aufgeführt.


Hier ist das Python-Script:
Hpr steht für:   Hue, Polarwinkel, Radius
H   geht von 0 bis 360 und steht für den Farbwert
p   geht von -1 (schwarz) bis 1 (weiß); 0 meint mittlere Helligkeit
r   geht von 0 bis 1; 0 ist das Mittelgrau, 1 sind die reinen Farben

RGB steht für Rot, Grün, Blau, die Werte gehen von 0 bis 255

(Wer den Polarwinkel in Grad von -90 bis 90 eingeben möchte, muss die Zeile phi = sin(radians(phi)) einfügen)

def RGBHpr(R, G, B):
    r, g, b = R/255, G/255, B/255
    maxc = max(r, g, b)
    minc = min(r, g, b)
    ra = 2*max(abs(0.5-r), abs(0.5-g), abs(0.5-b))
    phi = (maxc+minc-1)/ra
    if minc == maxc:
        h = 0
    else:
        rc = (maxc-r) / (maxc-minc)
        gc = (maxc-g) / (maxc-minc)
        bc = (maxc-b) / (maxc-minc)
        if r == maxc:
            h = bc-gc
        elif g == maxc:
            h = 2.0+rc-bc
        else:
            h = 4.0+gc-rc
        h = (h/6.0) % 1.0
    H = 360*h
    return H, phi, ra

def HprRGB(H, phi = 0, ra = 1):
    if phi == -1 and ra == 1:
        return 0, 0, 0
    if phi > 0:
        v = (1+ra)/2
        s = ra*(1-phi)/v
    else:
        v = (ra+2*phi*ra+1)/2
        s = ra*(1+phi)/v
    h = H%360/360  
    if s == 0.0:
        R, G, B = 255*v, 255*v, 255*v
    else:
        i = int(h*6.0)        
        f = (h*6.0) - i
        p = v*(1.0 - s)
        q = v*(1.0 - s*f)
        t = v*(1.0 - s*(1.0-f))
        i = i%6    
        v = 255*v
        t = 255*t
        p = 255*p
        q = 255*q
        if i == 0:
            R, G, B = v, t, p
        if i == 1:
            R, G, B = q, v, p
        if i == 2:
            R, G, B = p, v, t
        if i == 3:
            R, G, B = p, q, v
        if i == 4:
            R, G, B = t, p, v
        if i == 5:
            R, G, B = v, p, q    
    return int(R), int(G), int(B)

Mitunter ist es sinnvoller, statt einer Farbkugel eine Farbzwiebel zu benutzen. Dann geht der Radius nicht radial vom Mittelgrau aus sondern senkrecht von der Polachse in Prozent der Reinfarbe, sodass die Helligkeit erhalten bleibt.

Hier ist das Farbzwiebel-Script:

def fz(H, q = 0, n = 1):
   if q == 0 and n == 0:
       return 127,127,127
   r = (q**2*(1 - n**2) + n**2)**0.5
   p = q/r
   return HprRGB(H, p, r)

def RGBfz(R, G, B):
   H, phi, ra = RGBHpr(R, G, B)
   q = ra*phi
   n = ra*((1-phi**2)/(1-ra**2*phi**2))**0.5
   return H, q, n


q   geht wie gehabt von -1 bis 1 und meint den Polarwinkel;
n   geht von 0 bis 1.




Die eric Scrollbar


Und wo wir schon mal beim Thema Python sind:

Die Suchtreffer-Anzeige in der Scrollbar der IDE eric habe ich mir ausgedacht. Detlev Offenbach war so freundlich und talentiert, die Idee umzusetzen.

Die Scrollbar
Bild "Mathematik:Scrollbar.png"
mit Suchtreffer-Anzeige

Bringt man den Kursor im Text auf ein Wort, eine Zahl oder Variable, dann erscheinen in der Scrollbar alle Stellen des Textes, in denen das Wort auftritt durch einen blauen Strich markiert. Man hat dann sofort den Überblick, wo es auftaucht und kann dann leicht zu der Stelle gelangen, zu der man hin will.
Das geht schnell und ist sicherer.
Früher hat man oft Stellen übersehen, wenn man etwas beim Programmieren ändern wollte, was sehr oft zu Programmier-Fehlern führte.

Es ist nur eine Frage der Zeit, bis die anderen IDEs und Textverarbeitungsprogramme das kopieren werden.