На this post я нашел алгоритм для определения яркости в цвета RGB:Найти последовательные наименьшие суммы кратных трех различных чисел, JavaScript
Luminance (стандарт для определенных цветовых пространств): (0.2126 * R + 0,7152 * G + 0,0722 * B)
Я хочу использовать это уравнение, начиная с rgb(0,0,0)
, чтобы произвести все цвета RGB в порядке от самого низкого до самого высокой яркости, а затем обратить их в 4096x4096 холст.
Моя проблема заключается в том, что с 16,7 миллионами различных комбинаций я не могу их сгенерировать, а затем сортировать их, не разбивая мой браузер, или занимая несколько дней, чтобы завершить рендеринг. Поэтому я хочу найти способ найти кратность каждого числа, которое будет суммироваться до следующего самого низкого числа.
Так, например, начиная с и RGB из 0,0,0
, яркости будет 0 (0.2126*0 + 0.7152*0 + 0.0722*0 = 0
), следующий минимумом люминесцентного значение RGB будет 0,0,1
потому 0.2126*0 + 0.7152*0 + 0.0722*1 = .0722
, и нет никакого набора кратных, что бы суммировать к меньшему числу.
Первые 19 последовательных значений яркости будет выглядеть следующим образом (я, возможно, пропустили один или два, потому что я вычислил их вручную, но, надеюсь, это помогает сделать точку):
RGB => Luminence
0,0,0 => 0
0,0,1 => .0722
0,0,2 => .1444
1,0,0 => .2126
0,0,3 => .2166
1,0,1 => .2848
0,0,4 => .2888
1,0,2 => .357
0,0,5 => .361
2,0,0 => .4252
1,0,3 => .4292
0,0,6 => .4332
2,0,1 => .4974
1,0,4 => .5014
0,0,7 => .5054
2,0,2 => .5696
1,0,5 => .5736
0,0,8 => .5776
3,0,0 => .6378
я не могу похоже, нашли какую-либо модель, поэтому я надеялся, что, может быть, есть уравнение или кодовая трюка, которая позволила бы мне найти наименьшую сумму, превышающую предыдущую сумму, кратных трех чисел, без грубой принудительной ее и проверки всевозможные значения.
EDIT: Я сделал несколько дополнительных исследований, и похоже, что решение может заключаться в использовании линейных диофантовых уравнений. Если я беру каждое десятичное число и умножаюсь на 1000, получаю 2126, 7152, & 722
. Затем подсчитывайте 1 на 1 до 2,550,000
(2126*255 + 7152*255 + 722*255
), я могу проверить каждое число, чтобы узнать, является ли это решением уравнения 2126r + 7152g + 722b = n
, где n - это текущее число, отсчитываемое до, и r, g, & b - неизвестные. Если бы я мог это сделать, я мог бы вычислить все возможные значения rgb при следующем значении последовательной яркости, даже не удваивая значения для значений повторяющейся яркости, и мне нужно было бы выполнить 2,55 миллиона вычислений вместо 16,77+ миллионов (по одному для каждого цвета). Если кто-нибудь знает, как закодировать это уравнение, или если у кого-нибудь есть лучшее решение, я был бы очень благодарен. Благодаря!
Привет, я извиняюсь, что мне потребовалось некоторое время, чтобы ответить. Я пробовал ваше решение, и он работает очень хорошо. Однако я не могу, чтобы жизнь меня, похоже, понимала ваш подход. Я собираюсь утвердить это как принятый ответ, но если у вас есть время, чтобы опустить его для меня, я был бы чрезвычайно благодарен. Если вы не можете, это не проблема. Я в первую очередь дизайнер, разработка на самом деле просто побочный концерт, поэтому я скорее визуальный ученик. Поэтому, если вам удастся найти какие-либо изображения или видеоролики, связанные с вашим подходом, то это может быть идеально. Еще раз большое спасибо! –
Поскольку мой ответ уже длинный, я собираюсь добавить еще один ответ, чтобы прояснить алгоритм. –