内容正文:
第四章 JavaScript应用
第4节 光的色散现象
双色混合
(
图
1
)如图1所示,通过观察三原色以及三原色两两混合所得颜色的RGB数据,可以发现从一种原色到这种原色和另一个原色的混色时,RGB数据中只有一个发生变化,利用这种关系,我们可以在原色和混色间制作渐变的颜色,从而得到彩虹色。
假设颜色变化的是均匀的,则在代表三原色和三混色的图形所在的圆上,相邻颜色间的角度为60°,令β = 60°,线段l与水平面的夹角为α(图2),在点H中写入脚本,分段设置线段l的颜色。
(
图
2
)
if(α>=0 ∧ α<β,设置颜色(l,1,α/β,0),α>=1β ∧ α<2β,设置颜色(l,1-(α-β)/β,1,0),α>=2β ∧ α<3β,设置颜色(l,0,1,(α-2β)/β),α>=3β ∧ α<4β,设置颜色(l,0,1-(α-3β)/β,1),α>=4β ∧ α<5β,设置颜色(l,(α-4β)/β,0,1),α>=5β ∧ α<6β,设置颜色(l,1,0,1-(α-5β)/β))
开启点H的动画,使其做圆周运动,并记录线段l的轨迹(将点H运动的增量设置为0.01,速度设置为0.1,这样涂色效果更好),可以得到图3所示的色盘,可以通过调整各个分段的定义域来改变各种颜色之间变化所需的角度。
(
图
3
)
因为在制作色盘时,我们将圆分成了六等分,想将色盘转换为色带,我们模仿色盘的制作,也将色带分为六个区域,建立一个滑动条m,取值范围为0-6,建立一个和m关联的线段k,在m中写入脚本:
(
图
4
)if(m>=0 ∧ m<1,设置颜色(k,1,m,0),m>=1 ∧ m<2,设置颜色(k,1-(m-1),1,0),m>=2 ∧ m<3,设置颜色(k,0,1,(m-2)),m>=3 ∧ m<4,设置颜色(k,0,1-(m-3),1),m>=4 ∧ m<5,设置颜色(k,(m-4),0,1),m>=5 ∧ m<6,设置颜色(k,1,0,1-(m-5)))
拉动滑动条m可以得到一个光带(图4)。
(
图
5
)这个光带和物理中所说的红橙黄绿蓝靛紫有点不同,观察上面的色盘,在蓝色和红色之间有一个区域的颜色是光谱中所没有的,也就是说,红橙黄绿蓝靛紫只占了色盘的3/4,所以需要将m的取值范围改为0-4.5,重新拉动m可以得到的如图5所示的光带。
(
图
6
)下面来制作一个简单的色散现象,设置滑动条n作为折射率,取值范围1.2-3,将上面的滑动条m的值设置为(n-1.2)*4.5*(3-1.2),将上面的脚本贴入滑动条n中(注意:要更改需要设置颜色的线段名称)如图6所示。
如果觉得紫色占比太小,可以通过调整设置颜色时的条件和m值((n-1.2)*6*(3-1.2))将其所占比例变大。如图7所示
if(m>=0 ∧ m<1,设置颜色(r,1,m,0),m>=1 ∧ m<2,设置颜色(r,1-(m-1),1,0),m>=2 ∧ m<3,设置颜色(r,0,1,(m-2)),m>=3 ∧ m<4,设置颜色(r,0,1-(m-3),1),m>=4 ∧ m<6,设置颜色(r,0.25(m-4),0,1))
(
图
7
)
学科网(北京)股份有限公司
$