2010-11-20 45 views
11

Tôi muốn tạo một chiếc bánh với 12 lát, với mỗi lát có màu khác nhau.Toán học đằng sau Bánh xe màu là gì

Khá nhiều bánh xe màu dường như tuân theo cùng một định dạng; ví dụ: http://www.tigercolor.com/color-lab/color-theory/color-theory-intro.htm.

Nhưng thuật toán nào có để tạo màu? Toán học đằng sau RGB (theta) là gì? Chắc chắn phải có một số khoa học được thiết lập về điều này, nhưng Google không cho tôi bất kỳ manh mối nào.

+0

Nó không chỉ là 'màu (góc) = HSV (góc, 1, 1) '? –

+0

ok ... nhưng toán học đằng sau điều đó là gì? –

+2

Bạn đã xem câu trả lời trên http://stackoverflow.com/questions/180/function-for-creating-color-wheels chưa? –

Trả lời

6

Hãy xem http://www.easyrgb.com nó có các thuật toán đằng sau nhiều chuyển đổi màu. Đây 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

Xin vui lòng xem xét upvoting/sau trang web lý thuyết màu StackExchange: https://area51.stackexchange.com/đề xuất/110687/màu sắc-lý thuyết –

7

Một bánh xe màu (ví dụ như chọn X màu Mac OS, hình bên dưới) sẽ hiển thị sắcbão hòa (hai trong số ba thành phần từ HSV colour space). Màu sắc thay đổi theo góc và độ bão hòa thay đổi theo bán kính. Thông thường có một thanh trượt riêng cho giá trị (còn gọi là độ sáng).

Mac OS X colour picker

See Wikipedia cho làm thế nào để chuyển đổi qua lại giữa HSV và RGB. Hoặc có thể có một API cho ngôn ngữ lập trình bạn chọn. Ví dụ, Python có colorsys library.

1

Nếu bạn muốn bánh xe màu giống như ví dụ bạn đã cung cấp (và giống như hầu hết các bánh xe màu bạn sẽ tìm thấy trong phần sơn cửa hàng thủ công), nơi màu đỏ là đối diện màu xanh lá cây và màu xanh. vv, bạn có thể chỉ cần làm toán học sau đây để sửa đổi màu sắc của HSL hoặc HSV để có được màu sắc di sản ...

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; 
} 
Các vấn đề liên quan