En Box2D, ¿cómo puedo obtener la fuerza de compresión en un cuerpo específico?


8

ingrese la descripción de la imagen aquí

Estoy usando Box2D. Como puede ver, hay tres cuerpos dinámicos conectados entre sí (considérelo como una tabla desde la vista frontal). LEG1 y LEG2 están conectados al cuerpo estático (es el cuerpo de tierra). Otro cuerpo dinámico está cayendo sobre la mesa.

Necesito obtener la compresión en LEG1 y LEG2 por separado.

Las articulaciones tienen una GetReactionForce()función que devuelve a b2Vec, que a su vez tiene Length()y LengthSqd()funciones. Esto dará la suma total de las fuerzas en cualquier articulación tomada. Pero lo que necesito son fuerzas en los cuerpos individuales que están conectados con las articulaciones. Una vez que conecta varios cuerpos con una sola articulación, nuevamente mostrará la suma de fuerzas que no es útil. Este es el caso del que estoy hablando:

ingrese la descripción de la imagen aquí


1
>> Una vez que conecta varios cuerpos Una junta puede conectar solo dos cuerpos. Conecte cada pata a la placa de la mesa y obtendrá nuevamente el primer caso. ¿Me equivoco?
Pavel

Lo siento, solo olvidé que una articulación une solo dos cuerpos.
Mikayil Abdullayev

Respuestas:


2

Tanto la junta de distancia como las juntas de soldadura tienen anclajes locales dentro de ellas. Cada ancla es relativa a uno de los cuerpos conectados por la articulación. Puede encontrar su compresión de una articulación individual al encontrar la distancia entre los dos puntos de anclaje en el espacio mundial.

Puede usar estas funciones para recuperarlas:

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

Para transformar estos puntos en el espacio mundial, puede usar la función en cada cuerpo llamada:

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

Las juntas de soldadura (o juntas de distancia) deben usar restricciones suaves, de lo contrario el error será en su mayor parte insignificante de todos modos.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.