王林玉



摘要
通過(guò)Authorware的圖標(biāo)化的編程方式,在Authorware中采用堆疊小立方體的方式,將15個(gè)小立方體隨機(jī)填充到一個(gè)3*3*3的矩陣樣式中,模擬空間的三維立體圖形。在生成的模擬三維立體圖形中,任選一個(gè)生成三視圖,用熱區(qū)響應(yīng)的方式,選擇與三視圖對(duì)應(yīng)的三維立體圖形。實(shí)現(xiàn)三視圖的模擬識(shí)圖系統(tǒng)的制作,從而達(dá)到強(qiáng)化三視圖識(shí)圖的目的。
【關(guān)鍵詞】Authorware 變量 函數(shù) 三視圖
在機(jī)械零件圖形繪制中,通常是用三視圖來(lái)表達(dá)一個(gè)機(jī)械零件在各個(gè)面上的投影的輪廓形狀。三視圖一般指對(duì)象的主視圖、左視圖和俯視圖,將機(jī)械零件用正投影法在三個(gè)相互垂直的投影面上產(chǎn)生的投影輪廓形狀作為各自不同的投影圖形,這種投影關(guān)系是一一對(duì)應(yīng)的。CAD繪制三維圖形時(shí),常用的方法是將簡(jiǎn)單的二維圖形,通過(guò)拉伸旋轉(zhuǎn)和布爾運(yùn)算之后,生成復(fù)雜的三維圖形。對(duì)三視圖的投影方法的理解以及三視圖與三維圖的對(duì)應(yīng)關(guān)系,在工程繪圖或CAD三維繪圖都是很重要的一部分基礎(chǔ)知識(shí)。在Authorware中用小立方體的方式構(gòu)造空間立體,用堆疊立方體的方式構(gòu)造空間物體。實(shí)現(xiàn)三視圖識(shí)圖系統(tǒng)的制作,通過(guò)使用此系統(tǒng)可以加強(qiáng)三視圖識(shí)圖能力的練習(xí)。
1系統(tǒng)設(shè)計(jì)思路
此練習(xí)系統(tǒng)中,采用小立方體單元堆疊的方式來(lái)構(gòu)造網(wǎng)格式的空間立體對(duì)象,就象魔方玩具一樣,空間立體對(duì)象是由3*3*3矩陣樣式排列的小立體構(gòu)成。系統(tǒng)中,用15個(gè)小立方體隨機(jī)填充到不同的位置,就能構(gòu)造出結(jié)構(gòu)復(fù)雜又變化多樣的空間立體,在系統(tǒng)界面中,每次構(gòu)造6個(gè)立體對(duì)象,處于不同的位置而且每組隨機(jī)取出一個(gè)立體構(gòu)造其三視圖。
用堆疊小立方體的方式構(gòu)造空間立體時(shí),從不可見(jiàn)的面向可見(jiàn)面堆疊。對(duì)于空間小立方體的繪制,建立一個(gè)用戶坐標(biāo)系,確定基點(diǎn)坐標(biāo)及各個(gè)坐標(biāo)軸方法(圖1繪制小立方體坐標(biāo))。根據(jù)坐標(biāo)軸的方向,在繪制空間立體各個(gè)小立方體單元,繪制時(shí)要按照從下向上(z坐標(biāo))、從右向左(y坐標(biāo))、從后到前(x坐標(biāo))的順序來(lái)繪制,這樣使空間位置靠前的小立方體能夠遮住后面的小立方體。其中靠前的小立方體遮住后面的小立方體部位不可見(jiàn)的線,用白色的線條繪制。
在垂直于投影面的一列網(wǎng)格單元中,只要有一個(gè)位置被填充了小立方體,這列網(wǎng)格對(duì)應(yīng)的投影位置就應(yīng)出現(xiàn)一個(gè)小矩形。
制作此系統(tǒng),首先建立基本的程序結(jié)構(gòu)和界面,如圖2所示。
在初始化中,設(shè)置變量stop和分組變量item設(shè)置初始值,設(shè)置stop:=0,item:=l。在決策圖標(biāo)的屬性窗口,選擇循環(huán)屬性為直到判斷值為真,并定義退出的條件為item>20|stop=1,這樣,當(dāng)分組變量item達(dá)到20或者停止標(biāo)志變量stop被置為1,都將結(jié)束這個(gè)決策循環(huán),如圖3所示。
2系統(tǒng)實(shí)現(xiàn)過(guò)程
打開(kāi)群組圖標(biāo),在一次測(cè)試流程圖中,設(shè)置分支結(jié)構(gòu)如圖4所示。
2.1隨機(jī)構(gòu)造空間立體
在分支中,六次決策圖標(biāo)和之下的群組圖標(biāo),用來(lái)在窗口中生成隨機(jī)構(gòu)造空間立體堆。其分支結(jié)構(gòu)中,分別用三個(gè)計(jì)算機(jī)圖標(biāo),依次為生成“立方體”、“畫(huà)立方堆”、“下一個(gè)立方堆”來(lái)順序執(zhí)行。其后跟一個(gè)決策圖標(biāo)“選擇立方堆”。
其中,“生成立方體”計(jì)算圖標(biāo)中,利用數(shù)組記錄3*3*3矩陣網(wǎng)格各立方體填充情況,先對(duì)數(shù)組初始化,程序代碼為:
Repeat with x:=lto3
Repeat with y:=lto3
Repeat with z:=lto3
E1:=x*100+y*10+z
Arrayset(el,0)
End repeat
End repeat
End repeat
N:=l
Repeat while n<=15;利用變量n控制總數(shù)不超過(guò)15個(gè)
Rx:random(l,3,l);為變量rx隨機(jī)選擇一個(gè)1-3之間的整數(shù)
Ry:=random(l,3,l);為變量ry隨機(jī)選擇一個(gè)1-3之間的整數(shù)
If arrayget(rx*100+ry*10+l)=0then
Arrayset(rx*100+ry*l0+1,1);判斷代表網(wǎng)格單元的數(shù)組元素值是否為0,是則將其值置為1
Else
If arrayget(rx*100+ry*10+2)=0 then
Arrayset(rx*100+ry*10+2,1)
Else
If arrayget(rx*l00+ry*10+3)=0 then Arrayget(rx*100+ry*10+3,1)
Else
N:=n-1
End if
End if
End if
N:=n+1
End repeat
在計(jì)算圖標(biāo)“畫(huà)立方堆”中,輸入如下程序
Sx:=mot(keer,3)*130+80;用變量keer和mod函數(shù)、int函數(shù)確定空間立體的起始點(diǎn)坐標(biāo)
Sy:=int(keer/3)*130+190Repeatwithz:=lto3按照Z(yǔ)坐標(biāo)、Y坐標(biāo)、X坐標(biāo)的順序繪制前面隨機(jī)確定的小立方體。
Repeat with y:=3 down to 1
Repeat with x:=3 down to 1
If arrayget(x*l00+y*10+z)=l then 如果數(shù)組元素的值為1,該元素對(duì)應(yīng)的空間立體單元位置有一個(gè)小立方體,因此進(jìn)入繪制程序Cx:=sx-(y-x)*17
Cy:=sy-(x+(y-z))*10-(z-l)*30;確定基點(diǎn)坐標(biāo)endprint
Setfame(l,rgb(255,255,255));使用白色的線條繪制不可見(jiàn)部分
Line(1,cx,cy-20,cx-17,cy-10)
Line(1,cx+17,cy-10,cx,cy-20)
Linet)1,cx,cy-40,cx,cy-20)
Setframe(l,rgb(255,0,0));用紅色繪制小立方體頂面的4條邊
Line(1,cx,cy-20,cx-17,cy-30)
Line(1,cx,cy-20,cx+17,cy-30)
Line(l,cx-17,cy-30,cx,cy-40)
Line(l,cx+17,cy-30,cx,cy-40)
Setfame(l,rgb(0,255,0));用綠色繪制左側(cè)面的邊
Line(1,cx,cy,cx-17,cy-10)
Line(1,cx-17,cy-10,cx-17,cy-30)
Line(1,cx,cy,cx,cy-20)
Setframe(l,rgb(0,0,255));用藍(lán)色繪制前面的邊
Line(1,cx,cy,cx+17,cy-10)
Line(1,cx+17,cy-10,cx+17,cy-30)
End if
End repeat
End repeat
End repeat
在流程線上加一個(gè)計(jì)算圖標(biāo)“下一個(gè)立方體”,將位置變量keer:=keer+l,在下一個(gè)循環(huán)中在下一個(gè)位置繪制另一個(gè)空間立體。
2.2隨機(jī)選擇空間立體構(gòu)造三視圖
在第四層流程圖中加入一個(gè)決策圖標(biāo),設(shè)置分支屬性為to calculated path,定義計(jì)算表達(dá)式為“keer=w”,由于變量keer是遞增的,而變量W是前面產(chǎn)生的隨機(jī)值,因此這樣設(shè)置可以隨機(jī)選擇一個(gè)空間立體。
在群組圖標(biāo)流程線上,加入三個(gè)計(jì)算機(jī)圖標(biāo),分別用來(lái)判斷小立方體是否在某一個(gè)面上有投影。其中實(shí)現(xiàn)程序如下:
Vaz:=””
Repeatwithz:=3downto1
Repeat with x:=l to 3
K:=arrayget(x*100+10+z*l)+arrayget(x*100+20+z*l)+arrayget(x*100+30+z*1)
If k>0 then vaz:=vaz∧l else
vaz:=vaz∧0
End repeat
End repeat
判斷某一列是否有小立方體單元:將該列三個(gè)單元對(duì)應(yīng)的數(shù)組元素的值相加,如果和大于0,說(shuō)明有小立方體,同時(shí)為字符串變量vaz添加字符1,否則添加字符0。其它兩個(gè)視圖程序相同。
在第三層流程線上,用一個(gè)群組圖標(biāo),加入顯示圖標(biāo)和三個(gè)計(jì)算圖標(biāo),用來(lái)設(shè)置圖形的顯示和繪制,其實(shí)現(xiàn)程序如下:
在程序中,利用函數(shù)substr從字符串變量vaz中取出前3個(gè)字符,中間3個(gè)字符和最后3個(gè)字符,并分別賦值給3個(gè)字符串變量,繪制最上面的一排單元格,如果字符為1,說(shuō)明需要繪制小方塊,邊長(zhǎng)設(shè)置為15,否則不繪制。繪制中間一排的單元格,小方塊的Y坐標(biāo)增加15,然后繪制最下面一排單元格,小方塊的Y坐標(biāo)再增加15。同理,繪制其它兩個(gè)視圖。
2.3判斷及統(tǒng)計(jì)
在系統(tǒng)設(shè)計(jì)后期,需要提示用戶要完成的任務(wù)。然后利用熱區(qū)響應(yīng)判斷用戶選擇的是否正確,是則繼續(xù)下組練習(xí),否則重新選擇,記錄選擇的正誤次數(shù),結(jié)束程序時(shí)顯示練習(xí)情況。具體的做法為如下:
(1)在流程圖上加入一個(gè)交互圖標(biāo),其下加入兩個(gè)計(jì)算圖標(biāo),用按鈕響應(yīng),分別為返回和下一組練習(xí)。加入兩個(gè)群組圖標(biāo),分別是正確的選擇和錯(cuò)誤的選擇,用熱區(qū)響應(yīng)。
(2)在正確的選擇群組圖標(biāo)中,設(shè)置其分支流向?yàn)殡x開(kāi)交互,在錯(cuò)誤的選擇分支中設(shè)置其流向?yàn)榉祷亍?/p>
(3)在每次正確選擇之后,用擦除圖標(biāo)來(lái)擦除正確提示信息。
其流程圖如圖5所示。
系統(tǒng)設(shè)計(jì)最后效果如圖6所示。
3結(jié)論
系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn),首先是用數(shù)組記錄空間立體構(gòu)造情況,隨機(jī)為數(shù)組元素賦值。然后根據(jù)數(shù)組元素值,在對(duì)應(yīng)位置繪制小立方體單元,隨機(jī)選個(gè)空間立體,用字符串變量記錄其在各投影面的投影情況,根據(jù)字符串變量的值繪制三視圖,利用熱區(qū)響應(yīng)判斷用戶選擇是否正確,統(tǒng)計(jì)測(cè)試情況。
參考文獻(xiàn)
[1]宋一兵,遲潔茶.Authorware6典型應(yīng)用實(shí)例與技巧[M].北京:人民郵電出版社,2002.
[2]許永年,覃小斌.工程制圖[M].北京:中央廣播電視大學(xué)出版社,1999.endprint