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