This is a polygon decomposer using the Bayazit algorithm. It is ported from the Farseer Physics C# code base into a single-header file library.
Exmaple usage:
Bayazit::Polygon poly; poly.push_back(Bayazit::Point(20, -30)); poly.push_back(Bayazit::Point(10, -10)); poly.push_back(Bayazit::Point(30, -20)); poly.push_back(Bayazit::Point(30, 20)); poly.push_back(Bayazit::Point(10, 10)); poly.push_back(Bayazit::Point(20, 30)); poly.push_back(Bayazit::Point(-20, 30)); poly.push_back(Bayazit::Point(-10, 10)); poly.push_back(Bayazit::Point(-30, 20)); poly.push_back(Bayazit::Point(-30, -20)); poly.push_back(Bayazit::Point(-10, -10)); poly.push_back(Bayazit::Point(-20, -30)); Bayazit::Decomposer dec; auto polys = dec.Decompose(poly); for (auto p : polys) { printf("poly: (%d points)\n", p.size()); for (auto v : p) printf(" %f %f\n", v.x, v.y); }