#include <convex_triangulation.h> #include <orientation.h> // filters out degenerate triangles void appendResults(std::vector<Triangle> &results, const Triangle &t) { if (orientation(t) == Collinear) { return; } results.push_back(t); } std::vector<Triangle> convexTriangulation(const std::vector<Point> &points, int triangleId, std::shared_ptr<std::vector<int>> neighbours) { const int size = points.size(); if (size < 3) { return std::vector<Triangle>{}; } const Triangle t1 = Triangle(points[0], points[1], points[2], triangleId, neighbours); std::vector<Triangle> results; appendResults(results, t1); Point first = points[0]; for (int i = size - 1; i >= 3; i--) { const Triangle t = Triangle(first, points[2], points[i], triangleId, neighbours); appendResults(results, t); first = points[i]; } return results; }