No Box2D, como posso obter a força de compressão em um corpo específico?

8

insira a descrição da imagem aqui

Estou usando o Box2D. Como você pode ver, existem três corpos dinâmicos conectados um ao outro (pense nisso como uma tabela pela vista frontal). LEG1 e LEG2 estão conectados ao corpo estático (é o corpo do solo). Outro corpo dinâmico está caindo sobre a mesa.

Preciso obter a compressão no LEG1 e LEG2 separadamente.

As articulações têm uma GetReactionForce()função que retorna a b2Vec, que por sua vez possui Length()e LengthSqd()funciona. Isso fornecerá a soma total das forças em qualquer junta tomada. Mas o que eu preciso são forças em corpos individuais que estejam conectados com as articulações. Depois de conectar vários corpos com uma única junta, novamente mostrará a soma das forças que não são úteis. Aqui está o caso de que estou falando:

insira a descrição da imagem aqui

Mikayil Abdullayev
fonte
11
>> Depois de conectar vários corpos Uma junta pode conectar apenas dois corpos. Conecte cada perna ao prato da mesa e você receberá novamente o primeiro caso. Estou errado?
Pavel
Desculpe, esqueci que uma junta une apenas dois corpos.
Mikayil Abdullayev 01/03

Respostas:

2

Tanto a junta de distância como as juntas de solda têm âncoras locais dentro delas. Cada âncora é relativa a um dos corpos conectados pela junta. Você pode encontrar a compressão de uma articulação individual encontrando a distância entre os dois pontos de ancoragem no espaço do mundo.

Você pode usar estas funções para recuperá-las:

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

Para transformar esses pontos no espaço do mundo, você pode usar a função em cada corpo chamado:

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

As juntas de solda (ou juntas de distância) devem usar restrições suaves; caso contrário, o erro será praticamente insignificante.

RandyGaul
fonte