diff --git a/main/HalfEdge.pde b/main/HalfEdge.pde index 915b027..9c5a463 100644 --- a/main/HalfEdge.pde +++ b/main/HalfEdge.pde @@ -23,6 +23,24 @@ public class HalfEdge { vertex = v1; twin.setOrigin(v2); + + HalfEdge[] try1 = v1.getEdgesToUpdate(v2); + if (try1 == null) { + twin.setnext(this); + previous = twin; + } else { + twin.setnext(try1[1]); + previous = try1[0]; + } + + HalfEdge[] try2 = v2.getEdgesToUpdate(v1); + if (try2 == null) { + twin.setprevious(this); + next = twin; + } else { + twin.setprevious(try2[0]); + next = try2[1]; + } // Set Nexts // Set Prevs diff --git a/main/Vertex.pde b/main/Vertex.pde index 8bf9188..575f6f9 100644 --- a/main/Vertex.pde +++ b/main/Vertex.pde @@ -39,18 +39,34 @@ public class Vertex { ArrayList leaving = getAllLeavingEdges(); HalfEdge[] prevNext = new HalfEdge[2]; if (leaving.size() == 1) { - prevNext[0] = leaving.get(0); - prevNext[1] = prevNext[0].gettwin(); + prevNext[1] = leaving.get(0); + prevNext[0] = prevNext[0].gettwin(); return prevNext; } - - - - + Vertex v1 = this; + Vertex v4 = v; + Vertex v2; + Vertex v3; + int[] temp = new int[leaving.size()]; for (int i = 0; i < leaving.size(); i++) { - + temp[i] = 0; } - + for (int i = 0; i < leaving.size(); i++) { + v2 = leaving.get(i).getOrigin(); + v3 = leaving.get((i+1)%leaving.size()).getOrigin(); + if (is2closerCCWof4(v1, v2, v3, v4)) { + temp[i]++; + } else { + temp[(i+1)%leaving.size()]++; + } + } + for (int i = 0; i < leaving.size(); i++) { + if (temp[i] == 0) { + prevNext[1] = leaving.get(i); + prevNext[0] = prevNext[1].getprevious(); + } + } + return prevNext; } private float[] safeSlope(float dy, float dx) {