Определение RYB дополнения цвета - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь получить цветовые гармонии цвета в пространстве RYB. Я успешно реализовал 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

1 Ответ

0 голосов
/ 14 июня 2019

Это не работает правильно, потому что, как вы упомянули в ваших комментариях, вы обращаетесь с ryb, как если бы он был rgb при преобразовании его в hsl.

Когда вы запускаете приведенный выше код со значениями: красный = 255, зеленый = 0, синий = 0

Возвращает значения: красный = 255, желтый = 0, синий = 0

Принимая комплимент: красный = 0, желтый = 255, синий = 255

Если вы затем передадите это в функцию, предназначенную для преобразования rgb в hsl, она будет рассчитана так, как если бы вы говорили преобразовать: red = 0, green = 255, blue = 255

Какой голубой.

Вам нужно либо преобразовать обратно из ryb в rgb, либо получить функцию, предназначенную для преобразования ryb в hsl.

...