黃紹龍 曹建立
摘要:本文以帕斯卡蝸線為例,介紹了在Flash中使用動(dòng)作腳本動(dòng)態(tài)生成極坐標(biāo)曲線的方法。
關(guān)鍵詞:極坐標(biāo)方程;帕斯卡蝸線;曲線;動(dòng)作腳本
中圖分類(lèi)號(hào):G642 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2020)33-0206-03
開(kāi)放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID):
1 引言
高等數(shù)學(xué)中的一些常見(jiàn)曲線通常以極坐標(biāo)方程的形式給出。曲線的極坐標(biāo)方程使用極徑和極角的關(guān)系來(lái)刻畫(huà)曲線。若能將極坐標(biāo)方程對(duì)應(yīng)的極坐標(biāo)曲線的繪制過(guò)程動(dòng)態(tài)地顯示出來(lái),則學(xué)習(xí)者可以直觀地觀察曲線的變化規(guī)律和特點(diǎn)。二維動(dòng)畫(huà)設(shè)計(jì)軟件Flash中的動(dòng)作腳本擁有豐富的數(shù)學(xué)類(lèi)方法和強(qiáng)大的動(dòng)畫(huà)處理機(jī)制,非常適合動(dòng)態(tài)生成極坐標(biāo)曲線并進(jìn)行演示。
2 計(jì)算機(jī)圖形學(xué)繪制極坐標(biāo)曲線的方法
在計(jì)算機(jī)圖形學(xué)中一般采用“化曲為直”的方法實(shí)現(xiàn)曲線的繪制。計(jì)算機(jī)圖形軟件包通常會(huì)提供線段的繪制函數(shù),可以使用小線段逼近的方法實(shí)現(xiàn)曲線的繪制。
根據(jù)參數(shù)極坐標(biāo)方程,可以由極角計(jì)算極徑,再由極角和極徑將點(diǎn)的極坐標(biāo)轉(zhuǎn)換為笛卡爾坐標(biāo)。選擇合適的固定步長(zhǎng)沿著曲線路徑計(jì)算曲線上點(diǎn)的坐標(biāo),使用這些點(diǎn)作為逼近真實(shí)曲線的小線段的端點(diǎn),逐段連續(xù)地繪制小線段可以展示曲線的繪制過(guò)程并最終實(shí)現(xiàn)曲線的近似表示。
3 利用動(dòng)作腳本動(dòng)態(tài)繪制極坐標(biāo)曲線
極坐標(biāo)方程表示的曲線有很多種,但是使用動(dòng)作腳本動(dòng)態(tài)生成這些曲線的方法是類(lèi)似的。帕斯卡蝸線的極坐標(biāo)方程表示的曲線根據(jù)參數(shù)取值的不同呈現(xiàn)出不同的形態(tài),特征明顯,易于讀者進(jìn)行觀察。所以下面以帕斯卡蝸線為例來(lái)詳細(xì)介紹動(dòng)作腳本動(dòng)態(tài)繪制極坐標(biāo)曲線的一般方法。這里的后臺(tái)腳本使用的是ActionScript 2.0版本。
3.1 帕斯卡蝸線的極坐標(biāo)方程及曲線特點(diǎn)
帕斯卡蝸線的極坐標(biāo)方程是r= acosθ+b,它表示的曲線具有以下3個(gè)特點(diǎn):
(1)關(guān)于極軸對(duì)稱(chēng);
(2)具有周期性,周期是2π。故在一個(gè)周期上即可得到完整的曲線;
(3)a和b兩個(gè)參數(shù)在a>b,a=b,a
可以看到,圖1中間的圖形是心形線,它是蝸形線在參數(shù)a=b時(shí)的特殊情況;若a比b多的程度越大,則曲線左側(cè)的內(nèi)環(huán)越大,如圖1的最左側(cè)圖形;若b比a多的程度越大,則曲線左側(cè)邊緣相對(duì)心形線左側(cè)尖點(diǎn)向外突出,如圖1中的最右側(cè)圖形。參數(shù)a和b的大小關(guān)系使帕斯卡蝸線種類(lèi)有明顯的可區(qū)分性。
3.2 動(dòng)作腳本相關(guān)知識(shí)
1)MovieClip類(lèi)
(1)使用createEmptyMovieClip方法創(chuàng)建空的影片剪輯;
(2)使用lineStyle方法設(shè)置繪制線段的線寬、顏色和透明度;
(3)使用moveTo方法移動(dòng)畫(huà)筆到指定點(diǎn);
(4)使用lineTo方法繪制從當(dāng)前點(diǎn)到指定點(diǎn)的線段。
2)Math類(lèi)
(1)使用sin方法和cos方法計(jì)算以弧度單位表示的角度的正弦值和余弦值;
(2)使用符號(hào)常量PI表示圓周率常數(shù)。
3) onEnterFrame事件
曲線在繪制過(guò)程中隨著時(shí)間不斷向前生長(zhǎng),如果曲線要能夠動(dòng)態(tài)地、均勻地顯示整個(gè)繪制的過(guò)程,那么需要每一步生長(zhǎng)后留下固定的時(shí)間間隔,刷新顯示當(dāng)前曲線的最新繪制狀態(tài)。如果沒(méi)有留下時(shí)間間隔,計(jì)算機(jī)的運(yùn)行速度很快,曲線瞬間繪制完畢,用戶(hù)只能看到最終的完整曲線,而繪制的過(guò)程無(wú)法觀察到。時(shí)間間隔是留給用戶(hù)的觀察時(shí)間,它的原理類(lèi)似于電視機(jī)上放慢鏡頭。
動(dòng)作腳本中的onEnterFrame事件每進(jìn)入一幀就進(jìn)行檢查,可以用來(lái)解決時(shí)間間隔的問(wèn)題。將繪圖功能定義在onEnter-Frame事件的處理函數(shù)中,每進(jìn)入一幀,繪圖參數(shù)就增加一個(gè)步長(zhǎng),圖形就向前生長(zhǎng)一段(即繪制一段新的小線段),直到整個(gè)曲線繪制完畢。這樣一來(lái),圖形生長(zhǎng)的時(shí)間間隔就是幀頻倒數(shù)個(gè)秒的時(shí)間。從觀察者的角度看,整個(gè)曲線動(dòng)態(tài)繪制的過(guò)程就被逐漸呈現(xiàn)出來(lái)了。
繪制的速度和幀頻相關(guān),幀頻的值越大曲線的繪制速度越快。曲線的平滑程度和選擇的步長(zhǎng)相關(guān),步長(zhǎng)越小越平滑。在幀頻確定的情況下,步長(zhǎng)越小繪制的速度越慢。
4)計(jì)算機(jī)圖形坐標(biāo)系統(tǒng)與幾何坐標(biāo)系統(tǒng)的差別
在幾何學(xué)中,y坐標(biāo)軸是豎直向上的,而計(jì)算機(jī)圖形系統(tǒng)的y軸是豎直向下的,這就使得在舞臺(tái)上繪制出來(lái)的圖形和幾何教科書(shū)上的不同,是上下顛倒著的。所以,為了能與常見(jiàn)幾何圖形保持形態(tài)上的一致,計(jì)算出來(lái)的線段端點(diǎn)不直接作為繪圖的參數(shù),而是取縱坐標(biāo)相反數(shù)作為端點(diǎn)坐標(biāo)進(jìn)行繪制。
3.3 動(dòng)作腳本的繪圖實(shí)現(xiàn)
在Flash文件中設(shè)置幀頻為24幀/秒,所以每一幀的時(shí)間間隔是1/24秒。整個(gè)動(dòng)畫(huà)只使用一個(gè)圖層。首先在圖層上布置組件:(l)添加兩個(gè)輸入文本框,用來(lái)接收用戶(hù)設(shè)置的帕斯卡蝸線的參數(shù)a和b的值,將兩個(gè)輸入文本框分別命名為aa和bb;(2)添加一個(gè)動(dòng)態(tài)文本框,用來(lái)在曲線的繪制過(guò)程中實(shí)時(shí)顯示參數(shù)θ的當(dāng)前值(以度為單位),對(duì)應(yīng)的變量名為angle; (3)添加一個(gè)按鈕,用戶(hù)通過(guò)點(diǎn)擊按鈕來(lái)觸發(fā)定義在按鈕上的onEnter-Frame事件處理函數(shù)的繪圖功能。然后添加動(dòng)作腳本如下。
1)第1關(guān)鍵幀上添加的代碼是進(jìn)行必要的初始化操作。
//設(shè)置由度單位轉(zhuǎn)換為弧度單位的系數(shù)
var per= 180/Math.PI;
//設(shè)置一個(gè)周期
var two_PI=2*Math.PI;
//舞臺(tái)上的輸入文本框aa、bb分別設(shè)置曲線參數(shù)。,6的值,默認(rèn)值是150,60
aa.text= 150; bb.text= 60;
//動(dòng)態(tài)文本框的變量angle顯示參數(shù)θ的當(dāng)前度數(shù)值,初始值是0
angle=0;
2)添加在按鈕上的代碼實(shí)現(xiàn)極坐標(biāo)曲線的動(dòng)態(tài)繪制,設(shè)置單擊按鈕動(dòng)作進(jìn)行觸發(fā)。
on (press){
//設(shè)置存儲(chǔ)極徑、極角、極角步長(zhǎng)的變量
var r, theta, dtheta=1/20;
//i賣(mài)取輸入文本框中設(shè)定的參數(shù)。和6的值
var a=Number(aa.text),b=Number(bb.text);
//創(chuàng)建空的影片剪輯n- mc
createEmptyMovieClip(”n—mc”,1);
///設(shè)置影片剪輯左上角在舞臺(tái)中的位置
n_mc._x= 100; n_mc._y= 200;
//移動(dòng)畫(huà)筆到極角為0時(shí)曲線對(duì)應(yīng)的笛卡爾坐標(biāo)位置,即起始點(diǎn)
n_mc.moveTo(a+b,0);
//設(shè)置線型
n_mc.lineStyle (3,Ox000000,100);
//設(shè)置極角的初始值
theta= dtheta;
n_mc.onEnterFrame= function0
{ ,/動(dòng)態(tài)文本框中實(shí)時(shí)顯示當(dāng)前繪制點(diǎn)對(duì)應(yīng)的極角度數(shù)值
angle= Math.floor(per * theta); //計(jì)算當(dāng)前的極徑并將極坐標(biāo)轉(zhuǎn)換為笛卡爾坐標(biāo)
r=a*Math.cos(theta)+b;
x=r* Math.cos(theta);
y=r * Math.sin(theta);
//繪制曲線的下一條小線段,使其向前生長(zhǎng)
this.lineTo(x,-y);
//繪制一個(gè)周期即可得到完整的帕斯卡蝸線
if (theta< two_PI)
{theta+=dthetaj};)
圖2顯示了參數(shù)o= 150,b= 60時(shí)的帕斯卡蝸線的動(dòng)態(tài)生成過(guò)程,其中theta后面的動(dòng)態(tài)文本框?qū)崟r(shí)顯示當(dāng)前繪制點(diǎn)對(duì)應(yīng)的蝸線極坐標(biāo)方程中參數(shù)θ的值。改變參數(shù)a,b的值可以動(dòng)態(tài)生成圖1所示的另外兩種類(lèi)型的帕斯卡蝸線。
為了更加直觀地比較帕斯卡蝸線在不同參數(shù)下的形態(tài),可以將這些不同參數(shù)的曲線在同一影片剪輯的不同圖層上進(jìn)行顯示。如圖3顯示了當(dāng)a以步長(zhǎng)20從150變化到10,b保持50不變時(shí)所生成的各個(gè)帕斯卡蝸線。在逐個(gè)繪制的過(guò)程中,容易觀察出a>b,a=b,a
將上述繪制帕斯卡蝸線的代碼中的初始條件和極坐標(biāo)方程改變后也可以動(dòng)態(tài)繪制其他一些常見(jiàn)極坐標(biāo)曲線,例如三葉玫瑰線、四葉玫瑰線和螺旋線等曲線,極坐標(biāo)方程如表1,生成的曲線如圖4。為了便于對(duì)比,帕斯卡蝸線也列到表1中。
4 結(jié)論
本文介紹的曲線的動(dòng)態(tài)生成方法具有一般性,不僅適用于各種常見(jiàn)的極坐標(biāo)方程表示的曲線,也適用于笛卡爾坐標(biāo)方程表示的曲線。對(duì)于一般的形如y=f(x)的函數(shù)曲線,例如y=x2,y= x3,y= sin(x)等函數(shù)曲線的繪制上述方法也是可以實(shí)現(xiàn)的,只不過(guò)每次步長(zhǎng)作用在自變量x上,然后計(jì)算對(duì)應(yīng)的y值。根據(jù)具體的函數(shù)進(jìn)行適當(dāng)?shù)目s放,可動(dòng)態(tài)生成笛卡爾坐標(biāo)方程曲線。如圖5顯示了二次曲線、三次曲線和正弦曲線的繪制效果。
在高等數(shù)學(xué)的學(xué)習(xí)過(guò)程中,經(jīng)常會(huì)遇到不同坐標(biāo)系統(tǒng)下的各種曲線方程表示的曲線,還要計(jì)算與這些曲線相關(guān)的弧長(zhǎng)、面積等幾何量的值。若能夠提前了解這些曲線的形態(tài),特別是對(duì)于一些不常見(jiàn)的曲線,利用本文介紹的方法動(dòng)態(tài)生成曲線后將有助于計(jì)算的完成。
極坐標(biāo)方程對(duì)應(yīng)曲線的動(dòng)態(tài)生成具有清晰的直觀性,可以作為幾何課堂教學(xué)的有益補(bǔ)充,同時(shí)它的良好的交互性有利于曲線參數(shù)改變時(shí)對(duì)比曲線的幾何形態(tài),使學(xué)習(xí)者加深對(duì)知識(shí)的理解。
參考文獻(xiàn):
[1] Donald Hearn.Computer Graphics with OpenGL[M].北京:電子工業(yè)出版社,2012.2:124-127.
[2]劉孟輝,中文版Flash CS6課堂實(shí)錄[M].北京:清華大學(xué)出版社,2014.
[3]蔣維,胡廷鋒.基于動(dòng)作腳本的交互式動(dòng)畫(huà)設(shè)計(jì)[J].洛陽(yáng)師范學(xué)院學(xué)報(bào),2016(11): 54-56.
【通聯(lián)編輯:王力】
作者簡(jiǎn)介:黃紹龍(1980-),男,河南平頂山人,講師,碩士,從事計(jì)算機(jī)應(yīng)用方面的研究。