From 36719758be286a14708c4d095fb9c3e819447711 Mon Sep 17 00:00:00 2001 From: Brandon Lai-Cheong <blaicheo@uwaterloo.ca> Date: Thu, 28 Nov 2024 13:34:57 -0500 Subject: [PATCH] filters out degenerate triangle creation --- src/utilities/convex_triangulation.cpp | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/utilities/convex_triangulation.cpp b/src/utilities/convex_triangulation.cpp index 5dd8ca9..0ff1a48 100644 --- a/src/utilities/convex_triangulation.cpp +++ b/src/utilities/convex_triangulation.cpp @@ -1,4 +1,13 @@ #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) { const int size = points.size(); @@ -7,14 +16,19 @@ std::vector<Triangle> convexTriangulation(const std::vector<Point> &points, int } const Triangle t1 = Triangle(points[0], points[1], points[2], triangleId); - std::vector<Triangle> results = {t1}; + std::vector<Triangle> results; + + appendResults(results, t1); Point first = points[0]; for (int i = size - 1; i >= 3; i--) { - results.push_back(Triangle(first, points[2], points[i], triangleId)); + const Triangle t = Triangle(first, points[2], points[i], triangleId); + appendResults(results, t); + first = points[i]; } return results; } + -- GitLab