2010-11-20 16 views
11

Her dilim farklı bir renkle 12 dilimden oluşan bir pasta oluşturmak istiyorum.Renk Tekerleğinin arkasındaki matematik nedir

Hemen hemen her renk tekerleği aynı biçimi izliyor gibi görünüyor; örneğin: http://www.tigercolor.com/color-lab/color-theory/color-theory-intro.htm.

Ancak renkleri oluşturmak için hangi algoritmalar var? RGB (teta) arkasındaki matematik nedir? Elbette bunun üzerine kurulmuş bir bilim olmalı, ancak Google bana herhangi bir ipucu vermiyor.

+0

sadece 'renk (açı) = HSV değil mi ... eski tonu elde etmek için HSL veya HSV tonunu değiştirmek için aşağıdaki matematik yapabilirsiniz (açı, 1, 1) '? –

+0

tamam ... ama arkasındaki matematik nedir? –

+2

http://stackoverflow.com/questions/180/function-for-creating-color-wheels adresindeki cevaplara baktınız mı? –

cevap

6

http://www.easyrgb.com'a bakın, birçok renk dönüşümünün arkasındaki algoritmalara sahiptir. İşte RGB -> HSV olanı.

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

Lütfen StackExchange Renk Kuramı sitesini yükseltmeyi/takip etmeyi düşünün: https://area51.stackexchange.com/tekliflerin/110.687/renk teori –

7

(, Mac OS X renk seçici olarak, aşağıda gösterilmiştir) bir renk çarkı tonu ve doygunluk (HSV colour space üç bileşenden iki) gösterir. Ton, açı ile değişir ve doygunluk yarıçap ile değişir. Tipik olarak, değeri (ayrı parlaklık) için ayrı bir kaydırıcı vardır.

Mac OS X colour picker HSV ve RGB arasında ileri ve geri dönüştürmek için nasıl

See Wikipedia

. Ya da sizin programlama diliniz için bir API olabilir. Örneğin, Python colorsys library'a sahiptir.

1

Sağladığınız örnekteki gibi bir renk tekerleği (ve çoğu renk tekerleğinde bir zanaat deposu boya bölümünde bulacağınız gibi) istiyorsanız, kırmızı, yeşilin karşısında ve mavi sarı-turuncu, sarı zıtın karşısında, vs, sadece

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