打開程序,屏幕上顯示如圖2-1所示的程序流程圖和如圖2-2所示的程序運(yùn)行主畫面。
圖2-1 程序流程圖 圖2-2 程序運(yùn)行主畫面
在圖2-1中,【run to view documentation】設(shè)計(jì)圖標(biāo)完成發(fā)布一個(gè)聲明并運(yùn)行程序到主畫面的功能,其余設(shè)計(jì)圖標(biāo)則完成運(yùn)行程序?qū)嵗墓δ堋?/font>
在如圖2-2所示的主畫面中有如下3個(gè)按鈕:
l 【introduction】——程序簡(jiǎn)介
l 【one slice or two】——程序流程圖標(biāo)設(shè)計(jì)說(shuō)明
l 【run the example】——運(yùn)行實(shí)例
單擊【run the example】按鈕,程序進(jìn)入實(shí)例演示分支,其運(yùn)行畫面如圖2-3所示。
圖2-3 實(shí)例運(yùn)行畫面
屏幕左側(cè)窗口使用不同的顏色繪制出4個(gè)扇區(qū),每個(gè)扇區(qū)所占整個(gè)圓形區(qū)域的比例值顯示在各扇區(qū)區(qū)域的中心。
【percentages】運(yùn)算圖標(biāo)中的代碼如圖2-4所示。
圖2-4 【percentages】運(yùn)算圖標(biāo)中的代碼
這些代碼用于初始化一些繪制扇區(qū)所需要的相關(guān)變量,例如坐標(biāo)值、角度值、半徑值或比例值等變量。
然后設(shè)置每個(gè)扇區(qū)所占圓形的比例:本例將一個(gè)圓形分為slice_1~slice_4的4個(gè)扇形區(qū)域,每個(gè)扇形區(qū)域的比例分別為40%、30%、20%和10%。
【whether draw or error】決策圖標(biāo)下包含兩個(gè)分支,決策圖標(biāo)的屬性設(shè)置如圖2-5所示。
圖2-5 【whether draw or error】決策圖標(biāo)屬性設(shè)置對(duì)話框
由屬性設(shè)置可知,決策圖標(biāo)的分支走向?yàn)椤皌o calculated path”,其下欄表達(dá)式如下:
test(slice_1+slice_2+slice_3+slice_4=100,1,2)
這表示如果4個(gè)扇區(qū)比例之和等于100,則設(shè)置正確,進(jìn)入draw分支繪制扇區(qū);如果4個(gè)扇區(qū)比例之和不等于100,則設(shè)置錯(cuò)誤,進(jìn)入error message分支。error message分支顯示圖標(biāo)中嵌入的變量用于顯示信息,提示用戶設(shè)置的幾個(gè)扇區(qū)比例之和大于(或小于)100,不符合要求,應(yīng)重新設(shè)置。
及時(shí)點(diǎn)評(píng) 通過(guò)應(yīng)用test函數(shù)判斷扇區(qū)比例之和是否正確來(lái)決定決策圖標(biāo)分支走向的設(shè)計(jì)技巧,使程序流程能夠按設(shè)計(jì)思路正確運(yùn)行。
繪制扇區(qū)的功能是由【draw】分支完成的,這是本程序的難點(diǎn)部分。
雙擊【draw】群組圖標(biāo),打開的其下級(jí)流程如圖2-6所示。
圖2-6 扇區(qū)繪制程序流程
流程中含有一個(gè)【run all paths】決策圖標(biāo),其下含有5個(gè)分支。決策圖標(biāo)屬性設(shè)置如圖2-7所示。
圖2-7 【run all paths】決策圖標(biāo)屬性設(shè)置對(duì)話框
由屬性設(shè)置可知,【run all paths】決策圖標(biāo)的分支為順序執(zhí)行,且設(shè)置按順序?qū)⑷糠种?zhí)行完。
【draw line】分支運(yùn)算圖標(biāo)的代碼如圖2-8所示。
圖2-8 【draw lines】分支運(yùn)算圖標(biāo)的代碼
這些代碼能夠完成以下功能:
(1)設(shè)置扇形中心點(diǎn)坐標(biāo),本例為x0=100,y0=136;
(2)設(shè)置扇形半徑,本例為radius=76;
(3)依據(jù)4個(gè)扇區(qū)所占圓周比例計(jì)算出各扇形的終止角度angle_1~angle_4;
slice_1為40%,則angle_1=360×40/100=144(度)
slice_2為30%,則angle_2=360×30/100+angle_1=252(度)
slice_3為20%,則angle_3=360×20/100+angle_2=324(度)
slice_4為10%,則angle_4=360×10/100+angle_3=360(度)
(4)應(yīng)用repeat while循環(huán)語(yǔ)句,反復(fù)執(zhí)行l(wèi)ine畫線函數(shù),畫出各扇區(qū)比例。
if語(yǔ)句用于判斷當(dāng)前各角度值是否已到達(dá)本扇區(qū)終止角度,如果尚未到達(dá),則將角度值增加0.5,繼續(xù)用line函數(shù)畫線。
setframe函數(shù)用于設(shè)置繪制本扇區(qū)的顏色。
line(2,x0,y0,x,y)語(yǔ)句表示用線寬2從起點(diǎn)(x0,y0)畫線到(x、y)。其中,(x0,y0)為扇區(qū)中心點(diǎn),這是一個(gè)設(shè)定為(100,136)的不變值,而x和y則是依據(jù)當(dāng)前角度經(jīng)三角函數(shù)計(jì)算得到的坐標(biāo)值,其計(jì)算原理示意圖如圖2-9所示。
圖2-9 計(jì)算原理示意圖
x=x1+x0=r·sinα+x0
y=y1+y0=r·cosα+y0
其中,r為radius;α為angle to rotate*pi/180。
所以line畫線終點(diǎn)坐標(biāo)如下:
x=sin(angle to rotate*pi/180)*radius+x0
y=cos(angle to rotate*pi/180)*radius+y0
此外,4個(gè)if round…語(yǔ)句用于判斷在每個(gè)扇區(qū)的中間角度時(shí)的x、y坐標(biāo)值并存入temp 1列表變量中。
及時(shí)點(diǎn)評(píng) 用line畫線函數(shù)繪制扇區(qū)時(shí),line函數(shù)的起始點(diǎn)為圓心(x0,y0)固定不變,而終止點(diǎn)為變量,是x,y。變量x,y的每次取值將依據(jù)圓心坐標(biāo)、圓半徑以及扇區(qū)角度當(dāng)前值經(jīng)三角函數(shù)運(yùn)算所得。應(yīng)用repeat while循環(huán)語(yǔ)句,使每個(gè)扇區(qū)從起始角度到終止角度每次遞增0.5弧度,從而使x、y的值不斷改變,然后應(yīng)用line函數(shù)的連續(xù)畫線,從而畫出各個(gè)扇區(qū)圖形。
應(yīng)用如下表達(dá)式,將取得扇區(qū)區(qū)域中心位置坐標(biāo)x和y。
x為(getnumber(1,getline(temp1,getnumber(1,icontitle),getnumber(1,icon title)))-x0)/2+x0
y為(getnumber(2,getline(temp1,getnumber(1,icontitle),getnumber(1,icon title)))-y0)/2+y0
其中: icontitle變量保存當(dāng)前執(zhí)行的設(shè)計(jì)圖標(biāo)名,例如number[1];getnumber取得字符串變量中某個(gè)數(shù)字值;temp1為自定義變量,在應(yīng)用line畫線函數(shù)繪制扇區(qū)時(shí),扇區(qū)角度到達(dá)本扇區(qū)角度范圍值的一半時(shí),此時(shí)計(jì)算得到的x,y坐標(biāo)值將保存到該變量中。
本程序當(dāng)4個(gè)扇區(qū)繪制完成時(shí),temp1中將保存如下數(shù)據(jù):
temp1:= "172,159/r 76,63/r 27,159/r76,208/r"
getline函數(shù)取得字符串中某行的信息,比如temp1變量中保存的第一行信息“172,159”。因此,兩個(gè)表達(dá)式的運(yùn)算結(jié)果使x、y坐標(biāo)正好處于本扇區(qū)區(qū)域中心部位。
及時(shí)點(diǎn)評(píng) 設(shè)計(jì)圖標(biāo)名稱中的數(shù)字值與temp1變量中保存坐標(biāo)值行數(shù)的對(duì)應(yīng)設(shè)計(jì),使得計(jì)算扇區(qū)中心點(diǎn)坐標(biāo)值變得十分方便。
【run all paths】決策圖標(biāo)下的number[1]~number[4]分支均為顯示圖標(biāo),在這些顯示圖標(biāo)中嵌入了{(lán)slice_1}~{slice_4}變量。
顯示圖標(biāo)的屬性設(shè)置中將該圖標(biāo)中的對(duì)象顯示位置設(shè)置為表達(dá)式,如圖2-10所示。
圖2-10 【number[1]】顯示圖標(biāo)屬性設(shè)置對(duì)話框
x的顯示位置為表達(dá)式:
(getnumber(1,getline(temp1,getnumber(1,icontitle),getnumber(1,icon title)))-x0)/2+x0
y的顯示位置為表達(dá)式:
(getnumber(2,getline(temp1,getnumber(1,icontitle),getnumber(1,icon title)))-y0)/2+y0 ;
表達(dá)式運(yùn)算結(jié)果正好是該扇區(qū)中心點(diǎn)坐標(biāo)值。
因此,該扇區(qū)比例值將實(shí)時(shí)顯示在本扇區(qū)區(qū)域的中心點(diǎn)。
及時(shí)點(diǎn)評(píng) 在顯示圖標(biāo)中嵌入變量,然后設(shè)置好顯示圖標(biāo)中對(duì)象的定位顯示屬性,則變量的值將實(shí)時(shí)顯示在需要顯示的地方。
本例用line函數(shù)繪制扇形圖形,其中主要應(yīng)用了如下一些原理和技術(shù):
l 應(yīng)用line函數(shù)畫扇形的原理
l 根據(jù)表達(dá)式的值確定決策圖標(biāo)分支走向的設(shè)計(jì)
l 扇形區(qū)域中心點(diǎn)坐標(biāo)的計(jì)算
l 嵌入變量的顯示定位設(shè)置
根據(jù)以上設(shè)計(jì)原理,可以通過(guò)改變扇形比例值或區(qū)域個(gè)數(shù),來(lái)繪制出需要的扇形比例圖。
新聞熱點(diǎn)
疑難解答