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