确定颜色的 RYB 补色

Determining the RYB complement of a color

我正在尝试在 RYB space 中获得颜色的色彩和谐。我已成功实现 RGB 和声,但无法使 RYB 和声正常工作。他们离 FAR 远了。

我的程序获取 HEX/HTML 颜色,将其转换为 RGB,将 RGB 转换为 RYB,将 RYB 转换为 HSL,然后通过增加色调从那里执行和谐计算。我使用 https://www.rapidtables.com/convert/color/rgb-to-hsl.html 上的公式将 RYB 转换为 HSL。在该页面上,它给出了将 RGB 转换为 HSL 的公式。我只是使用 RYB 值代替 RGB。下面是我用来将 RGB 转换为 RYB 的公式:

var r = color[0], g = color[1], b = color[2];

// Remove the whiteness from the color.

var w = Math.min(r, g, b);

r -= w;

g -= w;

b -= w;



var mg = Math.max(r, g, b);



// Get the yellow out of the red+green.

var y = Math.min(r, g);

r -= y;

g -= y;



// If this unfortunate conversion combines blue and green, then cut each in

// half to preserve the value's maximum range.

if (b && g) {

    b /= 2.0;

    g /= 2.0;

}



// Redistribute the remaining green.

y += g;

b += g;



// Normalize to values.

var my = Math.max(r, y, b);

if (my) {

    var n = mg / my;

    r *= n;

    y *= n;

    b *= n;

}



// Add the white back in.

r += w;

y += w;

b += w;



// And return back the ryb typed accordingly.

return [r, y, b];

}

在RYB中得到红色的补色时,应该是绿色。在RGB中得到红色的补色时,应该是青色。无论如何,我的程序都会给出青色。 该程序应该给我这个:http://prntscr.com/o16ava 相反,它给了我:http://prntscr.com/o16b08

它无法正常工作,因为正如您在评论中提到的,当您将 ryb 转换为 hsl 时,您将 ryb 视为 rgb。

当您 运行 上面发布的代码具有以下值时:红色 = 255,绿色 = 0,蓝色 = 0

它 returns 值:红色 = 255,黄色 = 0,蓝色 = 0

接受赞美:红色 = 0,黄色 = 255,蓝色 = 255

如果您随后将其传递给旨在将 rgb 转换为 hsl 的函数,它将像您告诉它进行转换一样计算它:红色 = 0,绿色 = 255,蓝色 = 255

这是青色。

您需要将 ryb 转换回 rgb,或者获取旨在将 ryb 转换为 hsl 的函数。