我想根据原始颜色和正态分布生成随机颜色,所以我可以创建一个随机纹理,告诉脚本“好的,这是你应该使用的一般颜色,但如果你现在有很大差异然后,没关系”。
我正在用 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 中使它工作。
我会感谢任何指示!