J'utilise le moteur physique Box2D. Et il existe un type de forme pour box2D appelé b2PolygonShape.
Dans cette classe, vous pouvez créer des polygones. Il existe également une fonction Set () qui prend un tableau de points et un nombre de sommets.
Box2D a un exemple comme celui-ci:
// This defines a triangle in CCW order.
b2Vec2 vertices[3];
vertices[0].Set(0.0f, 0.0f);
vertices[1].Set(1.0f, 0.0f);
vertices[2].Set(0.0f, 1.0f);
int32 count = 3;
b2PolygonShape polygon;
polygon.Set(vertices, count);
Cela marche. Pourtant, quand j'ai essayé de pratiquer et de jouer avec cette fonction, j'ai fait ceci:
b2Vec2 vertices[4];
vertices[0].Set(0, 0);
vertices[1].Set(0,10);
vertices[2].Set(10,10);
vertices[3].Set(10,0);
int32 count = 4;
b2PolygonShape polygon;
polygon.Set(vertices, count);
Lorsque j'ai compilé et exécuté cela, il s'est écrasé après la fonction Set (). Cela ne créerait-il pas un carré?
Aussi dans la console, j'ai obtenu ceci:
Assertion failed: s > 0.0f
Qu'ai-je fait de mal?
Vous pouvez déterminer l'enroulement du polygone, puis l'inverser s'il est dans le sens inverse des aiguilles d'une montre.
Une méthode courante consiste à calculer l'aire du polygone à l'aide de l'algorithme ci-dessous. Il renverra un nombre + ve pour le remontage dans le sens horaire et un nombre -ve pour le remontage dans le sens inverse des aiguilles d'une montre.
Voici un exemple Python:
la source