生成RYB色轮的算法?

时间:2019-06-18 15:21:26

标签: math colors interpolation rgb color-wheel

我正在尝试生成色轮,但是在RYB空间中。我已经在RGB中成功实现了这一点。我从红色(255,0,0)开始,将其转换为HSL,增加色相值,然后转换回屏幕上显示。此处描述了详细信息:https://serennu.com/colour/rgbtohsl.php 但是,到目前为止,我对RYB所做的尝试都没有成功。

根据我的阅读,您获得了RGB值,例如Red(255、0、0)。然后,假设它是RYB,并使用下面的代码将该“ RYB”值转换为RGB。然后,我所做的就是获取该值,将其转换为HSL,增加色相,然后像以前一样将其显示在屏幕上。

def _cubic(t, a, b):
weight = t * t * (3 - 2*t)
return a + weight * (b - a)

def ryb_to_rgb(r, y, b): # Assumption: r, y, b in [0, 1]
# red
x0, x1 = _cubic(b, 1.0, 0.163), _cubic(b, 1.0, 0.0)
x2, x3 = _cubic(b, 1.0, 0.5), _cubic(b, 1.0, 0.2)
y0, y1 = _cubic(y, x0, x1), _cubic(y, x2, x3)
red = _cubic(r, y0, y1)

# green
x0, x1 = _cubic(b, 1.0, 0.373), _cubic(b, 1.0, 0.66)
x2, x3 = _cubic(b, 0., 0.), _cubic(b, 0.5, 0.094)
y0, y1 = _cubic(y, x0, x1), _cubic(y, x2, x3)
green = _cubic(r, y0, y1)

# blue
x0, x1 = _cubic(b, 1.0, 0.6), _cubic(b, 0.0, 0.2)
x2, x3 = _cubic(b, 0.0, 0.5), _cubic(b, 0.0, 0.0)
y0, y1 = _cubic(y, x0, x1), _cubic(y, x2, x3)
blue = _cubic(r, y0, y1)

return (red, green, blue)

我希望获得RYB色轮,如下所示:Calculating the analogous color with python 我已经按照这篇文章中的说明进行操作,但仍然得到错误的颜色。我已经在线性路径(不是圆形)上测试了此算法,以获得http://prntscr.com/o3gcjr 这看起来与我上面链接到的帖子上的色轮相似。但是,从其他颜色启动车轮时,我得到了这个http://prntscr.com/o3gp76 而且我认为这似乎不正确。

0 个答案:

没有答案