2017-07-10 8 views
0

Je crée un polygone en forme de triangle en Box2D (C++) en utilisant le code suivant:Box2D (C++) zone à défaut de forme de triangle affirmer

b2FixtureDef fixtureDef; 
b2PolygonShape dynamicPolygon; 
b2Vec2 vertices[3]; 
vertices[0].Set(0, -1); 
vertices[1].Set(-1, 1); 
vertices[2].Set(1, 1); 
dynamicPolygon.Set(vertices, 3); 
fixtureDef.shape = &dynamicPolygon; 

Cependant, lors de l'exécution de ce code, j'obtenir cette erreur:

a.out: ./Box2D/Collision/Shapes/b2PolygonShape.cpp:127: b2Vec2 ComputeCentroid(const b2Vec2*, int32): Assertion `area > 1.19209289550781250000e-7F' failed. 

La zone semble être trop petite, cependant, les points devraient faire un triangle correct?

Des idées?

Répondre

0

je devais échanger les valeurs des sommets 1 et 2:

b2FixtureDef fixtureDef; 
b2PolygonShape dynamicPolygon; 
b2Vec2 vertices[3]; 
vertices[0].Set(0, -1); 
vertices[1].Set(1, 1); 
vertices[2].Set(-1, 1); 
dynamicPolygon.Set(vertices, 3); 
fixtureDef.shape = &dynamicPolygon; 

Cette option met les sommets pour le sens antihoraire fonctionne ...

+1

Probablement parce que la formule que vous utilisez pour calculer la zone dépend de l'ordre des sommets. Si nous ne voyons pas le code est difficile à dire, mais compte tenu du message d'erreur et comment vous l'avez résolu, il semble être la raison. – Jepessen

+1

Je pense que vous les aviez à l'origine dans le sens des aiguilles d'une montre, mais vous deviez les mettre dans le sens inverse des aiguilles d'une montre. C'est ainsi que box2d les attend. Dans le manuel d'utilisation: "Les sommets des polygones sont stockés avec un enroulement dans le sens inverse des aiguilles d'une montre ..." –

+0

@PeterR Mais je pensais qu'ils étaient * dans le sens antihoraire et maintenant dans le sens des aiguilles d'une montre ... –