0

高さが 600 ピクセルで、それぞれ 50 ピクセル x 50 ピクセルの 12 個のボックスがあるビューがあります。ユーザーがクリックすると、重力に基づいて落下するボールを作成しました。私は物理学のデモンストレーションのためにこれを行っており、可能な限り正確にしようとしています。現在、私が取り組んでいるスケールでは、4 つのボックス (または 200 ピクセル) を 1 メートルとして使用しています。「y」位置を計算するメソッドは、毎秒 50 回 (50 fps) 呼び出されます。このコードを使用してプログラムを実行しようとすると、かなりの時間オフになります。

これは、位置を更新するために呼び出しているメソッドです。

public double calcY()
{
    velocity += acceleration*200/2500;
    return(getY()-velocity);
}

メートルをピクセルに変換するために 200 を掛けています。毎秒 50 回呼び出されるため、2500 で割ると、(50)^2 は 2500 になります。

今のところ、それほどずれていません。助けてくれてありがとう。

4

2 に答える 2

2

計算が固定フレーム レートに結び付けられることはありません。有効期限が切れたリアルタイムを測定してください。FPS は、制御できない要因によって大きく変動する可能性があります。

System.currentTimeMillis() を使用して、calcY() への呼び出し間の有効期限を追跡できます。これは、2 つの呼び出し間で数ミリ秒ずれている可能性がありますが、複数の呼び出しではかなり正確です。

また、前回確認した落下加速度は 1 メートル/秒ではなく、9.81 m/s でした。したがって、計算された加速度は 9.81 倍ずれているようです。

編集:あなたの式をもう一度見てみると、私には意味がありません。

于 2013-10-29T18:06:23.540 に答える
0

運動の運動方程式から始める必要があります。

x = x0 + v0*t + 1/2*a*t^2

加速度×時間の二乗は、位置の単位を持っています。ここで、t は絶対時間です。フレームごとに位置時間を計算する場合。

v = v0 + a*dt
x = x0 + v0*dt + 1/2*a*dt^2

ここでは毎回、最終的な位置と速度を計算し、それを次のフレームの初期位置と速度として使用します。

于 2013-10-29T18:11:45.597 に答える