Получите возможности цветового союза для создания другого цвета - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть набор цветов в шестнадцатеричном RGB. Мне нужно вычислить комбинацию цветов , чтобы получить указанный шестнадцатеричный цвет.

Например:

Input hex - #3A5F34

Output: 

1 - 20% #FF0000 + 80% #00AA33
2 - 30% #FFAA00 + 40% #0A33BB + 30% #FFFFFF
3 - ...
...

Например, если у меня есть только красный, черный и желтый, возможно ли создать другой цвет (указанный) из комбинаций этого набора. Цель - показать возможности объединения для создания входного цвета.

Я провел большой поиск и не нашел заметных обсуждений по этой проблеме.

По моим представлениям, это кружится во вселенной HEX - RGB-конверсии и вероятности объединения, но мои тесты не дают удовлетворительных результатов. Некоторые возможности воображения:

- грубый алгоритм расчета союзов на основе массива основных цветов (первичного, вторичного и т. Д.)

- Искусственный интеллект для создания эволюционной популяции цветных союзов?

Какие-нибудь идеи, чтобы сделать это решение (или свет к этому)?

1 Ответ

0 голосов
/ 07 ноября 2018

Это линейная комбинационная задача в трех измерениях. У вас есть базовый набор векторов. В приведенном вами примере это

b1 = (FF, 00, 00)
b2 = (00, AA, 33)
b3 = (FF, FF, FF)

Вы пытаетесь найти линейную комбинацию этих трех векторов, чтобы получить вектор (3A, 5F, 34). Преобразуйте векторы в целые числа и примените стандартные методы решения систем линейных уравнений:

b1   = (255,   0,   0)
b2   = (  0, 176,  51)
b3   = (255, 255, 255)
need = ( 58,  95,  52)

Теперь вам нужно найти коэффициенты x (для b1), y (b2), z (b3), такие что

need = x*b1 + y*b2 + z*b3

Расширено, это:

255x +   0y + 255z = 58
  0x + 176y + 255z = 95
  0x +  51y + 255z = 52

У вас есть три уравнения с тремя переменными. Вы можете взять это отсюда? И в Python, и в Java есть пакеты линейного решения для выполнения арифметики за вас - нет необходимости в искусственном интеллекте.


Получите проценты

Необходимые пропорции: x, y, z. Обратите внимание, что это , а не проценты: нет никакой гарантии, что данная смесь получится в виде коэффициентов, которые добавляют к 1. Рассмотрим простой случай: зеленый 00FF00 полной интенсивности и синий 0000FF полной интенсивности, но мы хочу что-то в диапазоне чирок 00C0C0. Полученная смесь (0,0, 0,75, 0,75) - не в процентах.


Определить несколько решений

Это линейная система, дающая нам три возможных случая:

  1. Несоответствие: два уравнения являются параллельными плоскостями, и возможных решений не существует.
  2. Точечное решение: уравнения описывают три плоскости, пересекающиеся в точке. Существует ровно одно алгебраическое решение. Возможно, что один или несколько коэффициентов отрицательны, что означает, что не существует практического решения.
  3. Множественные решения: уравнения пересекаются в общей линии ... или все три уравнения описывают одинаковую плоскость. В любом из этих случаев решение системы приводит к параметризованному уравнению с одной (прямой) или двумя (плоскими) переменными. В любом из этих случаев существуют бесконечные решения.

Какой бы инструмент вы ни выбрали (или напишите) для решения системы уравнений, он должен вернуть параметризованную форму для случая 3.

...