ばね運動をActionScriptで利用する際の覚書。
ばね運動は、加速度が距離に比例する運動。
ばねの力はフックの定理により表すことができる。
F = k•x k[N/m]:ばね定数, x[m]:自然長からの伸び ばね定数は、ばねが1m伸びたときに復元しようとする力。
フックの定理と運動方程式から、ばね運動では加速度がばねの自然長からの伸び(l)に比例することがわかる。
m•a = k•l a = (k·l) / m 質量m=1とすれば a = k·l
自然長までの伸び(x)が短くなるに従って加速度は減少する。
x=0 ⇒ 加速度は0。
x<0 ⇒ 加速度の向きが反転(マイナス)。
ActionScriptはΔtを1フレームと考える。また質量は1とする。
Δtは1より Δv/Δt = vn+1-vn = a vn+1 = vn + a = vn + (k•l)/m m=1より vn+1 = vn + k·l ActionScriptコード // ばねの長さ var l = target._x - mc._x; v += k*l; mc._x += v;
摩擦がない場合は、運動を繰り返す。
摩擦がある場合。
/*
function Spring(x, y)
{
this._x = x;
this._y = y;
// 支点
var targetX:Number = Stage.width / 2;
// ばね定数
var spring:Number = 0.05;
// 速度
var vx:Number = 0;
// 摩擦(0
var friction:Number = 0.95;
// イベントハンドラ
this.onEnterFrame = function()
{
// ばね運動
var dx:Number = targetX - this._x;
var a:Number = dx * spring;
vx += a;
vx *= friction;
ball._x += vx;
};
}
var o = new Spring(Stage.width/ 2 + 100, 100);
var ball = _root.attachMovie('ball', 'ball', _root.getNextHighestDepth(), o);
No comments yet.
改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。