2010-11-20 17 views
11

Voglio creare una torta con 12 fette, con ogni fetta di un colore diverso.Qual è la matematica dietro la ruota dei colori

Praticamente ogni ruota dei colori sembra seguire lo stesso formato; ad esempio: http://www.tigercolor.com/color-lab/color-theory/color-theory-intro.htm.

Ma quali algoritmi ci sono per generare i colori? Qual è la matematica dietro RGB (theta)? Sicuramente ci deve essere una scienza consolidata su questo, ma Google non mi sta dando alcun indizio.

+0

non è solo 'colore (angolo) = HSV (angolo, 1, 1) '? –

+0

ok ... ma qual è la matematica dietro? –

+2

Hai guardato le risposte su http://stackoverflow.com/questions/180/function-for-creating-color-wheels? –

risposta

6

Dai un'occhiata a http://www.easyrgb.com ha gli algoritmi dietro molte conversioni di colore. Ecco l'RGB -> HSV.

var_R = (R/255)      //RGB from 0 to 255 
var_G = (G/255) 
var_B = (B/255) 

var_Min = min(var_R, var_G, var_B) //Min. value of RGB 
var_Max = max(var_R, var_G, var_B) //Max. value of RGB 
del_Max = var_Max - var_Min    //Delta RGB value 

V = var_Max 

if (del_Max == 0)      //This is a gray, no chroma... 
{ 
    H = 0        //HSV results from 0 to 1 
    S = 0 
} 
else         //Chromatic data... 
{ 
    S = del_Max/var_Max 

    del_R = (((var_Max - var_R)/6) + (del_Max/2))/del_Max 
    del_G = (((var_Max - var_G)/6) + (del_Max/2))/del_Max 
    del_B = (((var_Max - var_B)/6) + (del_Max/2))/del_Max 

    if  (var_R == var_Max) H = del_B - del_G 
    else if (var_G == var_Max) H = (1/3) + del_R - del_B 
    else if (var_B == var_Max) H = (2/3) + del_G - del_R 

    if (H < 0) H += 1 
    if (H > 1) H -= 1 
} 
+0

Si prega di considerare l'upvoting/seguendo il sito di The Stackedchange Color Theory: https://area51.stackexchange.com/proposte/110687/color-teoria –

7

Una ruota colore (ad esempio X raccoglitrice di colore Mac OS, foto sotto) mostra tonalità e saturazione (due dei tre componenti dalla HSV colour space). La tonalità varia con l'angolo e la saturazione varia con il raggio. In genere esiste un dispositivo di scorrimento separato per il valore (ovvero luminosità).

Mac OS X colour picker

See Wikipedia per come convertire avanti e indietro tra HSV e RGB. Oppure potrebbe esserci un'API per il tuo linguaggio di programmazione di scelta. Ad esempio, Python ha il colorsys library.

1

Se si desidera una ruota dei colori come nell'esempio fornito (e come la maggior parte delle ruote dei colori che si trovano in una sezione di colori del negozio di artigianato), dove il rosso è opposto al verde e il blu è opposto al giallo-arancio, viola al giallo opposto, ecc, si può semplicemente fare il seguente calcolo per modificare la tonalità di HSL o HSV per ottenere la tonalità eredità ...

double ToLegacyHue(double modernHue) { 
    modernHue = ((modernHue % 360) + 360) % 360; // normalize 360 > modernHue >= 0 
    double ret = 0; 
    if(modernHue < 60) { 
     ret = modernHue * 2; 
    } else if(modernHue < 120) { 
     ret = modernHue + 60; 
    } else { 
     ret = (modernHue - 120) * 0.75 + 180; 
    } 
    return ret; 
} 

double FromLegacyHue(double legacyHue) { 
    legacyHue = ((legacyHue % 360) + 360) % 360; // normalize 360 > legacyHue >= 0 
    double ret = 0; 
    if(legacyHue < 120) { 
     ret = legacyHue/2; 
    } else if(legacyHue < 180) { 
     ret = legacyHue - 60; 
    } else { 
     ret = (legacyHue - 180)/0.75 + 120; 
    } 
    return ret; 
} 
Problemi correlati