源文件下載
圓和橢圓函數(shù)
1、圓的參數(shù)方程:
x=r*cosX //x、y是圓上一點的坐標(biāo);r是圓半徑;
y=r*sinX //X是圓半徑繞圓心旋轉(zhuǎn)的角度。
2、橢圓的參數(shù)方程:
x=a*cosX //x、y是橢圓上一點的坐標(biāo);a、b分別是長、短軸
y=b*sinX //X是橢圓旋轉(zhuǎn)的角度。
圓和橢圓函數(shù)應(yīng)用舉例
例 3.3.1 (打開3.3.1.fla文件
場景中有一個影片剪輯,雙擊這個mc,在這個mc內(nèi),我們看到有兩個小影片剪輯(f_mc,d_mc),寫在第一幀上的腳本:
this.f_mc._visible = this.d_mc._visible=0;
for (k=1; k<21; k++) {
duplicateMovieClip(this.f_mc, "f"+k, k);
duplicateMovieClip(this.d_mc, "d"+k, k+40);
}
for (k=1; k<21; k++) {
this["f"+k]._x = 130*Math.cos(18*k*Math.PI/180);//圓半徑是130,圓周上每隔18度
this["f"+k]._y = 130*Math.sin(18*k*Math.PI/180);//放一個復(fù)制的mc
this["d"+k]._x = 130*Math.cos(18*k*Math.PI/180);//橢圓的長軸是130,短軸是60;橢圓的
this["d"+k]._y = 60*Math.sin(18*k*Math.PI/180); //圓周上也是每隔18度放一個復(fù)制的mc
}
角度18*k*Math.PI/180中Math.PI/180是把1度轉(zhuǎn)換成的弧度;k取1~20,那么18*k*Math.PI/180就是18度到360度。剛好每隔18度放置一個mc
按Ctrl+Enter播放,我們可以看到復(fù)制的mc被放置成一個圓和橢圓。作為圓和橢圓,他們是靜止在各自的位置上。如何讓這個圓和橢圓動(旋轉(zhuǎn))起來哩?
點擊查看動畫效果<
我們可以這樣考慮,在幀頻事件的循環(huán)中,每循環(huán)一次(j++),使圓(或者橢圓)上的點都再旋轉(zhuǎn)18度(角度都增加18*j度),到達(dá)下一個位置,這樣圓(或者橢圓)就可以旋轉(zhuǎn)起來了。
由于每一次旋轉(zhuǎn)都是復(fù)制的mc的位置互換,而整體的圖形沒有改變,所以,我們不容易看到圓(或者橢圓)在運動,解決的辦法是把其中的幾個mc的放大系數(shù)改變。
例 3.3.2
打開3.3.2.fla文件,比較它與3.3.1.fla文件的腳本的差異,運行3.3.2.fla文件,觀察效果。
點擊查看動畫效果<
例 3.3.2源程序:
j = 0;
this.f_mc._visible = this.d_mc._visible=0;
for (k=1; k<21; k++) {
duplicateMovieClip(this.f_mc, "f"+k, k);
duplicateMovieClip(this.d_mc, "d"+k, k+40);
}
f1._xscale = f1._yscale=f10._xscale=f10._yscale=100;//放大復(fù)制后其中幾個mc
d5._xscale = d5._yscale=d15._xscale=d15._yscale=50;
this.onEnterFrame = function() {
j++;
for (k=1; k<21; k++) {
this["f"+k]._x = 130*Math.cos(18*k*Math.PI/180+18*j*Math.PI/180);
this["f"+k]._y = 130*Math.sin(18*k*Math.PI/180+18*j*Math.PI/180);
this["d"+k]._x = 130*Math.cos(18*k*Math.PI/180-18*j*Math.PI/180);
this["d"+k]._y = 50*Math.sin(18*k*Math.PI/180-18*j*Math.PI/180);
}
};
角度中+18*j*Math.PI/180在幀頻事件的循環(huán)中,每循環(huán)一次影片位置的角度增加18度。-18*j*Math.PI/180與前面方向相反。
我們使圓和橢圓都旋轉(zhuǎn)運動起來了,我們還可以不斷改變圓的半徑和橢圓的長、短軸,使圓和橢圓互相轉(zhuǎn)換,或者其它的形狀變化。有興趣的可以參見3.3.3.fla文件。
點擊查看動畫效果<
例 3.3.3源程序腳本:
j = rotat=scale=0;//設(shè)置計數(shù)變量、旋轉(zhuǎn)角度和放大系數(shù)的初始值為0;
q = l=w=130; //設(shè)置圓的半徑和橢圓長軸(開始時的值)
m = 50; //設(shè)置橢圓短軸
this.f_mc._visible = this.d_mc._visible=0;
for (k=1; k<21; k++) {
duplicateMovieClip(this.f_mc, "f"+k, k);
duplicateMovieClip(this.d_mc, "d"+k, k+40);
}
f1._xscale = f1._yscale=f10._xscale=f10._yscale=100;
//使復(fù)制的mc中是4個面積變大為4倍
d5._xscale = d5._yscale=d15._xscale=d15._yscale=50;
this.onEnterFrame = function() {
this._rotation += rotat;//使(f_mc的)父級mc旋轉(zhuǎn);
this._xscale -= scale; //放大或者縮小(f_mc的)父級mc
this._yscale -= scale;
j++;
for (k=1; k<21; k++) {
this["f"+k]._x = q*Math.cos(18*k*Math.PI/180+18*j*Math.PI/180);
this["f"+k]._y = l*Math.sin(18*k*Math.PI/180+18*j*Math.PI/180);
this["d"+k]._x = w*Math.cos(18*k*Math.PI/180-18*j*Math.PI/180);
this["d"+k]._y = m*Math.sin(18*k*Math.PI/180-18*j*Math.PI/180);
}
if ((j>40) && (j<=110)) {
l -= 2.2; //圓的寬每次減2.2
q -= 1; //圓的高每次減1
m += 1.2; //橢圓的短軸每次增加1.2
w -= 1; //橢圓的長軸每次減1
}
if ((j>110) && (j<=220)) {
l += 2; //圓的寬每次加2
m -= 1.5;//橢圓原來的短軸每次減1.2
w += 0.7;//橢圓的長軸每次加0.7
}
if ((j>220) && (j<=260)) {
q += 1; //圓的高每次加1
l -= 3.2; //圓的寬每次減3.2
m--; //橢圓原來的短軸每次減1
}
if ((j>260) && (j<=320)) {
q += 2; //圓的高每次加2
m += 2.5; //橢圓原來的短軸每次加2.5
w -= 2; //橢圓的原來的長軸每次減2
}
if (j>320 && j<=450) {
q -= 3.5; //圓的高每次減3.5
w += 1.5; //橢圓的原來的長軸每次加1.5
}
if (j>450 && j<=550) {
q = -190; //保持原來圓的高為190
w = 180; //保持原來橢圓的長軸為180
rotat = 5; //這里給旋轉(zhuǎn)變量賦值,f_mc的父級mc開始旋轉(zhuǎn)
scale = 1; //這里給放大系數(shù)變量賦值,f_mc的父級mc開始放大
}
if (j>550) {
scale = -1; //f_mc的父級mc反方向放大
rotat = -5;//f_mc的父級mc反方向旋轉(zhuǎn)
}
if (j>650) {
j = scale=0; //給各變量重新賦初值,使動畫循環(huán)播放
l = q=w=130;
m = 50;
}
};
作業(yè)
A 利用例3.2.2的源程序,復(fù)制任意的21個mc,并把它們均勻的擺放在正玄函數(shù)圖象上。如下圖:
點擊查看動畫效果<
B 最好能使這個mc擺成下面的正弦圖形,并且能左右運動起來。
點擊查看動畫效果<