Ich benutze die Box2D-Physik-Engine. Und es gibt eine Form für box2D namens b2PolygonShape.
In dieser Klasse können Sie Polygone erstellen. Es gibt auch eine Set () - Funktion, die ein Array von Punkten und eine Scheitelpunktanzahl verwendet.
Box2D hat ein Beispiel wie dieses:
// 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);
Das funktioniert. Als ich jedoch versuchte, diese Funktion zu üben und zu spielen, tat ich Folgendes:
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);
Als ich dies kompilierte und ausführte, stürzte es nach der Set () - Funktion ab. Würde dies nicht ein Quadrat schaffen?
Auch in der Konsole habe ich folgendes bekommen:
Assertion failed: s > 0.0f
Was habe ich falsch gemacht?
Sie können die Wicklung des Polygons bestimmen und dann umkehren, wenn es gegen den Uhrzeigersinn ist.
Eine übliche Methode besteht darin, die Fläche des Polygons mit dem folgenden Algorithmus zu berechnen. Es wird eine + ve Nummer für das Wickeln im Uhrzeigersinn und eine -ve Nummer für das Wickeln gegen den Uhrzeigersinn zurückgegeben.
Hier ist ein Python-Beispiel:
quelle