获取颜色联合的可能性以生成另一种颜色

Get color union possibilities to generate another color

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

例如:

Input hex - #3A5F34

Output: 

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

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

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

在我的想法中,这在 HEX 的宇宙中盘旋 - RGB 转换和联合概率,但是,我的测试没有给出令人满意的结果。一些想象的可能性:

- 基于主色数组(原色、副色等)的并集计算的蛮力算法

- 人工智能使颜色组合进化种群?

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

这是一个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。请注意,这些是 而不是 百分比:不能保证给定的混合物会作为加起来为 1 的系数出现。考虑一个简单的情况:全强度绿色 00FF00 和蓝色0000FF,但我们想要蓝绿色范围内的东西 00C0C0。得到的混合物是 (0.0, 0.75, 0.75) -- 不是百分比。


确定多个解

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

  1. 不一致:其中两个方程是平行平面,无解。
  2. 点解:方程描述三个平面,相交于一点。只有一个代数解。有可能一个或多个系数为负,这意味着没有实用的解决方案。
  3. 多重解:方程相交于一条公共线...或者所有三个方程描述相同平面。在任何一种情况下,求解系统都会得到一个(线)或两个(平面)变量的参数化方程。在这两种情况下,都有无限的解决方案。

无论您选择(或编写)什么工具来求解方程组,都应该return案例 3 的参数化形式。