0

ターゲットを攻撃するために剛体にインパルスを適用できる Ai を少し実装する必要があります。大砲から発射される砲弾のように。物理エンジンには Chipmunk Dynamics を使用しています。

私の物理学と同様に、私の数学はひどいですが、私は読んでいて、SO とこのウィキペディアのエントリからの以下の助けを借りて、これを得ました

float x = target.x = launchPos.x;
float y = target.y = launchPos.y;
float g = 9.8;
float v = 100;
float angle1, angle2;

float tmp = pow(v, 4) - g * (g * pow(x, 2) + 2 * y * pow(v, 2));

if(tmp < 0){
NSLog(@"No Firing Solution");
}else{
angle1 = atan2(pow(v, 2) + sqrt(tmp), g * x);
angle2 = atan2(pow(v, 2) - sqrt(tmp), g * x);
}

// Split the velocities
float vVel = v * sin(angle2);
//NSLog(@"Vertical Velocity: %f", vVel);

float hVel = v / cos(angle2);
//NSLog(@"Horizontal Velocity: %f", hVel);

CGPoint force = cpv(hVel, vVel);

これにより、発射体を発射するために必要な水平速度と垂直速度を計算できる角度が得られます。

しかし、それは機能していません。これは、いくつかの理由でまったく驚くことではありません。第一に、私は数学と物理が苦手だからですが、他にもいくつかのことで混乱しているからです。

  1. この方法は質量を考慮していないようです。それはすべきですか?私はそれが非常に重要だと思ったでしょうか?でも、大学で美術を勉強したので、それは間違っているかもしれません。

  2. Box2d には PTM_RATIO がありますが、シマリスにはそのようなものはありません。私の値はシマリスの空間座標にどのように対応していますか?

  3. 私はラジアンと、それらが度にどのように異なるか、および2つの間の変換方法を知っています。しかし、ここではどちらを使用する必要がありますか? angle1 と angle2 を度に変換する必要がありますか? やったとしても、まだうまくいきません。

要約すると、物理学とシマリスについて、私には理解できないことがたくさんあります。だから私はここにいて、助けを求めています。

シマリスにこれを理解するために使用できるものはありますか、または誰かがこれを自分で理解する必要がある場合は、助けていただければ幸いです。

4

2 に答える 2

1

1つには、水平速度は次のようにする必要があると思います。

float hVel = v * cos(angle2);

また、質量を考慮する必要があるというあなたの意見は正しいです。力のベクトルを速度から直接導出しているように見えますが、それは正しくありません。

シマリスを使ったことはありませんが、オブジェクトに速度を直接適用することはできないと思いますか? オブジェクトを特定の速度に加速する力を適用する必要があります。力の方程式は単純です。

F = ma

この発射体をゼロ速度から v まで加速しているため、加速度は v に等しくなります。ただし、必要な正しい力を得るには、この加速度にオブジェクトの質量を掛ける必要があります。

CGPoint force = cpv(hVel, vVel) * projectileMass;
于 2010-01-05T19:09:01.523 に答える
0

Ok。問題は (v*cos(angle) のタイプミスに加えて) 力と衝動を混同していることです。

角度で力を適用しても、オブジェクトの速度が必要な角度と大きさになるわけではありません。次のいずれかを行う必要があります。

  • cpBodySetVel(cpBody *body, cpFloat Vel)セッターを使用して速度を手動で変更することにより、速度を必要な速度に 設定します。または
  • 初速度を 0 と仮定して、物体に衝撃を与えます。

いくら強調してもしきれませんが、フォースはインパルスと同じではありません。

  • オブジェクトに一定の力を加えた場合、速度は 0 速度から無限速度まで時間とともに連続的に変化します...まったく望み通りにはなりません。
  • オブジェクトに 1 回限りのインパルスを適用すると、速度は v0 から v0+インパルス/質量に即座に変化します。

シマリスはインパルスを適用できないと思います。しかし、力をアルゴリズムの時間ステップで割り、1 つの時間ステップに力を適用し、その後力を除去することで、インパルスをシミュレートできる可能性があります。しかし、セッターを使用して速度を設定することに固執する方がおそらく良いでしょう。

ターゲットに到達するために体に一定の力を加える必要がある場合、方程式はウィキペディアで見つけたものではありません。

于 2010-02-04T04:22:51.847 に答える