2011-03-21 63 views
2

我想根據原始顏色和正態分佈生成一個隨機顏色,這樣我就可以創建一個隨機紋理來告訴腳本「好的,這是您應該使用的一般顏色使用,但如果你現在每時每刻都大不相同,那很好「。正態分佈的隨機顏色偏差

我正在使用Box-Muller變換在JavaScript中編寫代碼。但是如果我在每個R,G和B值上獨立使用正態分佈,我會得到不希望的尖峯。例如,如果我的基本顏色是淺灰色,則會獲得非常紅,非常綠或非常藍的像素。這是我的腳本到目前爲止(「0,255」是最小值和最大值):

function randomHex(hex, deviation){ 
    R = HexToR(hex); 
    G = HexToG(hex); 
    B = HexToB(hex); 
    R = randomNormal(R, deviation, 0, 255); 
    G = randomNormal(G, deviation, 0, 255); 
    B = randomNormal(B, deviation, 0, 255); 
    return RGBtoHex(R,G,B); 
} 

我想我正在尋找的是在RGB顏色的三維空間以某種方式定義一個點,然後選擇(均勻分佈)的隨機點在以球體爲中心的球體上,球體的半徑是以正態分佈隨機生成的。

無論如何,這就是理論。我只是不知道如何在JavaScript中完成這項工作。

我會很感激任何指針!

回答

1

我想嘗試使用HSV(或HSL),而不是RGB。您需要一個功能將其轉換回RGB(例如,參見here)。在這種情況下,H是色調,而你的價值是一圈顏色上的某個位置。 S和V分別控制飽和度和值/亮度。我認爲這會給你更多的控制權來獲得你之後的發行版。更多關於維基百科here的信息。

+0

有趣。我應該研究一下。我將它用於Photoshop腳本,並且可以在那裏訪問HSB顏色模型(這與HSV應該是一樣的)。但是,我會如何隨機化?每個值都會收到自己的正態分佈隨機數?這會在色調或飽和度或亮度上激增(並且很少在3個以上的其中一箇中)。得試試看。謝謝! (還沒有足夠的聲望來升級,對不起 – Squis 2011-03-22 03:04:02

+0

我認爲這是你想玩的東西,以獲得你以後的結果。我的猜測是,你可能想要一個正常的色調分佈,但也許是飽和度和數值/亮度的不同分佈,它可以歸結爲調整每個標準偏差(我懷疑你會希望它對於所有三個值都是相同的) – afranz409 2011-03-22 12:55:48