邵永錄

摘要:本文從機械設計課程教學的實際出發,結合FLASH動畫技術的應用,研究了機械設計課程當中曲柄搖桿機構中難以理解的結構與運動關系,并分析了具體的動畫制作過程。
關鍵詞:腳本語言? 動畫制作? 曲柄搖桿機構? 運動分析
1 基礎知識認知
1.1 素材獲取
用于制作縮放的圖片文件應該是矢量圖,文件可以使用矢量圖軟件制作而獲取,常用FALSH自身所具備的繪圖工具就可以完成相關的素材獲取,將獲取的圖形對象修改為影片剪輯。
1.2 腳本語言基礎
本次研究以Flash Action Script3.0為語言基礎。先介紹相關圖形對象的屬性。
.x——相對于父級影片剪輯的本地坐標的x坐標。如果影片剪輯在主時間軸中,則其坐標系統將舞臺的左上角指定為(0,0)。
.y——相對于父級影片剪輯的本地坐標的y坐標。如果影片剪輯在主時間軸中,則其坐標系統將舞臺的左上角指定為(0,0)。
.rotation——確定影片剪輯從注冊點開始的影片剪輯旋轉的角度。
Math.sin()——正弦三角函數,單位為弧度。
Math.asin()——反正弦三角函數,單位為角度。
Maht.pow()——此函數為求一個數a的b次冪,如:Maht.pow(a,b)。
Graphics.moveTo(x,y)——繪制直線的起點。
Graphics.lineTo(x,y)——繪制直線的停止點。
Graphics.lineStyle (6,0x00ffff,1,true,"")——指定一種線條樣式以用于隨后對直線或圓等繪制時的線寬、顏色等。
Graphics.clear()——清除直線、圓等圖形;本文中用于清除上一次創建的直線圖形對象。
SetTimeout(myclear,20)——用于延時功能的函數。
setInterval()——setInterval函數的作用是在播放動畫的時候,每隔一定時間就調用一次參數。
ClearInterval(sh)——用于清除setInterval()函數的調用循環。
1.3 四桿機構中曲柄、連桿與搖桿間的角度關系
使用平面幾何三角圖形中的余弦定理與反余弦函數,則可建立機構運動中的各個角度關系。
c2=a2+b2-2abcosC
C=arccos[(a2+b2-c2)/2ab]
2 動畫制作過程研究
2.1 初始化舞臺環境
首先,設置舞臺尺寸為550×400像素,然后聲明四個桿件的長度與四個桿件各自注冊點(坐標參考點)的坐標;即分別為37.5,125,200,
235.75,且將四個桿的注冊點坐標設置為“ax,ay”,“bx,by”,“cx,cy”,“dx,dy”,再設置b與c桿鉸接點坐標為“cx2,cy2”。
參照原四桿機構固定支點位置,設置初始兩點坐標。如設計曲柄注冊點(回轉中心為“200,100”),則搖桿回轉支點坐標為(325,300),在時間軸第一幀處寫入初始化腳本程序如下:
var a:Number = 37.5;//定義a桿及其長度;
var b :Number = 125; //定義b桿及其長度;
var c:Number = 200; //定義c桿及其長度;
var d :Number = 235.75; //定義d桿及其長度;
ax:Number = 150; //定義a桿注冊點x坐標;
ay:Number = 150; //定義a桿注冊點y坐標;
bx:Number; //定義b桿注冊點x坐標;
by:Number; //定義b桿注冊點y坐標;
cx:Number = 375; //定義c桿注冊點x坐標;
cy:Number = 350; //定義c桿注冊點y坐標;
cx2:Number ; //定義b與c桿鉸接點x坐標;
cy2:Number;? //定義b與c桿鉸接點y坐標;s
曲柄的定角轉動程序如下:
var jd:Number = 0
function aa()
{
jd = jd +5;
jd %=? 360;
……
}
setInterval(aa,10);
2.2 求取各注冊點坐標公式
曲柄a的注冊點采取給定方式,根據舞臺大小,自行確定其坐標。
ax=150
ay=150
連桿b的注冊點位置由曲柄的與連桿連接端決定,角度通過余弦定理與反余弦求解而出,程序如下:
bx= ax+a*Math.cos(jd*Math.PI/180);
by =ay-a*Math.sin(jd*Math.PI/180);
搖桿c的注冊點位置由連架桿的固定端點決定,程序如下:
cx=ax+d;
cy=ay;
連架桿d的注冊點與曲柄a的注冊點重合,所以坐標與a曲柄的注冊點坐標相同。
ax=dx=150
ay=dy=150
要求取b與c兩桿的交點坐標,就必須使用余弦定理與反三角函數,推動過程較復雜,此處僅列出相應的代碼程序。
e=Math.sqrt(Math.pow(a,2)+Math.pow(d,2)-2*
a*d*Math.cos(jd*Math.PI/180));
wj=Math.acos((Math.pow(e,2)+Math.pow(d,2)-Math.pow(a,2))/(2*e*d))*180/Math.PI;
kj=Math.acos((Math.pow(b,2)+Math.pow(e,2)-Math.pow(c, 2))/(2*b*e))*180/Math.PI;
如果就這樣直接獲取a桿與c桿的轉角還是會發生錯誤的。原因在于當曲柄旋轉時,會造成與連架桿的夾角時而為正,時而為負。
腳本制作中,采用IF()語句來分別判斷曲柄旋轉過程中對連桿b與水平正向的夾角受到連桿與BD連線夾角KJ,以及AD與BD夾角WJ的不同影響關系。
if (jd<=180){
w =? kj- wj;
}else{
w =? wj+ kj;
}
cx2 = bx+b * Math.cos(w*Math.PI/180);
cy2 = by-b * Math.sin(w*Math.PI/180);
2.3 繪制曲柄搖桿機構圖形
此曲柄搖桿機構采用Action Script 3的Graphics繪制圖形命令來進行,具體繪制四桿程序如下:
var lina:Shape=new Shape();
lina.graphics.moveTo(ax,ay);
lina.graphics.lineStyle(6,0x00ffff,1,true,"");
lina.graphics.lineTo(bx,by);
addChild(lina);//曲柄a
var linb:Shape=new Shape();
linb.graphics.moveTo(bx,by);
linb.graphics.lineStyle(6,0xffff00,1,true,"");
linb.graphics.lineTo(cx2,cy2);
addChild(linb);//連桿b
var linc:Shape=new Shape();
linc.graphics.moveTo(cx,cy);
linc.graphics.lineStyle(6,0x00ff00,1,true,"");
linc.graphics.lineTo(cx2,cy2);
addChild(linc);//搖桿c
var lind:Shape=new Shape();
lind.graphics.moveTo(ax,ay);
lind.graphics.lineStyle(6,0xff0000,1,true,"");
lind.graphics.lineTo(dx,dy);
addChild(lind);//連架桿d
接下來繪制4個注冊點(也稱鉸接點)。
var cir1:Shape=new Shape();
cir1.graphics.beginFill(0xff0ff0);
cir1.graphics.drawCircle(ax,ay,6);
cir1.graphics.endFill();
addChild(cir1);//圓a
var cir2:Shape=new Shape();
cir2.graphics.beginFill(0xff0ff0);
cir2.graphics.drawCircle(bx,by,6);
cir2.graphics.endFill();
addChild(cir2);//圓b
var cir3:Shape=new Shape();
cir3.graphics.beginFill(0xff0ff0);
cir3.graphics.drawCircle(cx2,cy2,6);
cir3.graphics.endFill();
addChild(cir3);//圓c
var cir4:Shape=new Shape();
cir4.graphics.beginFill(0xff0ff0);
cir4.graphics.drawCircle(cx,cy,6);
cir4.graphics.endFill();
addChild(cir4);//圓d
2.4 動態曲柄搖桿機構的獲取
延時清除與使用setInterval()每隔一定時間調用一次自定義函數aa(),注意將setTimeout()的時間與setInterval()的時間設置成相同值,從而保證桿件轉動效果的連貫性。
setTimeout(myclear,20);//延時函數
function myclear()
{//延時清除畫線!
lina.graphics.clear();
linb.graphics.clear();
linc.graphics.clear();
lind.graphics.clear();
cir2.graphics.clear();
cir3.graphics.clear();
cir1.graphics.clear();
cir4.graphics.clear();
}
}//以上程序內容全部在自定義函數aa()當中。
接下來便是使用setInterval()函數來按時調用aa()自定義函數,程序設置如下。
sh = setInterval(aa,20);
2.5 影片輸出與應用
將Flash文件導出生成.swf格式動畫文件,然后就可以在PowerPoint軟件下的控制工具箱中的Shockware Flash Object將此動畫文件導入到PPT中。播放PPT,就可以更好地為課堂教學服務了。
3 總結
利用Flash Action Script3.0強大的腳本語言工具,結合相關的機械設計原理知識,全部使用腳本代碼程序,可以制作出清晰、精彩的機械機構動畫文件。
參考文獻:
[1]陳志民.Adobe創意大學Flash CS6標準教材[M].北京希望電子出版社,2013.4.
[2]張佳麗.Flash CS6中文版動畫制作標準教程[M].中國青年出版社,2013.7.
[3]嚴嚴.Flash CS6中文版完全學習手冊[M].人民郵電出版社,2013.3.