2010-11-20 7 views
11

12個のスライスのパイを作成したいと思います。カラーホイールの背後にある数学は何ですか?

ほとんど全てのカラーホイールが同じフォーマットに従っているようです。例:http://www.tigercolor.com/color-lab/color-theory/color-theory-intro.htm

しかし、どのようなアルゴリズムが色を生成するためにありますか? RGB(シータ)の背後にある数学は何ですか?確かにこれに関する確立された科学があるに違いないが、Googleは私に手がかりを与えていない。

+0

「色(角度)= HSV(角度、1,1) '? –

+0

ok ...しかし、その背後にある数学は何ですか? –

+2

http://stackoverflow.com/questions/180/function-for-creating-color-wheelsで回答を見ましたか? –

答えて

6

http://www.easyrgb.comをご覧ください。多くの色変換の背後にあるアルゴリズムを備えています。ここには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

StackExchange Color Theoryサイトをアップアップ/フォローすることを検討してください。https://area51.stackexchange.com/proposals/110687/color-theory –

7

(例えば、Mac OS Xのカラーピッカーとして、下図)カラーホイールは色相飽和HSV colour spaceからの3つの成分のうちの2つを)表示します。色相は角度によって変化し、彩度は半径によって変化します。通常、(別名明度)の別のスライダがあります。 HSVとRGBの間で前後に変換する方法について

Mac OS X colour picker

See Wikipedia。あるいは、あなたのプログラミング言語に合わせたAPIがあるかもしれません。たとえば、Pythonにはcolorsys libraryがあります。

1

あなたが提供した例のようなカラーホイール(とクラフトストアのペイントセクションで見つけることができますほとんどのカラーホイールのような)、赤は反対側の緑と青が黄色 - オレンジ、 HSLやHSVの色相を変更して従来の色相を得るには、単に次の計算を行うことができます。

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; 
} 
関連する問題