Estou usando o mecanismo de física Box2D. E há um tipo de forma para box2D chamado b2PolygonShape.
Nesta classe, você pode criar polígonos. Há também uma função Set () que recebe uma matriz de pontos e uma contagem de vértices.
Box2D tem um exemplo 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);
Isso funciona. No entanto, quando tentei praticar e mexer com essa função, fiz o seguinte:
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);
Quando eu compilei e executei isso, ele travou após a função Set (). Isso não criaria um quadrado?
Também no console eu consegui isso:
Assertion failed: s > 0.0f
O que eu fiz errado?
Você pode determinar o enrolamento do polígono e, em seguida, inverter se estiver no sentido anti-horário.
Um método comum é calcular a área do polígono usando o algoritmo abaixo. Ele retornará um número + ve para o enrolamento no sentido horário e um número -ve para o enrolamento no sentido anti-horário.
Aqui está um exemplo de Python:
fonte