From 670ac6feece56e5ed278f8e768e9685821d911f7 Mon Sep 17 00:00:00 2001 From: Connor Riley Date: Thu, 3 Dec 2015 14:14:45 -0500 Subject: [PATCH] added zoom to drawhalfedge --- main/DrawHalfEdge.pde | 79 +++++++++++++++++++++++++++++++------------ 1 file changed, 57 insertions(+), 22 deletions(-) diff --git a/main/DrawHalfEdge.pde b/main/DrawHalfEdge.pde index cf12c82..c335c73 100644 --- a/main/DrawHalfEdge.pde +++ b/main/DrawHalfEdge.pde @@ -7,34 +7,69 @@ public class DrawHalfEdge { point(v.getX(), v.getY()); } - public void drawGraph(ArrayList hlist) { - for(HalfEdge halfedge: hlist) { - drawConnectedGraph(halfedge); - halfedge.reset(); + public void drawGraph(ArrayList vlist) { + for(Vertex vertex: vlist) { + drawConnectedGraph(vertex); } + zoom(vlist); } - public void drawConnectedGraph(HalfEdge halfedge) { - if(halfedge.getdrawn() != true) { - drawHalfEdge(halfedge); - halfedge.setdrawn(); - drawConnectedGraph(halfedge.getnext()); - drawConnectedGraph(halfedge.gettwin()); - drawConnectedGraph(halfedge.getprevious()); - } + public void drawConnectedGraph(Vertex vertex) { + ArrayList edges = vertex.getAllLeavingEdges(); + drawpoint(vertex); + for(HalfEdge edge: edges) { + drawConnection(edge, vertex); + } } - - public void drawHalfEdge(HalfEdge halfedge) { - if(halfedge != null) { - Vertex v1 = halfedge.getVertex(); - drawpoint(v1); - if(halfedge.gettwin() != null && halfedge.gettwin().getdrawn() != true) { - HalfEdge twin = halfedge.gettwin(); - Vertex v2 = twin.getVertex(); - drawpoint(v2); - drawline(v1,v2); + + public void drawConnection(HalfEdge edge, Vertex v1) { + Vertex v2 = edge.getOrigin(); + drawpoint(v2); + drawline(v1, v2); + } + public void zoom(ArrayList vlist) { + float[] bounds = getbounds(vlist); + float[] range = getRange(bounds); //{maxx,minx,maxy,miny}; + float scalefactor = scalingfactor(range); + translate(range[0]/2, range[1]/2); // center the figure + scale(scalefactor); + } + public float scalingfactor(float[] range) { + float rangex = range[0]; + float rangey = range[1]; + float diffx = width/rangex; + float diffy = height/rangey; + return Math.min(diffx,diffy); + } + public float[] getRange(float[] bounds) { + float rangex = bounds[0] - bounds[1]; + float rangey = bounds[2] - bounds[3]; + float[] range = {rangex, rangey}; + return range; + } + public float[] getbounds(ArrayList vlist) { + float maxx = Float.NEGATIVE_INFINITY; + float maxy = Float.NEGATIVE_INFINITY; + float minx = Float.POSITIVE_INFINITY; + float miny = Float.POSITIVE_INFINITY; + for(Vertex v: vlist) { + float x = v.getX(); + float y = v.getY(); + if(x < minx) { + minx = x; + } + if(x > maxx) { + maxx= x; + } + if(y < miny) { + miny = y; + } + if(y > maxy) { + maxy = y; } } + float[] result = {maxx,minx,maxy,miny}; + return result; } }