0

私はbox2dを学び理解するのに苦労しています。これが私の問題です:

私はシンプルな車を作ろうとしています。今のところ、車体は次のようになっています。

ここに画像の説明を入力してください

ここで、ホイールを追加しようとしています。ホイールボディを作成し、b2RevolutionJointを使用してホイールを車体にリンクすると仮定します。

その部分に到達するまでは、ホイールをその場所に配置できるようにしたいので、bodyCarBodyとの関係で。これを正しく行うにはどうすればよいですか?

私がオンラインで見たものは次のようなものです:

bodyDef2.position.Set(axle2->GetWorldCenter().x + 1.3*cos(-M_PI/3), axle2->GetWorldCenter().y + 0.3*sin(-M_PI/3));

しかし、私はその表現のcosとsinの部分を理解していません。

私がやろうとしていることはこれです:

backWheelDef.position = b2Vec2(carBody->GetWorldCenter().x - 20.0/PTM_RATIO,carBody->GetWorldCenter().y);

私のcarBody頂点の定義は次のようになっているので、次のようになります。

b2Vec2 vertices[] = {
        b2Vec2(100.0/PTM_RATIO,15.0/PTM_RATIO),
        b2Vec2(100.0/PTM_RATIO,30.0/PTM_RATIO),
        b2Vec2(50.0/PTM_RATIO,65.0/PTM_RATIO),
        b2Vec2(20.0/PTM_RATIO,65.0/PTM_RATIO),
        b2Vec2(0.0/PTM_RATIO,45.0/PTM_RATIO),
        b2Vec2(0.0/PTM_RATIO,15.0/PTM_RATIO)

    };

ホイールを配置する上記の方法の結果は、どういうわけか正しいように見えます(下のスクリーンショットを参照)が、上記の数値を見ると、あまり意味がありません。

carBodyの幅は1000.0/PTM_RATIOなので、GetWorldCenter()。xは50.0/PTM_RATIOに等しい値を返すと思います。

つまり、ホイールの位置は30.0 / PTM_RATIOで計算した後ですよね?

下の結果を見ると、ホイールxの位置は20.0/PTM_RATIOのようです。

ここに画像の説明を入力してください

Box2Dで他のボディとの関係でポジショニングボディがどのように機能するかを誰かに説明してもらえますか?このようなことを明確にしたら、ジョイントを使用してそれらをリンクすることに移ります。

本当にありがとう!

iforce2dの回答に基づく後の編集:

答えてくれてありがとうiforce2dとbox2dの世界であなたが提供するすべての良い洞察に感謝します。あなたが言っていることは完全に真実ですが、これは私の質問ではありませんでした。

GetWorldCenterが重心を返し、GetPositionがオブジェクトの位置の原点を返すことがわかったら、carBodyとの関係で必要な場所にホイールを正確に配置するのは簡単でした。体の下に現れる動作はまだありますが、方程式に関節を追加すると、これは修正されることがわかりました。

今、私はこのポジショニングの問題に何らかの形で関連している別の質問があります。下の画像を見てください:

ここに画像の説明を入力してください

アンカーポイントを以下のように設定すると、これは私の関節がどのように見えるべきか正しいですか?それらがanchorPointAからanchorPointBに移動するのではなく、原点から移動することに少し混乱しています

再度、感謝します!

4

1 に答える 1

2

まず、ホイールを車体の内側に配置するため、最初の2つまたは3つのタイムステップで、2つの車体が移動してオーバーラップを修正します。おそらく非常に速く発生するため、表示されませんが、はっきりとした兆候があります。つまり、ホイールが車の端に正確に配置され、車体が少し回転しています。

シミュレーションを一時停止すると(Stepを呼び出さないでください)、期待する場所にボディが表示されます。

ジョイントを追加すると、デフォルトの動作では、結合された2つのボディが互いに衝突しないため、この問題は発生しません。

于 2012-11-25T21:01:28.060 に答える