In Box2D, come posso ottenere la forza di compressione su un corpo specifico?


8

inserisci qui la descrizione dell'immagine

Sto usando Box2D. Come puoi vedere, ci sono tre corpi dinamici collegati tra loro (pensalo come una tabella dalla vista frontale). LEG1 e LEG2 sono collegati al corpo statico (è il corpo di terra). Un altro corpo dinamico sta cadendo sul tavolo.

Devo ottenere la compressione in LEG1 e LEG2 separatamente.

I giunti hanno una GetReactionForce()funzione che restituisce a b2Vec, che a sua volta ha Length()e LengthSqd()funzioni. Ciò fornirà la somma totale delle forze in qualsiasi giunto preso. Ma ciò di cui ho bisogno sono le forze nei singoli corpi che sono collegate alle articolazioni. Una volta collegati più corpi con una singola articolazione, mostrerà nuovamente la somma delle forze che non è utile. Ecco il caso di cui sto parlando:

inserisci qui la descrizione dell'immagine


1
>> Dopo aver collegato più corpi Un giunto può collegare solo due corpi. Collega ogni gamba alla piastra del tavolo e otterrai di nuovo il primo caso. Ho sbagliato?
Pavel,

Scusa, ho appena dimenticato che un'articolazione unisce solo due corpi.
Mikayil Abdullayev

Risposte:


2

Sia il giunto a distanza che i giunti di saldatura hanno al loro interno ancore locali. Ciascuna ancora è relativa a uno dei corpi collegati dall'articolazione. Puoi trovare la compressione di una singola articolazione trovando la distanza tra i due punti di ancoraggio nello spazio mondiale.

È possibile utilizzare queste funzioni per recuperarle:

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

Per trasformare questi punti nello spazio mondiale puoi usare la funzione su ogni corpo chiamato:

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

I giunti di saldatura (o giunti di distanza) dovrebbero usare vincoli morbidi, altrimenti l'errore sarà comunque trascurabile.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.