Saya menggunakan mesin fisika Box2D. Dan ada jenis bentuk untuk box2D disebut b2PolygonShape.
Di kelas ini, Anda bisa membuat poligon. Ada juga fungsi Set () yang mengambil array titik dan jumlah titik.
Box2D memiliki contoh seperti ini:
// 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);
Ini bekerja. Namun ketika saya mencoba untuk berlatih dan mengacaukan fungsi ini, saya melakukan ini:
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);
Ketika saya mengkompilasi dan menjalankan ini, crash setelah fungsi Set (). Bukankah ini akan membuat kotak?
Juga di konsol saya mendapatkan ini:
Assertion failed: s > 0.0f
Apa kesalahan yang telah aku perbuat?
Anda bisa menentukan belitan poligon, dan kemudian membalikkannya jika berlawanan arah jarum jam.
Salah satu metode umum adalah menghitung luas poligon menggunakan algoritma di bawah ini. Ini akan mengembalikan nomor + ve untuk belitan searah jarum jam, dan nomor -ve untuk belitan berlawanan arah jarum jam.
Berikut ini adalah contoh Python:
sumber