获取颜色并集的可能性以生成另一种颜色

时间:2018-11-06 13:17:01

标签: algorithm linear-algebra algebra

我有一组RGB十六进制颜色。我需要计算颜色组合以获得指定的十六进制颜色。

例如:

Input hex - #3A5F34

Output: 

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

例如,如果我只有红色,黑色和黄色,则可以从该组合的组合中生成另一种颜色(指定的颜色)。目的是显示并集创建输入颜色的可能性。

我进行了很多搜索,但没有找到针对该问题的重要讨论。

在我的想法中,这在HEX的范围内盘旋-RGB转换和并集概率,但是,我的测试无法给出令人满意的结果。一些想象的可能性:

-基于主要颜色(原色,次要色等)数组的并集计算的Brute算法

-人工智能使颜色联盟不断发展壮大吗?

有什么想法可以解决(或解决问题)吗?

1 个答案:

答案 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)-不是百分比。


确定多个解决方案

这是一个线性系统,给出了三种可能的情况:

  1. 不一致:两个方程是平行平面,没有可能的解决方案。
  2. 点解:等式描述了在一个点相交的三个平面。正是有一种代数解。一个或多个系数可能为负,这意味着没有实用解决方案。
  3. 多个解决方案:方程式在同一条直线上相交...或者所有三个方程式描述了相同平面。在这两种情况下,求解系统都会在一个(直线)或两个(平面)变量中生成参数化方程式。在这两种情况下,都有无限的解决方案。

无论您选择(或编写)哪种工具来求解方程组,均应返回情况3的参数化形式。