fixed arrows

This commit is contained in:
DarianTr
2023-11-16 15:00:10 +01:00
parent d5ed89fd92
commit fbb278c5d9

View File

@@ -1,15 +1,3 @@
class Delay {
int limit;
Delay (int l) {
limit = millis() + l;
}
boolean expired () {
return millis() > limit;
}
}
class Graph {
ArrayList<ArrayList<Integer>> adj;
ArrayList<ArrayList<Integer>> 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<int[]> 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<int[]> bfs(int start, int end) {
ArrayList<Integer> q = new ArrayList<Integer>();
ArrayList<int[]> res = new ArrayList<int[]>();
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<int[]> 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<int[]> 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);
}
}
}