Генератор состоит из двух блоков. Первый - выбор основного цвета, он имеет высоту 255 пикселей, а сам представляет собой набор градиентов, пользователь может выбрать любой цвет. Цвета на нём изменяются следующим образом. Сначала градиент от #ff0000 до #ff00ff, затем красный понижается до 00, после чего растёт зелёный, затем понижается синий, и так пока не будут перебраны все варианты. Всего вариантов 6 - первый блок разбивается на 6 частей. Второй блок - квадрат 255*255 пикселей. В правом верхнем углу цвет, выбранный пользователем на первом блоке, левый верхний угол белый, нижние пиксели чёрные.
Я написал код для получения кода цвета. один из цветов определяется просто вертикальным положением указателя второго блока (Его я из кода убрал). ll - горизонтальное положение указателя во втором блоке, lt - вертикальное. score_2 - в какой части первого блока находится указатель (Так как мы разбили первый блок на 6 частей).
var color2 = 255 / (255 - ll);
var color2 = lt / color2;
var color2 = Math.round((255 - ll) - color2).toFixed(0);
var color3 = 255 / (255 - score_2);
var color3 = (255 - ll) / color3;
var color31 = 255 - Math.round(255 - score_2 - color3).toFixed(0);
var color3 = 255 / color31;
var color3 = lt / color3;
var color3 = Math.round(color31 - color3).toFixed(0);
И этот код работает идеально. Но с косяками работает код, которому даёшь код, а он в ответ меняет положения указателей. Он работает так: если знать в какой 1/6ой находится указатель первого блока, то можно узнать какой цвет (красный, синий, зелёный) самый большой, а какой самый маленький (это же можно использовать и в обратную сторону - на этом и основана идея кода). Самый большой цвет в правом верхнем углу - 255, самый маленький - 0. pt - вертикальное положение второго указателя, pl - горизонтальное, rtf - положение первого указателя, sh - в какой части должен находиться первый указатель, zero - самый маленький цвет, nzero - средний, h - самый большой цвет.
var pt = 255 - h;
var pl1 = 255 - pt;
var pl = 255 / pl1;
var pl2 = pl1 - zero;
var pl = pl2 * pl;
var rt = (255 - pt) / nzero;
var rt = pt / rt;
var rt1 = nzero + rt;
var rt = pl / (255 - rt1);
var rt = (255 - pl) / rt;
var rt = Math.round(rt1 + rt).toFixed(0);
if(sh % 2 == 0){
var rt = 255 - rt;
}
Вот и этот код работает через раз, но чаще работает неверно. Если кто разберётся, прошу помочь, потому что идеи уже давно иссякли