yoppa.org


人工言語入門 A 2010

Processingによる高度なモーション:バネの動きを作る

今日の内容

  • 高度なアニメーション表現を身につける
  • 物理法則を用いたアニメーションの表現
    • ばね
    • 万有引力

「ばね」を定義する

「ばね」を数学的に定義する

  • 「ばね」を数学的に定義する
  • フックの法則
    • バネの伸びが x のとき、それによって生じる力を F とすると
    • F = -kx ( k:ばね定数)


「ばね」の公式

  • フックの定理は以下のように書き直すことができる
    • springForce = -stiffness * stretch
    • バネの力 = -バネの硬さ x バネの伸び
  • さらに「バネの伸び」の部分を解釈する
    • springForce = -stiffness * (position – restPosition)
    • バネの力 = -バネの硬さ x (現在位置 – ばねの静止位置)
  • 式を整理
    • springForce = stiffness * (restPositon – position)
    • バネの力 = バネの硬さ x (静止位置 – 現在位置)
  • この時、ばねの移動速度は下記のように表現される
    • velocity = friction * (velocity + springFroce)
    • 速度 = 摩擦 * (速度 + バネの力)
  • この式を利用して、簡単なアニメーションをProcessingで作成してみる

ばね1:シンプルな「ばね」

  • 「ばね」の公式(フックの法則)を利用して、シンプルな「ばね」の動きをプログラミングしてみる

ばね2:重さ(mass)を付加

  • もうひとつの要素を付加する – バネに付いている物体の重さ(mass)
  • 重さと力の関係はニュートンの運動の第二法則から導きだされる
    • F = ma
    • F:力、m:質量、a:加速度
  • 式を変換
    • a = F / m
  • これを「ばね」にあてはめると、下記のように解釈できる
    • acceleration = springForce / mass
    • 加速 = バネの力 / 重さ
  • 先程のプログラムに重さの要素を付加する
  • 重さの概念を追加した「ばね」

ばね3:2次元座標に展開、重力を付加

  • Y軸方向だけでなくX軸方向にも動けるように
    • 重力(gravity)の要素も付加
    • 常に一定の力をY軸方向に付加する

ばね4:「ばね」をクラスとして定義する

  • ばねの動きを汎用的に使えるようにクラスとして定義する
    • Spring2Dクラス
  • メインプログラム

  • 「ばね」を定義するクラス:Spring2D

ばね5:ばねを数珠繋ぎにしてみる

  • Spring2Dクラスで定義した「ばね」を直列に繋いでいく