Я пытался понять это какое-то время, и это сводит меня с ума. Как известно большинству людей, если вы нарисуете 10 прямоугольников рядом друг с другом, начиная от белого и заканчивая черным с равными шагами яркости HSV, они не будут восприниматься глазом одинаково. Вот пример этого:
И код в обработке:
void setup()
{
size(600, 150);
colorMode(HSB, 360, 100, 100);
background(0, 0, 100);
translate(50, 50);
noStroke();
for(int i = 0; i < 10; i++)
{
fill(0, 0, i * 10);
rect(i * 50, 0, 50, 50);
}
}
Как видите, контраст между некоторыми более темными плитками воспринимается намного больше, чем между некоторыми белыми плитками.
На это указывали многие люди. В своей книге «Искусство цвета» Йозеф Альберс описывает (основываясь на законе Вебера-Фехнера), что вместо этого вы должны увеличивать яркость экспоненциально. Позже было доказано, что Альберс допустил некоторые неприятные просчеты, и идея использования постоянное логарифмическое увеличение яркости оказалось правдой noreferrer">только в очень ограниченных пределах. Об этом написано много статей, но многие из них мне очень трудно читать, и большинство из них связано с физическими аспектами сетчатки.
Итак, мой вопрос:
Учитывая любой цвет, как рассчитать воспринимаемые равные шаги яркости от яркости HSV от 0 до 100?
Более того, как рассчитать воспринимаемые равные шаги яркости от одного цвета к любому другому?
Я создаю файлы для печати с помощью кода, и мне нужно сделать это в Processing. Однако подойдет любой пример на любом языке.