Случайное отклонение цвета с нормальным распределением - PullRequest
2 голосов
/ 21 марта 2011

Я хотел бы создать случайный цвет, основанный на исходном цвете и нормальном распределении, чтобы я мог создать случайную текстуру, говорящую сценарию: «Хорошо, это общий цвет, который вы должны использовать, но если вы отличаетесь время от времени это нормально ".

Я пишу на JavaScript, используя преобразование Бокса-Мюллера. Но если я использую нормальное распределение независимо от каждого значения R, G и B, я получаю нежелательные пики. Например, если мой базовый цвет светло-серый, я получаю пиксели очень красного, очень зеленого или очень синего цвета. На данный момент это мой сценарий ("0, 255", мин. И макс.):

function randomHex(hex, deviation){
    R = HexToR(hex);
    G = HexToG(hex);
    B = HexToB(hex);
    R = randomNormal(R, deviation, 0, 255);
    G = randomNormal(G, deviation, 0, 255);
    B = randomNormal(B, deviation, 0, 255);
    return RGBtoHex(R,G,B);
}

Я думаю, что мне нужно как-то определить точку в трехмерном пространстве цвета RGB, а затем выбрать (равномерно распределенную) случайную точку на сфере, центр которой является определенной точкой, а радиус которого генерируется случайным образом с помощью нормальное распределение.

В любом случае, это теория. Я просто не знаю, как заставить это работать в JavaScript.

Буду благодарен за любые указатели!

1 Ответ

1 голос
/ 21 марта 2011

Я бы попробовал использовать HSV (или, возможно, HSL) вместо RGB. Вам понадобится функция для преобразования обратно в RGB (см. здесь для примера). В этом случае H - это оттенок, а ваше значение - это некоторая позиция на круге цветов. S и V контролируют насыщенность и значение / яркость соответственно. Я думаю, что это даст вам больше контроля над дистрибутивами. Больше информации о википедии здесь тоже.

...