繪制波形
最后,在 Wave2.as 中,不再使用小球,轉(zhuǎn)而使用繪圖API來繪制正弦波形。代碼如下:
package { import flash.display.Sprite; import flash.events.Event; public class Wave2 extends Sprite { private var angle:Number = 0; private var centerY:Number = 200; private var range:Number = 50; private var xspeed:Number = 1; private var yspeed:Number = .05; private var xpos:Number; private var ypos:Number; public function Wave2() { init(); } private function init():void { xpos = 0; graphics.lineStyle(1, 0, 1); graphics.moveTo(0, centerY); addEventListener(Event.ENTER_FRAME, onEnterFrame); } public function onEnterFrame(event:Event):void { xpos += xspeed; angle += yspeed; ypos = centerY + Math.sin(angle) * range; graphics.lineTo(xpos, ypos); } } }
下一章我們會詳細講述繪圖API,大家也應(yīng)該有興趣來執(zhí)行一下這個文件,觀察一下繪制出的波形。注意,由于 Flash 的Y軸是反向的,所以繪制出的波形也是顛倒的。
圓和橢圓
目前為止我們已經(jīng)掌握了正弦波,下面再來看看它的兄弟,余弦波。與正弦波的形成相同,只不過是使用余弦函數(shù)代替了正弦函數(shù)而已。如果你還記得前面所說的正弦和余弦是怎樣一種相反關(guān)系的話,就能理解,它們只是波形都相同,只是所處位置不同了。圖3-19 為余弦波圖像:
圖3-19 余弦波形
可見,余弦圖像中0度和2pi度(或360度)的值都為1,從1開始經(jīng)過 0,-1,0, 最后回到1。所以,它與正弦曲線相同,只不過位置發(fā)生了一點偏移。
圓形運動
在執(zhí)行物體移動的動畫時,完全可以使用余弦來代替正弦。實際上,余弦和正弦協(xié)同工作時,才能形成一個更加有用的功能:使物體沿圓形運動,如圖3-20。
圖3-20 物體沿圓形運動時的幾個點
如圖3-20所示,以圖中的圓為例,盯住右側(cè)的那直角條邊(y),然后開始對它進行旋轉(zhuǎn),我們發(fā)現(xiàn)這條邊正在被倒置。這條邊的中心點就是圓心,而它的運動范圍就是這個圓的半徑。就像在第一個正弦實驗中一樣,我們可以計算出這條邊的長度:角的正弦值乘以半徑。在這里,使用正弦函數(shù)非常合適,當(dāng)我們從側(cè)面觀察這個圓時,就可以算出 y 的長度——對邊的長度。如果把這個圓放倒,再來觀察它,發(fā)現(xiàn)角是在向前向后或向左向右移動的。這時,可以使用余弦函數(shù)計算出 x 的長度——鄰邊的長度。重要的一點是,兩個的夾角都是相同的,而不像 Random.as 那個例子中使用不同的角度計算 x,y 坐標。這里我們只需要記住用正弦函數(shù)計算 y ,用余弦函數(shù)計算 x。下面請看 ActionScript 代碼:
package { import flash.display.Sprite; import flash.events.Event; public class Circle extends Sprite { private var ball:Ball; private var angle:Number = 0; private var centerX:Number = 200; private var centerY:Number = 200; private var radius:Number = 50; private var speed:Number = .1; public function Circle() { init(); } private function init():void { ball = new Ball(); addChild(ball); ball.x = 0; addEventListener(Event.ENTER_FRAME, onEnterFrame); } public function onEnterFrame(event:Event):void { ball.x = centerX + Math.cos(angle) * radius; ball.y = centerY + Math.sin(angle) * radius; angle += speed; } } }
大家可以自己寫這個例子,也可以打開 Circle.as 作為文檔類。執(zhí)行后發(fā)現(xiàn),獲得了一個完美的圓。這段代碼的精華就是使用余弦來確定 x 坐標,使用正弦來確定 y 坐標,你應(yīng)該對他們的關(guān)系非常了解了。在 Flash 中,只要提到 x ,你就應(yīng)該馬上想到余弦,并且還能聯(lián)想到 y 使用正弦。請在最后這段代碼上多花些時間,它將是 ActionScript 動畫工具箱中最有用的工具之一。
出處:藍色理想
責(zé)任編輯:bluehearts
上一頁 三角學(xué)應(yīng)用 [7] 下一頁 三角學(xué)應(yīng)用 [9]
◎進入論壇RIA設(shè)計與應(yīng)用版塊參加討論
|