Box2Dでは、特定のボディの圧縮力を取得するにはどうすればよいですか?


8

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

Box2Dを使用しています。ご覧のとおり、互いに接続された3つの動的ボディがあります(正面から見ると、テーブルと考えてください)。LEG1とLEG2は静的ボディに接続されています(これは接地ボディです)。別の動的ボディがテーブルに落ちています。

LEG1とLEG2で別々に圧縮を取得する必要があります。

ジョイントにはGetReactionForce()を返す関数がありb2Vec、これはLength()LengthSqd()関数を持っています。これにより、取得した関節の力の合計が得られます。しかし、私が必要としているのは、関節とつながっている個々の体の力です。単一のジョイントで複数のボディを接続すると、役に立たない力の合計が再び表示されます。これが私が話しているケースです:

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


1
>>複数のボディを接続すると、1つのジョイントが接続できるボディは2つだけになります。各脚をテーブルプレートに接続すると、最初のケースに戻ります。私が間違っている?
Pavel

申し訳ありませんが、ジョイントが2つのボディのみを結合することを忘れていました。
Mikayil Abdullayev 2013

回答:


2

距離ジョイントと溶接ジョイントの両方にローカルアンカーがあります。各アンカーは、ジョイントで接続されたボディの1つを基準にしています。ワールドスペース内の2つのアンカーポイント間の距離を見つけることにより、個々の関節の圧縮を見つけることができます。

これらの関数を使用して、それらを取得できます。

joint->GetLocalAnchorA( );
joint->GetLocalAnchorB( );

これらのポイントをワールド空間に変換するには、次のように呼び出される各ボディの関数を使用できます。

body->GetWorldPoint( v ); // Get the world coordinates of a vector given the local coordinates.

溶接ジョイント(または距離ジョイント)はソフト拘束を使用する必要があります。そうしないと、エラーはほとんどとにかく無視できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.