diff --git a/sketch_231115a/sketch_231115a.pde b/sketch_231115a/sketch_231115a.pde index ed84d45..22a0d8c 100644 --- a/sketch_231115a/sketch_231115a.pde +++ b/sketch_231115a/sketch_231115a.pde @@ -1,15 +1,3 @@ -class Delay { - int limit; - - Delay (int l) { - limit = millis() + l; - } - - boolean expired () { - return millis() > limit; - } -} - class Graph { ArrayList> adj; ArrayList> coords; @@ -34,8 +22,8 @@ class Graph { } } - void draw_points() { - strokeWeight(20); + void draw_points(int point_weight) { + strokeWeight(point_weight); stroke(#FF0000); for (int i = 0; i < coords.size(); i++) { point(coords.get(i).get(0), coords.get(i).get(1)); @@ -43,13 +31,13 @@ class Graph { } } - void draw_graph() { + void draw_graph(int graph_weight, int point_weight) { stroke(#550000); strokeWeight(10); for (int i = 0; i < adj.size(); i++) { for (int idx = 0; idx < adj.get(i).size(); idx++) { int e = adj.get(i).get(idx); - draw_arrow(coords.get(i).get(0), coords.get(i).get(1), coords.get(e).get(0), coords.get(e).get(1), 5); + draw_arrow(coords.get(i).get(0), coords.get(i).get(1), coords.get(e).get(0), coords.get(e).get(1), point_weight, graph_weight); } } } @@ -68,26 +56,6 @@ Graph g; ArrayList edges; boolean[] vis; -void draw_arrow_2(float x1, float y1, float x2, float y2, float offset) { - float triangle_size = dist(x1, y1, x2, y2) / 50; - pushMatrix(); - translate(x2, y2); //changes (0, 0) - rotate(atan2(y2 - y1, x2 - x1)); - triangle( -triangle_size * 2, - triangle_size, 0, 0, -triangle_size * 2, triangle_size); - popMatrix(); - line(x1, y1, x2, y2); -} - -void draw_arrow(float x1, float y1, float x2, float y2, float offset) { - float angle = atan2(y2-y1, x2 - x1); - float offset_x = offset; - float offset_y = offset; - //if (x2 < x1) offset_x *= -1; - //if (y2 < y1) offset_y *= -1; - line(x1 + offset_x * sqrt(1-sin(angle)), y1 + offset_y * sin(angle), - x2 - offset_x * sqrt(1-sin(angle)), y2 - offset_y * sin(angle)); -} - void setup() { size(1000, 1000); @@ -98,13 +66,39 @@ void setup() { } +//void draw_arrow_2(float x1, float y1, float x2, float y2, float offset) { +// float triangle_size = dist(x1, y1, x2, y2) / 50; +// pushMatrix(); +// translate(x2, y2); //changes (0, 0) +// rotate(atan2(y2 - y1, x2 - x1)); +// triangle( -triangle_size * 2, - triangle_size, 0, 0, -triangle_size * 2, triangle_size); +// popMatrix(); +// line(x1, y1, x2, y2); +//} + +void draw_arrow(float x1, float y1, float x2, float y2, float offset, float weight) { + if (x1 == x2 && y1 == y2) return; + float angle = atan2(y2-y1, x2 - x1); + pushMatrix(); + translate(x1, y1); + PVector v = PVector.fromAngle(angle); + v.setMag(dist(x1, y1, x2, y2) - min(offset, weight) - offset/2); + line(0, 0, v.x, v.y); + pushMatrix(); + translate(v.x, v.y); + rotate(angle); + float triangle_size = dist(x1, y1, x2, y2) / 50; + triangle(-triangle_size * 2, - triangle_size, 0, 0, -triangle_size * 2, triangle_size); + popMatrix(); + popMatrix(); +} + ArrayList bfs(int start, int end) { ArrayList q = new ArrayList(); ArrayList res = new ArrayList(); q.add(start); - int[] edge = new int[] {0, 0}; - res.add(edge); + int[] edge; int q_size = 1; while (q_size > 0) { int next = q.get(0); @@ -112,9 +106,7 @@ ArrayList bfs(int start, int end) { q_size--; vis[next] = true; g.add_edge(0, 0); - print(g.adj.size()); for (int neighbor : g.adj.get(next)) { - print(neighbor); if (vis[neighbor]) continue; q.add(neighbor); edge = new int[]{next, neighbor}; @@ -122,10 +114,6 @@ ArrayList bfs(int start, int end) { q_size++; if (neighbor == end) return res; } - //if (q_size == 0) { - // print("end"); - // return res; - //} } return res; } @@ -136,9 +124,10 @@ void test() { g.add_edge(0, 1); g.add_edge(1, 3); g.add_edge(1, 4); - g.add_edge(2, 0); + //g.add_edge(2, 0); g.add_edge(4, 5); g.add_edge(5, 6); + g.add_edge(0, 2); g.set_coords(0, 100, 500); g.set_coords(1, 300, 500); g.set_coords(2, 300, 750); @@ -150,15 +139,18 @@ void test() { } void draw() { + int edge_weight = 20; + int point_weight = 30; + int graph_weight = 10; if (frameCount % 60 == 0) { - g.draw_graph(); - g.draw_points(); + g.draw_graph(graph_weight, point_weight); + g.draw_points(point_weight); stroke(#00FF00); if (!edges.isEmpty()) { int[] edge = edges.get(0); edges.remove(0); - strokeWeight(20); - draw_arrow(g.coords.get(edge[0]).get(0), g.coords.get(edge[0]).get(1), g.coords.get(edge[1]).get(0), g.coords.get(edge[1]).get(1), 5); + strokeWeight(edge_weight); + draw_arrow(g.coords.get(edge[0]).get(0), g.coords.get(edge[0]).get(1), g.coords.get(edge[1]).get(0), g.coords.get(edge[1]).get(1), point_weight, edge_weight); } } }