我想随机化许多颜色,所有颜色都具有相同的亮度(但不同的紫色)。现在有一个很好的颜色空间,比如LAB
,可以让你做到这一点,但当转换回RGB时会有点棘手,因为不是所有你可以在LAB
空间中选择的颜色都可以在普通的RGB
中表示。
我决定采取以下方法(糟糕的伪代码,更不用说范围和精确值了):
L = some fixed value
while r, g or b not in range 0.0 to 1.0:
a = random value
b = random value
r, g, b = LABtoRGB(L, a, b)
现在,对于L=50
,这往往只需要1或2次迭代(因为RGB
可以代表该亮度的很大一部分颜色),但我不喜欢这种解决方案。
肯定有更好的方法吗?干杯
实现这一点的最简单但不是最准确的方法是随机选择R, G & B
,使sqrt(R^2+G^2+B^2) == L
(可能通过从平均值为L*sqrt(3)/3
的正态分布中绘制R
,并从平均值(L^2-R^2) / 2
的分布中绘制出G
(B
现在是sqrt(L^2 - R^2 - G^2)
)