|
楼主 |
发表于 2021-8-25 15:11:58
|
显示全部楼层
番外篇:色光问题的数学刻画
如果看完上面的分析还是觉得头脑混乱,那么可以试试从数学的角度考虑这个问题!
什么???数学???
不用怕,数学的意义不是把问题变复杂,而是把问题变清晰,变简单。
首先,我们来回顾一下这张表:
根据这八种颜色对RGB三原色的反射情况,我们可以用如下方式来表示它们:
r=(1,0,0)
g=(0,1,0)
b=(0,0,1)
c=(0,1,1)...
以此类推。
那么现在每一种颜色,就都变成了一个由0和1组成的三元数组。
为什么要这样表示呢?因为,写成数组之后,我们就可以对它们进行“运算”!!!怎么运算法呢?
一、“加法”
之前说过,间色光是由两种原色光组成到一起的。比如,C=G+B,要是写成数组,这就变成了:
(0,1,1)=(0,1,0)+(0,0,1)
再比如Y=R+G,写成数组则是:
(1,1,0)=(1,0,0)+(0,1,0)
再再比如W=R+G+B,写成数组:
(1,1,1)=(1,0,0)+(0,1,0)+(0,0,1)
发现了吗?这正好就是把数组中每一位数分别相加!
当然,也有一些比较尴尬的情况,比如把青色和黄色叠加,理论上三原色就齐了,得到白色,于是C+Y=W,即
(0,1,1)+(1,1,0)=(1,1,1)
但这是无伤大雅的,只要我们把0和1之间的“加法”进行一些改编,规定1+1=1就可以了。
在这种加法之下,我们发现:色光的混合,对应着颜色的“加法”。要想知道两种色光混合之后得到什么光,只用把它们翻译成数组,按这种加法加起来,再翻译回去就行了。
二、“乘法”
我们来回顾一下红色物体被青色光照射时会呈现什么颜色。
红色物体r=(1,0,0),青色光C=(0,1,1)
要想判断照射后呈现的颜色,只用分析RGB当中有哪种光被物体反射出来了。
1)R被反射了吗?C中根本不含有R光(C第一位是0),更别谈物体把红光反射出来了。
2)G被反射了吗?C中含有G光(C第二位是1),可是红色物体不爱反射G(r第二位是0)
3)B被反射了吗?C中含有B光(C第三位是1),可是红色物体不爱反射B(r第三位是0)
所以,RGB都没有被反射,(0,0,0),答案是黑色!
也就是:(1,0,0)×(0,1,1)=(0,0,0)
事实上,无论如何更换物体和光照的颜色,上面的分析思路都是行得通的。
想要反射出某种原色,必须要求:色光具有该原色,且物体反射该原色。
体现在数组上,就是色光数组和物体数组的同一位必须都是1,最终得到的反射数组的相应位置才会是1,否则是0。
这就是0和1之间的乘法法则!
所以:光线照射在物体上,对应着颜色的“乘法”。要想知道某种色光照在某种颜色的物体上得到什么颜色,只用把它们翻译成数组,对应位置相乘,再翻译回去就行了。来看一例。
问:黄色物体在紫色光照下呈现什么颜色?
答:黄色y=(1,1,0),紫色m=(1,0,1),(1,1,0)×(1,0,1)=(1,0,0)=红色。
由此观之,当初那张“答案表”,无非就是一张乘法表而已!
|
|