ばね1 : ActionScript

Pocket

ばね運動を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.

コメントの投稿

改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。