我有一组RGB十六进制颜色。我需要计算颜色组合以获得指定的十六进制颜色。
例如:
Input hex - #3A5F34
Output:
1 - 20% #FF0000 + 80% #00AA33
2 - 30% #FFAA00 + 40% #0A33BB + 30% #FFFFFF
3 - ...
...
例如,如果我只有红色,黑色和黄色,则可以从该组合的组合中生成另一种颜色(指定的颜色)。目的是显示并集创建输入颜色的可能性。
我进行了很多搜索,但没有找到针对该问题的重要讨论。
在我的想法中,这在HEX的范围内盘旋-RGB转换和并集概率,但是,我的测试无法给出令人满意的结果。一些想象的可能性:
-基于主要颜色(原色,次要色等)数组的并集计算的Brute算法
-人工智能使颜色联盟不断发展壮大吗?
有什么想法可以解决(或解决问题)吗?
答案 0 :(得分:0)
这是3维的线性组合问题。您有一个向量基础集。在您给出的示例中,这些是
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
。请注意,这些百分比是 not 百分比:无法保证给定的混合系数以加1的系数形式出现。请考虑一个简单的情况:全强度绿色00FF00
和蓝色{{1 }},但我们希望在蓝绿色范围0000FF
中提供一些东西。所得混合物为(0.0,0.75,0.75)-不是百分比。
确定多个解决方案
这是一个线性系统,给出了三种可能的情况:
无论您选择(或编写)哪种工具来求解方程组,均应返回情况3的参数化形式。