也许你很好奇,不是说凸包问题吗,怎么说的是配色问题?想要了解一下请继续往下看!
1 问题描述
现在只使用红R和绿G两种颜色来调配其他颜色,颜色表达式C=(R, G)。
定义:现在有两种工厂颜色,X=(10, 35)和Y=(16, 20)
问:为了配出颜色U=(12, 30),需要的X和Y的比例?这个我们很容易通过列出二元一次方程求解
解:设a份X,b份Y,则
10a + 16b = 12 * (a + b) 1.
35a + 20b = 30 * (a + b) 2.
联立式1和2解得a = 2b,即需要X和Y的比例为1:2
那么,这两种工厂颜色能不能配出所有颜色呢?比如颜色V=(0.13, 0.22)
解:设a份X,b份Y,则
10a + 16b = 13(a + b) 1.
35a + 20b = 22(a + b) 2.
式1得a = b, 式2得b = 6.5a,无解
如果再加上一种工厂颜色Z=(7, 15)呢?
解:设a份X,b份Y,c份Z,则
10a + 16b + 7c = 13 * (a + b + c) 1.
35a + 20b + 15c = 22 * (a + b + c) 2.
联立得b = 3a = 3c
所以,给定三种工厂颜色可以配出的颜色比两种多,那么我们用什么算法来解答能不能配出以及颜色配比呢?
2 几何映射
颜色空间:每种颜色对应直角坐标系空间中的一个点(x, y)
那么,上面的题目映射到坐标轴上,如下图:
由上图可知,颜色空间为三角形xyz围成的空间:
xy: y = -2.5x + 60 10 <= x <= 16, 20 <= y <= 35
xz: y = (20/3)x - 95/3 7 <= x <= 10, 15 <= y <= 35
yz: y = (5/9)x + 100/9 7 <= x <= 16, 15 <= y <= 20
所以,对于两种颜色x和y,只要判断目标颜色在不在线段xy上即可知道可不可以配出,对于三种颜色xyz,只要判断目标颜色在不在三角形xyz里即可知道可不可以配出。
现在来看看目标颜色U,将其代入xy线段:y = -2.5 * 12 + 60 = 30,可知U在线段xy上,即U可由X和Y两种颜色配出,|xu| = 开方(12 - 10)^2 + (30 - 35)^2 = 根号29,|uy| = 开方(12-16)^2 + (30-20)^2 = 2又根号29,所以配比 = 1/|xu| : 1/|uy|
类比,v颜色的xyz配比= 1/|xv| : 1/|yv| : 1/|zv|
结论:两种颜色能配出的颜色在xy线段上,三种颜色能配出的颜色在三角形xyz上,颜色配比为目标颜色到各工厂颜色距离反比之比
3 凸包问题
现在,配色问题经过几何映射,已经变成了,判断给定点是否在线段或三角形上。这和凸包问题是不是很像,或者说是它的一个子问题呢?
整理自清华大学邓俊辉计算几何课程