陳 凱
這是一個(gè)再普通不過的循環(huán)結(jié)構(gòu)小程序,它的功能是繪制一系列半徑逐漸增長的同心圓。如圖中的代碼所示,先畫一個(gè)藍(lán)色的圓;然后半徑加1,畫一個(gè)綠色的圓;半徑再加1,畫一個(gè)紅色的圓,并且不斷循環(huán)此過程400次。需要另外注明的是,繪畫所用的單位是像素(Pixel)。讀過往期連載文章的朋友也許會(huì)猜到,程序運(yùn)行的結(jié)果并不是一個(gè)色彩斑斕的圓,而是一個(gè)灰色的圓,因?yàn)樗{(lán)、綠、紅這三種顏色同時(shí)對眼睛產(chǎn)生了影響。然而,情況遠(yuǎn)不是這么簡單!
程序運(yùn)行后除了得到一個(gè)灰色的圓,同時(shí)產(chǎn)生出一些帶有其他顏色的奇怪花紋,靠近圓圈中間的花紋圖案也許會(huì)讓人產(chǎn)生不同的聯(lián)想,筆者想到的是宇宙飛船的著陸場,場地上不僅有橫向和縱向的“著陸坐標(biāo)”,還有由中心向外散射出幾道柔和的光芒。
如圖所示,將標(biāo)著圓圈記號(hào)的語句即所有的“i=i+1”全都修改成“i=i+0.3”,然后運(yùn)行程序并觀察結(jié)果,接下來再全部修改成“i=i+0.33”后運(yùn)行并觀察結(jié)果,再改成“i=i+0.333”和“i=i+0.3333”,雖然每次只是調(diào)整了一個(gè)很微小的量,但程序運(yùn)行后得到的圖像差異明顯,有時(shí)不同顏色夾雜在一起,有時(shí)不同顏色卻涇渭分明。
將程序中所有的“i=i+1”全都修改成“i=i+0.33333333”,然后運(yùn)行程序并觀察結(jié)果,接下來再逐步修改遞增的數(shù)值,如“i=i+0.44444444”、 “i=i+0.55555555”、“i=i+0.66666666”,以此類推,運(yùn)行后將得到各種不同顏色的圓圈,這些顏色都不再是純的紅、綠、藍(lán)三色,有時(shí)是紫色,有時(shí)是淡藍(lán)色,情況變化多端,很難預(yù)料。
將程序中所有的“i=i+1”全都修改成“i=i+0.33333333”,然后按圖中所劃出的矩形框?yàn)槎温?,顛倒這三段程序的位置,程序功能看上去并沒有發(fā)生變化,但結(jié)果會(huì)得到不同的單純顏色圓。
將程序中標(biāo)著圓圈記號(hào)的語句即所有的“i=i+1”全都修改成“i=i+0.001”,然后在程序的Command事件中的第一行即語句“i=1”之前增加一句“Form1.DrawWidth = 50”,將得到一個(gè)不同顏色交替滾動(dòng)的精彩動(dòng)畫。如果動(dòng)畫速度太快,可以在“i=i+0.001”中的“0.001”的小數(shù)點(diǎn)后再增加幾個(gè)0。
本文的問題是,這些奇特效果是怎樣產(chǎn)生的呢?需要提醒大家的是,雖然文中所使用的編程環(huán)境是Visual Basic,但用其他的可視化程序設(shè)計(jì)環(huán)境,只要稍加改造也能產(chǎn)生類似的奇怪效果。另外,本文采用像素(Pixel)作為繪畫單位,但若將單位設(shè)置成默認(rèn)的Twip,只要合理調(diào)整程序中數(shù)字的值,效果會(huì)更加變幻莫測、難以琢磨。(答案在本期找)