• ベストアンサー

倍の時間で同じ等加速度運動をするには?

速度を求める公式は「V = V0 + at」ですが、 で同じ運動をする場合、速度を求める場合はどのようになりますでしょうか? 具体的な話をしますと、 30FPSで動作しているゲームを60FPSに変更したいのですが、 その中で加速度運動が行われており、2フレームで同じ動作になるようにしなければならないのです。 毎フレーム以下のような処理が入ります。 速度' *= 減速補正値 速度' += 加速度 X座標' += 速度’

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

減速補正値なんてものが存在するようで、等加速度運動じゃないでしょう。 となるとまともな補間は面倒なので処理ルーチンを2フレームごとに回してください。 端数処理とかなんとかいろいろと元に合わせやすいですし。 ゲーム進行の補間ができる能力があれば、偶数フレームの初期値の設定など 軽いものでしょう。 (偶数フレーム速度初期値は「奇数フレーム初期値*SQRT(減速補正値)+0.5*加速度」、 偶数フレームX座標初期値は「奇数フレーム初期値+偶数フレーム速度初期値」くらいで よかろうかと) 処理ルーチンは適当に作ってくださいませ。計算用に速度変数とX座標変数を 追加してください。思いつかないようなら、あきらめた方が無難です。 ではでは、がんばって!

その他の回答 (2)

  • foomufoomu
  • ベストアンサー率36% (1018/2761)
回答No.3

>速度' *= 減速補正値 >速度' += 加速度 >X座標' += 速度’ この式は、いくつかの項が省略されています。 最初の「減速補正値」は、何の意味か分からないのでとばしますが、 フレーム間の時間をΔt、1フレームの間では等加速度で運動するものとすれば、  速度' = 速度 + 加速度 * Δt  X座標' = X座標 + 速度 * Δt + 1/2*加速度 * Δt^2 が正しい式です。 30FPS のときは Δt=1/30秒 で、質問に書かれた式では、これを1として処理していることになります。 したがって、60FPSでは Δt=1/60秒 になるように式を直せばよいです。 30FPSでも、X座標の計算に加速度の項を入れれば、ずっと動きが自然になるはずです。

  • trytobe
  • ベストアンサー率36% (3457/9591)
回答No.1

「2フレームで同じ動作になる」のは、本当は、毎秒30フレームのままでないと再現になりません。つまり、毎秒60フレームにしても、2フレームは同じものを表示して、次の2フレームに移らないと、等しくないのです。 それを、あえて2フレームかけて中間の位置に存在させる・中間の速度で移動するフレームを作成するとなると、「元は存在しなかった衝突判定」が生じることで、必ずしも再現されたとはいえず、「別ゲーム」となる覚悟が必要です。 その前提で、毎秒30フレームのときの加速度aを半分にして、毎秒60フレームのときに1フレームごとにa/2、次の1フレームで残りa/2、と速度に加算していけば疑似的には実現できます。しかし、これは、「等加速度運動である」という大前提での補間処理である点は忘れないようになさってください。

関連するQ&A