2012-11-25 4 views
0

J'ai du mal à apprendre et à comprendre box2d. Voici mon problème:Avoir des problèmes de compréhension du positionnement du corps dans Box2d. Des conseils sur la façon dont les choses fonctionnent?

Je suis en train de faire une voiture simple, le corps de la voiture ressemble à ceci pour l'instant:

enter image description here

Maintenant, je suis en train d'ajouter une roue, je crée la corps de la roue et je suppose que je vais lier la roue à la carrosserie de la voiture en utilisant un b2RevolutionJoint. Jusqu'à ce que j'arrive à cette partie, je veux juste être en mesure de positionner la roue à sa place, donc par rapport au BodyCar Body. Comment est-ce que je fais cela correctement?

Ce que j'ai vu en ligne est quelque chose comme ceci:

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

Cependant, je ne comprends pas les cos et parties du péché de cette expression.

Ce que je suis en train de faire est la suivante:

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

Depuis mon Carrosseries sommets définition ressemble à ceci:

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) 

    }; 

Le résultat de la manière ci-dessus de positionnement de la roue semble en quelque sorte correct (voir capture d'écran ci-dessous) mais si vous regardez les chiffres ci-dessus, cela n'a pas beaucoup de sens.

Étant donné que la largeur carBody est 100.0/PTM_RATIO, je suppose que GetWorldCenter(). X renvoie une valeur égale à 50.0/PTM_RATIO.

Donc la position de la roue serait après le calcul à 30.0/PTM_RATIO, n'est-ce pas? Eh bien, si vous regardez le résultat sous la roue x le positionnement semble être à 20,0/PTM_RATIO.

enter image description here

Quelqu'un peut-il s'il vous plaît expliquer comment les choses fonctionnent avec les organes de positionnement par rapport aux autres corps travaille dans Box2D? Une fois que je suis clair avec ce genre de choses, je vais passer à les relier en utilisant des joints

Merci beaucoup!

PLUS TARD MODIFIER SUR LA BASE DE RÉPONSE iforce2d:

Merci iforce2d pour répondre et merci pour tout le bien aperçu que vous fournissez dans le monde box2d. Ce que vous dites est parfaitement vrai, mais ce n'était pas ma question. Une fois que j'ai compris que GetWorldCenter renvoie le centre de gravité et que GetPosition renvoie l'origine de la position de l'objet, il était facile de placer ma roue exactement là où j'avais besoin d'être en relation avec le carBody. Même si j'ai toujours le comportement de ce qui apparaît sous le corps, je savais que ce serait corrigé une fois que j'ajouterais des articulations dans l'équation.

Maintenant, j'ai une autre question qui concerne en quelque sorte ce problème de positionnement.Jetez un oeil à l'image ci-dessous:

enter image description here

Est-ce la bonne façon mes articulations doivent regarder une fois que je mets les points d'ancrage comme ci-dessous? Je suis un peu confus par eux allant de l'origine au lieu d'eux allant de anchorPointA à anchorPointB

Merci encore!

Répondre

2

Vous placez la roue à l'intérieur de la carrosserie de la voiture pour commencer, donc dans les deux ou trois premiers pas de temps, les deux corps se déplaceront pour corriger le chevauchement. Cela arrive probablement si vite que vous ne le voyez pas, mais les signes révélateurs sont là, à savoir que la roue est positionnée exactement au bord de la voiture, et que la carrosserie de la voiture tourne un tout petit peu.

Si vous mettez la simulation en pause (n'appelez pas Step), vous devriez voir les corps où vous vous attendez à les voir. Une fois que vous avez ajouté l'articulation, le comportement par défaut est que les deux corps joints ne doivent pas entrer en collision les uns avec les autres. Vous ne verrez donc pas ce problème.

+0

Salut, pouvez-vous s'il vous plaît jeter un oeil à ma dernière édition dans ma question et me guider avec ça? Merci! –

+0

Le débogage dessine une ligne entre les positions du corps (pas le centre de masse, qui est ce que sont les petits axes rouges et verts), donc cela semble correct. Si elle trace une ligne entre les positions d'ancrage, vous ne verrez rien car les positions des ancres sont au même endroit (au moins pour un joint rotatif). – iforce2d

+0

Super, merci. Je vais marquer cette réponse comme correcte –

Questions connexes