2007年10月19日金曜日

AfterEffectsエクスプレッション講座 その13(地球を回る月を作成する)

地球を回る月を作成する。(三角関数を使う)

前回のサークル運動の応用編です。

地球の動きは前回のコードを使えばOKですが、
ポイントになるのは月が地球と共に移動しながら
地球の周りをぐるぐる回る、衛星の動きです。


解決策は地球の「位置」を取得して、それを月の
「サークル運動の中心にする」ことです。

以下のサンプル使用します。「継続時間」を12秒に
地球レイヤーを上、月レイヤーを下に配置して
「位置」にエクスプレッションを適用します。

地球レイヤー用エクスプレッション

r = 100 ;
w = this_comp.width/2 ;
h = this_comp.height/2 ;
t = 12 ;
d = 360/t;
ra = degrees_to_radians(time*d-90);
[Math.cos(ra)*r+w,Math.sin(ra)*r+h]

前回のコードを使い回します。
t = 12 ;で回転の周期を12秒に変更していますが
それ以外は変更していません。

月レイヤー用エクスプレッション

r = this_comp.layer(index-1) .width ; 
w = this_comp.layer(index-1).position[0] ;
h = this_comp.layer(index-1).position[1];
t = 6 ;//fade time
d = 360/t;
ra = degrees_to_radians(time*d-90);
[Math.cos(ra)*r+w,Math.sin(ra)*r+h]

地球レイヤーの幅から月レイヤーの回転の半径を取得
r = this_comp.layer(index-1) .width ;

地球レイヤーの「位置X」から月レイヤーの回転の中心の
X座標を取得
w = this_comp.layer(index-1).position[0] ;

地球レイヤーの「位置Y」から月レイヤーの回転の中心の
Y座標を取得
h = this_comp.layer(index-1).position[1];

地球レイヤーより若干早めに回転周期を設定
t = 6 ;

以下地球レイヤーと同じ。

いかがでしょうか?レイヤー同士を連携させるのは
エクスプレッションの最も得意とするところでもあり、
変数をかえるだけでガンガン使い回していくことが
できます。

今回のサンプルコードは地球レイヤーを参照するのに
「index-1」を使用しているので月レイヤーを「ctl+D」
で複製して、地球の動きや地球と月の回転周期を変えて
みると面白い効果を得ることができます。
是非試してみてください。

AfterEffectsエクスプレッション講座 その12(平面のサークル運動)

平面をサークル運動させる。(三角関数を使う)

三角関数を用いた最も代表的な作成事例でネットでも比較的
サンプルが多い事例ですが、ここでは回転の周期をtimeで制御
できるようにしたいと思います。

以下のコードで作成します。

r = 100 ; 
w = this_comp.width/2 ;
h = this_comp.height/2 ;
t = 3 ;
d = 360/t;
ra = degrees_to_radians(time*d-90);
[Math.cos(ra)*r+w,Math.sin(ra)*r+h]

r = 100 ; で回転の半径を指定します。

w = this_comp.width/2 ;
h = this_comp.height/2 ;
で回転の中心を指定します。

t = 3 ;で一周する時間を指定します。

d = 360/t;で一秒間で回転する角度を求めます。

ra = degrees_to_radians(time*d-90);
でラジアンに変換します。

[Math.cos(ra)*r+w,Math.sin(ra)*r+h]
Xにcosineの計算結果、Yにsineの計算結果をいれます。