具有正态分布的随机颜色偏差

时间:2011-03-21 14:23:21

标签: javascript random colors rgb normal-distribution

我想基于原始颜色和正态分布生成随机颜色,因此我可以创建一个随机纹理告诉脚本“好吧,这是你应该使用的一般颜色,但如果你不同很多时候,这很好“。

我正在用JavaScript编写,使用Box-Muller变换。但是如果我在每个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颜色的3D空间中定义一个点,然后在球体上选择一个(均匀分布的)随机点,该球体的中心是定义的点,而半径是随机生成的正态分布。

无论如何,这就是理论。我只是不知道如何在JavaScript中使用它。

我会感激任何指示!

1 个答案:

答案 0 :(得分:1)

我尝试使用HSV(或HSL)代替RGB。你需要一个函数来转换回RGB(参见here的例子)。在这种情况下,H是色调,您的值是一个颜色圆上的某个位置。 S和V分别控制饱和度和值/亮度。我认为这会让你有更多的控制来获得你所追求的发行版。有关维基百科here的更多信息。