Używam silnika fizyki Box2D. Istnieje także rodzaj kształtu dla box2D o nazwie b2PolygonShape.
W tej klasie możesz tworzyć wielokąty. Istnieje również funkcja Set (), która pobiera tablicę punktów i liczbę wierzchołków.
Box2D ma taki przykład:
// 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);
To działa. Jednak kiedy próbowałem ćwiczyć i zadzierać z tą funkcją, zrobiłem to:
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);
Kiedy skompilowałem i uruchomiłem to, zawiesił się po funkcji Set (). Czy to nie stworzy kwadratu?
Również w konsoli mam to:
Assertion failed: s > 0.0f
Co zrobiłem źle?
Możesz określić uzwojenie wielokąta, a następnie odwrócić je, jeśli jest przeciwnie do ruchu wskazówek zegara.
Jedną z powszechnych metod jest obliczanie powierzchni wielokąta za pomocą poniższego algorytmu. Zwróci liczbę + ve dla uzwojenia zgodnie z ruchem wskazówek zegara, i liczbę -ve dla uzwojenia przeciwnego do ruchu wskazówek zegara.
Oto przykład w języku Python:
źródło