1

私がやろうとしているのは、Visual Studio を使用して Visual Basic で発射体の動きをシミュレートすることです。基本的にはこのようなものですが、空気抵抗や質量はありません。

とにかく、私がやっている方法は、PictureBox を使用し、間隔 1 のタイマーを使用して (たとえば、円の) 画像を頻繁に描画することです。その x および y プロパティは、式によって計算される変数です。

例のような動きを得るために、x と y に割り当てるために使用できる式を知りたいです。ウィキペディアや他のサイトの助けを借りて、たくさんのことを試しましたが、うまくいかないようです. ありがとう!

4

4 に答える 4

3

貴重なクロックサイクルを最小限に抑えるための最も簡単な例を次に示します。

// Initialization
x = 0; // x position
y = 0; // y position
xi = 0.1; // x incremental value (velocity)
yi = 0.1; // y incremental value (velocity)

// Rendering loop
x += xi;
y += yi;
yi -= 0.01; // decrement by arbitrary value to simulate gravity

アイデアは、増分変数 xi と yi を使用し、それらに対してすべての力を実行することです。数字を微調整して、探している効果を得ることができます。さらに一歩進めたい場合は、反復ごとに乗数を使用して増分変数を調整することで、摩擦や空気抵抗を簡単に適用できます。

これは、私がパーティクル エンジンなどで何度も使用してきた基本的な方法です。トリガー関数の呼び出しを行っていないため、非常に高速であるという利点があり、大きな粒子エンジンにうまくスケーリングします。

アップデート:

ここに地球の重力の公式からの数値を使用したこの方法の例があります: http://www.forums.evilmana.com/game-programming-theory/euler-vs-verlet-vs-rk4-physics/?wap2

-9.8 の値と timestep 変数を使用しても、コードは単純です。私のコードは、可能な限り単純なものに最適化されています。

于 2010-02-08T23:11:10.017 に答える
1

発射速度 V、発射角度 a ラジアン、重力 g、時間 t を仮定します。

x = V * cos(a) * t + g * t * t / 2
y = V * sin(a) * t - g * t * t / 2

背景情報はこちら。

于 2010-02-08T23:05:03.063 に答える
0

X を設定 = 発射からの合計時間

Y = -0.5 * A * X*X + V * X + 初期高さ

A = 必要な加速。地球の加速度 (すなわち重力) は約 1 秒です。9.8 メートル/秒の平方。

V = 上方向の初速度

この例では InitialHeight はゼロですが、必要に応じてより高く開始することもできます。

編集:

もう1つの投稿の状態

x = V * cos(a) * t + g * t * t / 2

y = V * sin(a) * t - g * t * t / 2

これは基本的に同じ式ですが、オプションの + InitialHeight パラメーターが省略されています。

私の声明「上方向の速度」は、彼の式の V (全速度) * sin(a) と同じです。

簡単にするために X を t (時間) と同一視しましたが、x = V * cos(a) を使用すると、時間を物理的な距離にマッピングできます。私の単純化では、X 軸上にある単位を正確に気にする必要はないと仮定しました (これは有効な仮定である場合とそうでない場合があります)。

于 2010-02-08T23:04:48.307 に答える
0

MS-DOS 5 に最初に含まれていた「ゴリラ」ゲームの QuickBasicソース コードを見ることができます。投げられたバナナの動きを正確に説明する方法でアニメーション化するために、重力を考慮しました。

私の知る限り、Basic 言語の数学部分は当時から変わっていません。

于 2010-02-09T17:58:19.723 に答える