物体の振動
F=-q・x
となります。ここで、qはバネの強さです。おもりの加速度をαとすると、ニュートンの法則から


x(t+h) = x(t) + v(t)*h v(t+h) = v(t) + a(t)*h a(t+h) = a(t)-(q/m)x(t) + (p/m)・v(t)
Y=0; // 初期速度
X=1; //初期位置
double Dt=40.0;H = 1 /( Dt);//時間の刻み幅
for (int i = T0; i < TF; i++ ) {
g.drawOval(i+xofs, (int)(hh-X*dh),1,1 );
k1 = H * fnk( Y );
l1 = H * fnl(Y, X);
k2 = H * fnk(Y + l1 /2);
l2 = H * fnl((Y + l1 /2), (X + k1 /2));
k3 = H * fnk(Y + l2 /2);
l3 = H * fnl((Y + l2 /2), (X + k2 /2));
k4 = H * fnk(Y + l3);
l4 = H * fnl((Y + l3), (X + k3));
X += (k1 + 2 * k2 + 2 * k3 + k4)/6;
Y += (l1 + 2 * l2 + 2 * l3 + l4)/6;
}
public double fnk(double y) {
return ( y );
}
public double fnl(double y, double x) {
return ( -P*y-Q*x );
}
int w = getSize().width; int h = getSize().height;で、このウインドウのサイズを取得します。
P = scrP.getValue()/50.0; Q = scrQ.getValue()/2.0;で、パラメータを取り込み、数値の範囲を適正にするため、わり算をしています。