Estoy usando el motor de física Box2D. Y hay un tipo de forma para box2D llamada b2PolygonShape.
En esta clase, puedes crear polígonos. También hay una función Set () que toma una matriz de puntos y un conteo de vértices.
Box2D tiene un ejemplo como este:
// 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);
Esto funciona. Sin embargo, cuando intenté practicar y jugar con esta función, hice esto:
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);
Cuando compilé y ejecuté esto, se bloqueó después de la función Set (). ¿No crearía esto un cuadrado?
También en la consola obtuve esto:
Assertion failed: s > 0.0f
¿Qué hice mal?
Puede determinar el devanado del polígono y luego invertirlo si es en sentido antihorario.
Un método común es calcular el área del polígono usando el algoritmo a continuación. Devolverá un número + ve para el devanado en sentido horario, y un número -ve para el devanado en sentido antihorario.
Aquí hay un ejemplo de Python:
fuente