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



我有一组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(,而不是百分比。


确定多种解决方案

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

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

无论您选择(或编写(什么工具来求解方程组,都应该为情况3返回参数化形式。

相关内容

  • 没有找到相关文章

最新更新