三角関数 5 (三角関数の応用問題)

三角関数の応用問題 2

赤いライトが点滅するアニメーションを、三角関数によって表してみましょう。
赤色を表す値(アトリビュート)が 120 フレーム周期で 0.0 から 1.0 の間を行ったり来たりするとします。

0 フレーム目
[0 フレーム目]
60 フレーム目
[60 フレーム目]
120 フレーム目
[120 フレーム目]

このアニメーションは、0 フレーム目で 0.0、 60 フレーム目で 1.0、 120 フレーム目で 0.0 となり、後は 120 フレームの周期で同じ点滅をくり返します。
それをグラフで表すと、以下のようになります。

[ライト点滅のグラフ]

このグラフと形が同じグラフが sin または cos のグラフから見つかるでしょうか。
まず、sin のグラフを見てみます。
(このグラフは横軸が -360 から 360 の範囲のグラフであることに注意してください)

[sin の図]

このグラフの中で求めるグラフと同じ形をさがすと、 以下の部分が同じ形になっているのに気がつきます。

[sin の図]

2 つの図を 1 つにしてみましょう。 (sin のグラフ目的のグラフです)

[sin と目的の図]

後は、この sin のグラフを目的のグラフにピッタリ重なるように移動・スケールをかけてゆきます。
以下のグラフにおいては横軸・縦軸の最大値・最小値に注意してください。

移動・スケールどちらからやっても同じですが、ここでは移動から始めましょう。
最初に最小値が一致するように上へグラフを移動します。
目的のグラフは最小値が 0.0、このグラフは -1.0 になっていますから、 上へ 1.0 移動させます。
そのために sin(X) に 1.0 を加算します。
これによって、縦軸の最小値が 0.0、最大値が 2.0 になりました。

sin(X) + 1.0 の図

[sin(X) + 1.0 の図]

つぎに、グラフの始まりが左へ 90 度ずれているので、右へ 90 ずらします。
そのために X から 90 を減算します。

sin(X - 90) + 1.0 の図

[sin(X - 90) + 1.0 の図]

今度は、縦軸の最大値をそろえるために現在までに求めた式全体を 0.5 倍します。

0.5 * (sin(X - 90) + 1.0)
= 0.5 * sin(X - 90) + 0.5 の図

[0.5*sin(X - 90) + 0.5 の図]

最後に、グラフの終りの値をそろえて求めるグラフとぴったり重なるグラフができ上がります。
このグラフは目的のグラフの 3 倍の周期なので X を 3 倍します。

0.5 * sin(3 * X - 90) + 0.5 の図

[0.5*sin(3*X - 90) + 0.5 の図]

Maya 上でのアニメーション

上のアニメーションを Maya 上で確かめるには以下のように実行します。

  1. Polygon または NURBS の Sphere を作ります。
  2. 作った Sphere に Blinn などのシェーダーをアサインしておきます。
  3. そのシェーダーの Translucence アトリビュートの値を 1.0 に設定します。
  4. Point Light を作り、 Sphere の中に配置します。
  5. Expression Editor を開きます。
    (Channel Box からの場合)
    1. SHAPES にある pointLightShape1 の colorR を選択
    2. マウス右ボタンでポップアップメニューを開き、 Expressions... を選ぶ
  6. Expression Editor の Expression: に以下の式を書き込みます。
    colorR = 0.5 * sind(3 * frame + 90) + 0.5;
    上式で sin ではなく sind となっていることに注意してください。 なぜ sind を使う必要があるのかは、 前回の Maya 上での三角関数 を参照してください。
  7. Expression Editor の Create ボタンを押します。
    すると、エラーが無ければ以下のように colorR のフィールドの色が変化します。
    [colorR のフィールド]
  8. このシーンを適当なファイル名で保存して、バッチレンダリングすると colorR が 120 フレームの周期で 0.0 と 1.0 の間を変化するアニメーション画像ができあがります。
    アニメーション例 (360 フレーム)

参考


Prev
Home | Contents
Mail