陈 凯
这是一个再普通不过的循环结构小程序,它的功能是绘制一系列半径逐渐增长的同心圆。如图中的代码所示,先画一个蓝色的圆;然后半径加1,画一个绿色的圆;半径再加1,画一个红色的圆,并且不断循环此过程400次。需要另外注明的是,绘画所用的单位是像素(Pixel)。读过往期连载文章的朋友也许会猜到,程序运行的结果并不是一个色彩斑斓的圆,而是一个灰色的圆,因为蓝、绿、红这三种颜色同时对眼睛产生了影响。然而,情况远不是这么简单!
程序运行后除了得到一个灰色的圆,同时产生出一些带有其他颜色的奇怪花纹,靠近圆圈中间的花纹图案也许会让人产生不同的联想,笔者想到的是宇宙飞船的着陆场,场地上不仅有横向和纵向的“着陆坐标”,还有由中心向外散射出几道柔和的光芒。
如图所示,将标着圆圈记号的语句即所有的“i=i+1”全都修改成“i=i+0.3”,然后运行程序并观察结果,接下来再全部修改成“i=i+0.33”后运行并观察结果,再改成“i=i+0.333”和“i=i+0.3333”,虽然每次只是调整了一个很微小的量,但程序运行后得到的图像差异明显,有时不同颜色夹杂在一起,有时不同颜色却泾渭分明。
将程序中所有的“i=i+1”全都修改成“i=i+0.33333333”,然后运行程序并观察结果,接下来再逐步修改递增的数值,如“i=i+0.44444444”、 “i=i+0.55555555”、“i=i+0.66666666”,以此类推,运行后将得到各种不同颜色的圆圈,这些颜色都不再是纯的红、绿、蓝三色,有时是紫色,有时是淡蓝色,情况变化多端,很难预料。
将程序中所有的“i=i+1”全都修改成“i=i+0.33333333”,然后按图中所划出的矩形框为段落,颠倒这三段程序的位置,程序功能看上去并没有发生变化,但结果会得到不同的单纯颜色圆。
将程序中标着圆圈记号的语句即所有的“i=i+1”全都修改成“i=i+0.001”,然后在程序的Command事件中的第一行即语句“i=1”之前增加一句“Form1.DrawWidth = 50”,将得到一个不同颜色交替滚动的精彩动画。如果动画速度太快,可以在“i=i+0.001”中的“0.001”的小数点后再增加几个0。
本文的问题是,这些奇特效果是怎样产生的呢?需要提醒大家的是,虽然文中所使用的编程环境是Visual Basic,但用其他的可视化程序设计环境,只要稍加改造也能产生类似的奇怪效果。另外,本文采用像素(Pixel)作为绘画单位,但若将单位设置成默认的Twip,只要合理调整程序中数字的值,效果会更加变幻莫测、难以琢磨。(答案在本期找)