我有一组RGB十六进制的颜色。我需要计算颜色组合以获得指定的十六进制颜色。
例如:
Input hex - #3A5F34
Output:
1 - 20% #FF0000 + 80% #00AA33
2 - 30% #FFAA00 + 40% #0A33BB + 30% #FFFFFF
3 - ...
...
例如,如果我只有红色、黑色和黄色,是否可以从该集合的组合中生成另一种颜色(指定(。目的是展示创建输入颜色的并集可能性。
我对这个问题进行了大量的搜索,没有找到突出的讨论。
在我的想法中,这是在HEX-RGB转换和并集概率的宇宙中循环的,但我的测试并没有给出令人满意的结果。一些想象的可能性:
-基于主色(原色、副色等(阵列的并集计算Brute算法
-人工智能创造一个进化的有色人种群体
有什么想法可以解决这个问题吗?
这是一个三维的线性组合问题。你有一组基本的向量。在您给定的示例中,这些是
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(,而不是百分比。
确定多种解决方案
这是一个线性系统,给了我们三种可能的情况:
- 不一致:其中两个方程是平行平面,没有可能的解
- 点解:方程描述三个平面,在一个点相交。只有一个代数解。一个或多个系数可能是负的,这意味着没有实用的解决方案
- 多重解:方程在一条公共线上相交。。。或者所有三个方程都描述相同的平面。在这两种情况中的任何一种情况下,求解系统都会产生一个(直线(或两个(平面(变量的参数化方程。在这两种情况中,都有无限的解
无论您选择(或编写(什么工具来求解方程组,都应该为情况3返回参数化形式。