diff --git a/src/utilities/convex_triangulation.cpp b/src/utilities/convex_triangulation.cpp
index 5dd8ca969da7cbe75ec85c2cde12d2f9e2bae99e..0ff1a483c63531e6edffad392f6dded216f1a98d 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;
 
 }
+