From 467da18e232b51b85b002ecaae8165fbdb1eb556 Mon Sep 17 00:00:00 2001
From: bobarna <barnabas.borcsok@gmail.com>
Date: Sat, 4 Apr 2020 17:24:49 +0200
Subject: [PATCH] Sasd

---
 sirius.cpp | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/sirius.cpp b/sirius.cpp
index edc4779..d61daa6 100644
--- a/sirius.cpp
+++ b/sirius.cpp
@@ -216,16 +216,15 @@ class Triangulated : public Drawable {
 
 public:
   explicit Triangulated(std::vector<vec2> points) {
-    remainingVertices = points;
+    remainingVertices = std::move(points);
     vertices.reserve(remainingVertices.size() * 3);
     triangulate();
   };
 
   void triangulate() {
-    while (!remainingVertices.empty()) {
+    auto currVertex = remainingVertices.begin();
+    while (remainingVertices.size() > 3) {
       //finding an ear
-      auto currVertex = remainingVertices.begin();
-
       //check if current vertex is an ear
       vec2 currPotDiag1 = *getNextVertex(currVertex);
       vec2 currPotDiag2 = *getPreviousVertex(currVertex);
@@ -236,8 +235,11 @@ public:
            currEdgeStart != getNextVertex(getNextVertex(currVertex)); currEdgeStart = getPreviousVertex(currEdgeStart))
         if (intersectEachOther(vec2(currEdgeStart->x, currEdgeStart->y),
                                vec2(getNextVertex(currEdgeStart)->x, getNextVertex(currEdgeStart)->y),
-                               currPotDiag1, currPotDiag2))
+                               currPotDiag1, currPotDiag2)) {
+          currVertex++;
           break;
+        }
+
 
       //check if current potential diagonal is fully outside the polygon
       vec2 infinity(200, 200);
@@ -247,8 +249,10 @@ public:
            currEdgeStart != remainingVertices.begin(); currEdgeStart = getPreviousVertex(currEdgeStart))
         if (intersectEachOther(currEdgeStart->x, *getNextVertex(currEdgeStart), infinity, middle))
           numberOfIntersections++;
-      if (numberOfIntersections % 2 == 0)
+      if (numberOfIntersections % 2 == 0){
+        currVertex++;
         break; // the potential diagonal is fully outside, it's not an ear.
+      }
 
       //it's an ear!
       vertices.emplace_back(*currVertex);
@@ -256,6 +260,7 @@ public:
       vertices.emplace_back(currPotDiag2);
 
       remainingVertices.erase(currVertex);
+      currVertex = vertices.begin();
     }
   }
 
-- 
GitLab