2010-11-20 11 views
11

Quiero crear una tarta con 12 rebanadas, con cada rebanada de un color diferente.Cuál es la matemática detrás de la rueda de colores

Casi todas las ruedas de color parecen seguir el mismo formato; por ejemplo: http://www.tigercolor.com/color-lab/color-theory/color-theory-intro.htm.

Pero, ¿qué algoritmos existen para generar los colores? ¿Cuál es la matemática detrás de RGB (theta)? Seguramente debe haber algo de ciencia establecida sobre esto, pero Google no me da ninguna pista.

+0

¿no es simplemente 'de color (ángulo) = HSV (ángulo, 1, 1) ¿? –

+0

bien ... pero ¿cuál es la matemática detrás de eso? –

+2

¿Ha mirado las respuestas en http://stackoverflow.com/questions/180/function-for-creating-color-wheels? –

Respuesta

6

Eche un vistazo a http://www.easyrgb.com tiene los algoritmos detrás de muchas conversiones de color. Aquí está el RGB -> HSV uno.

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

Considere la posibilidad de votar/seguir el sitio StackExchange Color Theory: https://area51.stackexchange.com/proposals/110687/teoría del color –

7

Una rueda de colores (como el selector de color de x Mac OS, se muestra a continuación) muestra tonalidad y saturación (dos de los tres componentes de la HSV colour space). El tono varía con el ángulo, y la saturación varía con el radio. Normalmente hay un control deslizante por separado para el valor (brillo aka).

Mac OS X colour picker

See Wikipedia para cómo convertir ida y vuelta entre HSV y RGB. O puede haber una API para su lenguaje de programación de elección. Por ejemplo, Python tiene el colorsys library.

1

Si desea una rueda de color como el ejemplo que proporcionó (y como la mayoría de las ruedas de color encontrará en una sección de pintura de tienda de manualidades), donde el rojo es opuesto al verde y el azul opuesto amarillo-naranja, púrpura etc., sólo tiene que hacer lo siguiente matemáticas para modificar la tonalidad de la HSL o HSV para obtener la tonalidad legado ...

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; 
} 
Cuestiones relacionadas