Colors 如何在没有两种颜色几乎相似的情况下生成一组随机颜色?

Colors 如何在没有两种颜色几乎相似的情况下生成一组随机颜色?,colors,Colors,我目前使用以下函数生成颜色的随机十六进制表示 function getRandomColor($max_r = 192, $max_g = 192, $max_b = 192) { if ($max_r > 192) { $max_r = 192; } if ($max_g > 192) { $max_g = 192; } if ($max_b > 192) { $max_b = 192; } if ($max_r < 0) { $max_

我目前使用以下函数生成颜色的随机十六进制表示

function getRandomColor($max_r = 192, $max_g = 192, $max_b = 192) {
    if ($max_r > 192) { $max_r = 192; }
    if ($max_g > 192) { $max_g = 192; }
    if ($max_b > 192) { $max_b = 192; }
    if ($max_r < 0) { $max_r = 0; }
    if ($max_g < 0) { $max_g = 0; }
    if ($max_b < 0) { $max_b = 0; }

    return '#' . dechex(rand(0, 192)) . dechex(rand(0, 192)) . dechex(rand(0, 192));
}
函数getRandomColor($max\u r=192,$max\u g=192,$max\u b=192){ 如果($max\u r>192){$max\u r=192;} 如果($max\u g>192){$max\u g=192;} 如果($max_b>192){$max_b=192;} 如果($max\u r<0){$max\u r=0;} 如果($max_g<0){$max_g=0;} 如果($max_b<0){$max_b=0;} 返回'#'.dechex(rand(0192)).dechex(rand(0192)).dechex(rand(0192)); } 请注意,我将最大值设置为192而不是255,唯一的原因是我避免使用非常浅的颜色,目的是在白色背景中使用随机颜色作为前景


我的问题是,在没有几乎相同的颜色的情况下,如何生成一组无限编号的颜色。e、 g.:
#D964D9
&
#FF3EFF

有几种方法浮现在脑海中:

  • 设置一个由n种标准颜色组成的数组,并随机交换它们以生成所需的“随机”颜色
  • 填充n个颜色的数组;生成一个随机颜色,并检查数组中是否已经有“接近”的内容。如果是,请选择另一种随机颜色
  • 选择每种颜色作为一个确定性序列,就像一个简单的散列值,设计为不产生重复值。我突然想到

  • 使用坐标可能更好。如果不需要白色或黑色,可以将S和V设置为其最大值,并生成彼此不太接近的H值(mod 360度)。然后转换为RGB。

    您的算法可以随机生成RGB颜色(正如现在所做的),但是您可以在接受颜色选择之前验证两个R是否足够不同。对于给定的R、G和/或B,该算法可以重复该步骤(比如最多4…10…N次)

    while ( (R1 > $max_r/2) && (R2 > $max_r/2) ) {
    // Both are in the upper half of range, get a new random value for R1.
    }
    
    其他可能性:

    • 对量程的下半部分重复此操作
    • 进一步细分范围(分为1/3或1/4)
    • 重复G和B音

    在寻找解决方案时需要记住的一件事是,如果你打算将随机选择的两种颜色彼此靠近,那么有许多颜色根本不属于一起,会让你的眼睛流血。正因为如此,我才知道实际上只有12种颜色是唯一的(至少在我看来是这样的)