程海生
Flash動態(tài)繪圖在課件中的應用
程海生
在一些學科的教學中經常需要畫函數(shù)的圖像,如果能讓計算機進行動態(tài)繪圖,可以讓學生更清楚地看到函數(shù)變化的過程,能更好地幫助學生學習教學內容。筆者以繪制數(shù)學函數(shù)圖像為例介紹如何運用Flash軟件進行動態(tài)繪圖。
1.創(chuàng)建新文件
啟動Flash MX 2004創(chuàng)建一個新的Flash文檔,使用默認的舞臺大小550×400。在用程序繪制動態(tài)圖像前,先用Flash繪圖工具制作界面和一些靜態(tài)的圖形,這樣可以簡化程序。在制作過程中也要使用一些技巧才能使這些靜態(tài)圖形快速完成,并且與后面的程序繪圖準確結合。
2.制作軟件界面
將圖層一重命名為“界面”,并繪制出如圖1所示的矩形界面。圖中間的部分是空的,背景為白色。
圖1 繪制界面
3.繪制坐標系
(1)繪制坐標原點
①新建圖層,并將其命名為“坐標原點”,拖拽到“界面”圖層的下一層。
②在新圖層中,繪制一個沒有邊線的紅色小圓點,在屬性面板中將其寬和高都設為2,x設為274,y設為199,這樣就精確地使小紅點的中心為(275,200)了(如圖2所示)。
圖2
說明:因為Flash中的圖形的坐標是其左上角的點的坐標,又因為紅色小圓點的寬是2,坐標x為274,所以它的中心點坐標x值是:274+2/2=275;同理,中心點坐標y值為200。
(2)繪制x軸
再添加一個新圖層,將其重命名為“x軸”,并將其拖拽到“坐標原點”圖層的下一層,隱藏“界面”圖層,使用線條工具按住Shift鍵繪制一條橫線,在屬性面板中對其做如下設置,寬:550,x:0,y:200,顯示“界面”圖層后,在“x軸”圖層合適的位置上繪制一個向右的箭頭,標出x軸正方向。
(3)繪制x軸刻度
①在“x軸”圖層上插入一個新圖層,將其命名為“x軸刻度”,鎖定其他圖層,并隱藏“界面”圖層。
圖3
②在x軸上繪制一條短豎線作為刻度標記,在屬性面板中對其進行如下設置,高:5,x:15,y:195,這樣在x軸左邊就有了一個如圖3所示的刻度。
③選中短豎線,使用組合鍵Ctrl+G將其組合,然后使用組合鍵Ctrl+C對其復制,然后連續(xù)使用Ctrl+Shift+V組合鍵26次,這樣在同一個位置就有了27個刻度了。
④選擇最上層的刻度,在屬性面板中將其x值改為535。設置完后得到如圖4所示的結果。
圖4
⑤使用組合鍵Ctrl+A選擇所有x軸刻度,然后使用組合鍵Ctrl+K打開“對齊”面板,單擊“水平平均間隔”按鈕,這些刻度就如圖5所示,均勻地排列到x軸上了,相鄰兩個刻度之間的距離都是20個像素,中間的一個刻度正好在原點上。
圖5
(4)繪制y軸和y軸上的刻度與繪制x軸及其刻度的方法相同
說明:在繪制刻度時一定要計算好刻度個數(shù)、第一個刻度的位置和最后一個刻度的位置。本例中y軸刻度可參考如下設置,刻度個數(shù)21個;刻度大小,寬:5,高:0;最上面的刻度位置,x:275,y:400;最下面的刻度位置,x:275,y:0。最后用“垂直平均間隔”將刻度平均分布。
(5)用文字工具,給坐標軸上的刻度標上刻度值
4.繪制網格線
再添加一個圖層,將其命名為“網絡線”,并將其拖至最下一層,使用與繪制坐標軸刻度相同的方法繪制網格線。
5.添加文字和組件
在“界面”圖層上添加一個圖層,將其命名為“文字”,在其上輸入必要的文字。再添加一個圖層,將其命名為“組件”,用Ctrl+F7打開“組件”面板,如圖6所示,找到“NumericStepper”組件并將其拖拽到舞臺上,在屬性面板中進行如下參數(shù)設置,maxmum:5;minmum:-5;stepSize:0.1;value:0(如圖7所示)。
圖6
圖7
復制粘貼這個組件成3個,并如圖8所示放置,在屬性面板中將它們的實例名稱分別命名為a,b,c。至此準備工作完成。
圖8
在“界面”圖層下面,“坐標原點”圖層上面,插入一個新圖層,將其命名為“繪圖程序”,如圖9所示在“繪圖程序”圖層的第一幀上添加如下語句:
//自定義drawfx()函數(shù),用于畫二次函數(shù)圖像
function drawfx() {
//清除原有圖像
_root.clear();
//x,y是以窗口客戶區(qū)坐標系中點(275,200)為原點,一個像素為一個單位長度的平面直角坐標系中的點的坐標x,y值。
x = -275;
//x0,y0是以窗口客戶區(qū)坐標系中點(275,200)為原點,20個像素為一個單位長度的平面直角坐標系中的點的坐標x,y值。
x0 = x/20;
//用二次函數(shù)求出y0
y0 = a.value*Math.pow(x0, 2)+b.value*x0+c.value;
y = y0*20;
//x1,y1為窗口客戶區(qū)坐標系中點的坐標x,y值。
x1 = x+275;
y1 = -(y-200);
//定義線條樣式。
_root.lineStyle(2, 0x0000FF);
//移動繪制定點到(x1,y1)
_root.moveTo(x1,y1);
//使用循環(huán)語句繪圖,由499條小線段組成函數(shù)圖像,由于線段都很短,看起來函數(shù)圖像還是很平滑的
for (x=-274; x<=275; x++) {
x0 = x/20;
y0 = a.value*Math.pow(x0, 2)+b.value*x0+c.value;
y = y0*20;
x1 = x+275;
y1 = -(y-200);
_root.lineTo(x1, y1);
_root.moveTo(x1, y1);
}
//強制刷新畫面
updateAferEvent();
}
//調用drawfx()函數(shù),畫二次函數(shù)圖像
drawfx();
//新建一個名為myobj的對象
myobj = new Object();
//為對象添加change事件函數(shù),在函數(shù)中調用drawfx函數(shù)畫二次函數(shù)圖像
myobj.change = function() {
drawfx();
};
//分別為三個組件添加監(jiān)聽對象
a.addEventListener("change", myobj);
b.addEventListener("change", myobj);
c.addEventListener("change", myobj);
圖9
這樣一個可以動態(tài)繪制二次函數(shù)圖像的課件就制作完成了,通過調整系數(shù)的大小,就可以看到相應的函數(shù)圖像了,運行結果如圖10所示。
圖10
(本欄責任編輯/安健)
2012-05-15
程海生,本科,中教一級。
河北省承德市寬城滿族自治縣龍須門鎮(zhèn)中學。