エンジンのピストンが translateY の 2.0 から -2.0 の間隔を、 2 秒の周期で往復運動をする場合のアニメーションを、 三角関数を使って表してみましょう。
このアニメーションをグラフにすると以下のようになります。
このグラフを三角関数で表したいときには、 まず、形の似ている三角関数のグラフをさがします。 この場合には cos のグラフの形が同じであることに気がつきます。
2 つのグラフを 1 つにして比べてみましょう。 (cos のグラフと目的のグラフです)
上の 2 つのグラフの違いは縦軸と横軸の範囲です。 アニメーションのグラフは 時間 (横軸)は 0 から 2 まで、 translateY (横軸)は -2.0 から 2.0、 cos のグラフは 横軸が 0 から 2*3.14、 縦軸が -1.0 から 1.0 になっています。
これから 2 つの図の縦軸と横軸の範囲を合わせてゆきます。
まず、縦軸を合わせるために cos の図を縦に 2 倍のスケールをかけます。
縦軸の最大値と最小値に注意してください。
次に横軸を合わせるために、角度を 6 倍します。
(360/60 = 6)
すると、cos の周期が 1/6 になります。
これで 2 つのグラフが同じになったので、 2 * cos(6 * X) が求める式になります。
実際に上記の式で望んだアニメーションが実行できるかどうか、 Maya 上で確かめてみましょう。
上の Expression の式において、 cos ではなく cosd という関数が使われています。
これはなぜかというと
Maya の cos 関数では引数の単位が、
円の 1 周を 2 * 円周率(π = 3.14...)で表すラジアンになっているので、
その代わりに今までの説明で使ってきた
弧度法(円の 1 周 360 度)を単位とする関数である cosd を使っているのです。
もし、上の Expression を cos 関数で表したければ、
弧度法をラジアンに変換する関数 deg_to_rad を使います。
具体的には以下のような式を
Expression: に打ち込みます。
sin 関数の場合も、同じ理由で sind を使用します。
赤いライトが点滅するアニメーションを、三角関数によって表してみましょう。
赤色を表す値(アトリビュート)が 120 フレーム周期で 0.0 から 1.0 の間を行ったり来たりするとします。
このアニメーションは、0 フレーム目で 0.0、
60 フレーム目で 1.0、
120 フレーム目で 0.0
となり、後は 120 フレームの周期で同じ点滅をくり返します。
それをグラフで表すと、以下のようになります。
このグラフと形が同じグラフが sin または cos のグラフから見つかるでしょうか。
まず、sin のグラフを見てみます。
(このグラフは横軸が -360 から 360 の範囲のグラフであることに注意してください)
このグラフの中で求めるグラフと同じ形をさがすと、 以下の部分が同じ形になっているのに気がつきます。
2 つの図を 1 つにしてみましょう。 (sin のグラフと目的のグラフです)
後は、この sin のグラフを目的のグラフにピッタリ重なるように移動・スケールをかけてゆきます。
以下のグラフにおいては横軸・縦軸の最大値・最小値に注意してください。
移動・スケールどちらからやっても同じですが、ここでは移動から始めましょう。
最初に最小値が一致するように上へグラフを移動します。
目的のグラフは最小値が 0.0、このグラフは -1.0 になっていますから、
上へ 1.0 移動させます。
そのために sin(X) に 1.0 を加算します。
これによって、縦軸の最小値が 0.0、最大値が 2.0 になりました。
sin(X) + 1.0 の図
つぎに、グラフの始まりが左へ 90 度ずれているので、右へ 90 ずらします。
そのために X から 90 を減算します。
sin(X - 90) + 1.0 の図
今度は、縦軸の最大値をそろえるために現在までに求めた式全体を 0.5 倍します。
0.5 * (sin(X - 90) + 1.0)
= 0.5 * sin(X - 90) + 0.5 の図
最後に、グラフの終りの値をそろえて求めるグラフとぴったり重なるグラフができ上がります。
このグラフは目的のグラフの 3 倍の周期なので X を 3 倍します。
0.5 * sin(3 * X - 90) + 0.5 の図
上のアニメーションを Maya 上で確かめるには以下のように実行します。