From ebd1173cbc514ede7aa65ba6be90702c92e0e8b4 Mon Sep 17 00:00:00 2001 From: i23007 Date: Sat, 6 Jul 2024 20:37:42 +0200 Subject: [PATCH 1/3] Tests with marking of Edges and Vertexes Adding Visualisation of Edge weight and Vertex name fixed AStar --- OurApplication/OurDrawArea.java | 12 ++++++------ graph/DirectedGraph.java | 11 ++++++----- graph/EdgeMarking.java | 15 +++++++++++++++ graph/ExampleGraphs.java | 12 ++++++------ graph/MarkedEdge.java | 6 +++--- graph/MarkedVertex.java | 6 +++--- graph/VertexMarking.java | 15 +++++++++++++++ 7 files changed, 54 insertions(+), 23 deletions(-) diff --git a/OurApplication/OurDrawArea.java b/OurApplication/OurDrawArea.java index 1b3dc42..e715063 100644 --- a/OurApplication/OurDrawArea.java +++ b/OurApplication/OurDrawArea.java @@ -1,14 +1,11 @@ package OurApplication; -import graph.*; -import graph.Graph; import logging.LogElementList; import visualisation.DrawArea; -import visualizationElements.*; +import visualizationElements.Edge; + +import java.awt.Graphics; -import java.awt.*; -import java.util.Random; -import java.util.Vector; /** * This class provides an example for using visualization.DrawArea. @@ -53,6 +50,9 @@ public class OurDrawArea extends DrawArea{ OurLogElement logElement = (OurLogElement) logList.get(); logElement.getGraph().draw(g); + for(Edge screenEdge : currentGraph.getEdges()){ + g.drawString(screenEdge.getMarking(), (screenEdge.getSource().getXpos() + screenEdge.getDestination().getXpos())/2, (screenEdge.getSource().getYpos() + screenEdge.getDestination().getYpos())/2); + } } diff --git a/graph/DirectedGraph.java b/graph/DirectedGraph.java index e867951..4290283 100644 --- a/graph/DirectedGraph.java +++ b/graph/DirectedGraph.java @@ -1,14 +1,12 @@ package graph; -import OurApplication.OurAlgorithm; import OurApplication.OurLogElement; import logging.LogElementList; import visualizationElements.Edge; import visualizationElements.EdgeStyle; import visualizationElements.Vertex; -import java.awt.*; -import java.io.*; +import java.awt.Color; import java.util.HashMap; import java.util.Objects; import java.util.PriorityQueue; @@ -316,6 +314,8 @@ public class DirectedGraph exten int dist = 0; // Variable, die Distanz zwischen dem potenziell nächsten Knoten und dem Zielknoten speichert int airDist = 0; + // Variable, die Distanz zwischen dem aktuellen Knoten bis zum Endknoten speichert + int distToFinish = 0; // Zähler für LogList int step = 0; @@ -350,7 +350,8 @@ public class DirectedGraph exten + Math.pow((i.getCords()[1] - n2.getCords()[1]), 2)); // Berechne Distanz zu nächstem Knoten - dist = distance.get(nextVertex.getElement()) + j.getWeighting() + airDist; + dist = distance.get(nextVertex.getElement()) + j.getWeighting(); + distToFinish = distance.get(nextVertex.getElement()) + j.getWeighting() + airDist; break; } } @@ -369,7 +370,7 @@ public class DirectedGraph exten this.logList.add(new OurLogElement(step, "Step: " + step, 0, this.getScreenGraphCopy())); // Nehme nächsten Knoten in die Queue auf - queue.add(new WrapperElement<>(i, dist)); + queue.add(new WrapperElement<>(i, distToFinish)); } } diff --git a/graph/EdgeMarking.java b/graph/EdgeMarking.java index 008bb35..2a13ad3 100644 --- a/graph/EdgeMarking.java +++ b/graph/EdgeMarking.java @@ -2,3 +2,18 @@ package graph; public abstract class EdgeMarking extends Marking{ } + +class EdgeWeightMarking extends EdgeMarking{ + private int weight; + + EdgeWeightMarking(int weight){ + this.weight = weight; + } + + public void setWeight(int weight){ + this.weight=weight; + } + public int getWeight(){ + return this.weight; + } +} diff --git a/graph/ExampleGraphs.java b/graph/ExampleGraphs.java index 9960a99..4226e14 100644 --- a/graph/ExampleGraphs.java +++ b/graph/ExampleGraphs.java @@ -32,7 +32,7 @@ public class ExampleGraphs { DirectedGraph example1 = new DirectedGraph<>(); int size = 5; - MarkedVertex[][] vertices = new MarkedVertex[size][size]; + MarkedVertex[][] vertices = new MarkedVertex[size][size]; // Knoten erstellen und zum Graph hinzufügen for (int row = 0; row < size; row++) { @@ -47,10 +47,10 @@ public class ExampleGraphs { for (int row = 0; row < size; row++) { for (int col = 0; col < size; col++) { if (col < size - 1) { - addBidirectionalEdge(example1, vertices[row][col], vertices[row][col + 1], 1); + addBidirectionalEdge(example1, vertices[row][col], vertices[row][col + 1], new EdgeWeightMarking(1)); } if (row < size - 1) { - addBidirectionalEdge(example1, vertices[row][col], vertices[row + 1][col], 1); + addBidirectionalEdge(example1, vertices[row][col], vertices[row + 1][col], new EdgeWeightMarking(1)); } } } @@ -58,9 +58,9 @@ public class ExampleGraphs { return example1; } - private void addBidirectionalEdge(DirectedGraph graph, MarkedVertex from, MarkedVertex to, int weight) { - MarkedEdge forwardEdge = new MarkedEdge<>("edge" + from.getName() + "_" + to.getName(), from, to, null, weight); - MarkedEdge backwardEdge = new MarkedEdge<>("edge" + to.getName() + "_" + from.getName(), to, from, null, weight); + private void addBidirectionalEdge(DirectedGraph graph, MarkedVertex from, MarkedVertex to, EdgeWeightMarking weight) { + MarkedEdge forwardEdge = new MarkedEdge<>("edge" + from.getName() + "_" + to.getName(), from, to, weight, weight.getWeight()); + MarkedEdge backwardEdge = new MarkedEdge<>("edge" + to.getName() + "_" + from.getName(), to, from, weight, weight.getWeight()); graph.addEdge(forwardEdge); graph.addEdge(backwardEdge); } diff --git a/graph/MarkedEdge.java b/graph/MarkedEdge.java index 36d9f0f..6824cca 100644 --- a/graph/MarkedEdge.java +++ b/graph/MarkedEdge.java @@ -29,11 +29,11 @@ public class MarkedEdge extends Edge{ // TODO ACHTUNG DEBUG!!!! - public MarkedEdge(String s, Vertex n1, Vertex n2, U u, int w) { + public MarkedEdge(String s, Vertex n1, Vertex n2, U u, int weighting) { super(s, n1, n2); this.marking = u; - this.weighting = w; - this.screenEdge = new visualizationElements.Edge(n1.getScreenVertex(), n2.getScreenVertex(), "u.toString()", Color.BLACK); + this.weighting = weighting; + this.screenEdge = new visualizationElements.Edge(n1.getScreenVertex(), n2.getScreenVertex(), Integer.toString(weighting), Color.BLACK); } diff --git a/graph/MarkedVertex.java b/graph/MarkedVertex.java index 8447acf..f1fcce8 100644 --- a/graph/MarkedVertex.java +++ b/graph/MarkedVertex.java @@ -34,10 +34,10 @@ public class MarkedVertex extends Vertex{ // TODO ACHTUNG DEBUG!!!! - public MarkedVertex(int xCord, int yCord, String s, T t, Color color) { - super(s); + public MarkedVertex(int xCord, int yCord, String name, T t, Color color) { + super(name); this.marking = t; - this.screenVertex = new visualizationElements.Vertex(xCord, yCord, "t.toString()", color); + this.screenVertex = new visualizationElements.Vertex(xCord, yCord, name, color); this.xCord = xCord; this.yCord = yCord; } diff --git a/graph/VertexMarking.java b/graph/VertexMarking.java index 59257b9..5eddf22 100644 --- a/graph/VertexMarking.java +++ b/graph/VertexMarking.java @@ -2,3 +2,18 @@ package graph; public abstract class VertexMarking extends Marking { } + +class VertexWeightMarking extends VertexMarking{ + private int weight; + + VertexWeightMarking(int weight){ + this.weight = weight; + } + + public void setWeight(int weight){ + this.weight=weight; + } + public int getWeight(){ + return this.weight; + } +} From 4e6a9902bb8208580c25091ddd800a2e72f4746c Mon Sep 17 00:00:00 2001 From: i23007 Date: Sat, 6 Jul 2024 21:08:54 +0200 Subject: [PATCH 2/3] small fix --- .idea/workspace.xml | 24 ++++++++++++++---- graph/MarkedEdge.java | 2 +- graph/MarkedVertex.java | 2 +- .../OurApplication/OurDrawArea.class | Bin 1401 -> 2077 bytes .../ProjektGraph/graph/DirectedGraph.class | Bin 11509 -> 11569 bytes .../ProjektGraph/graph/MarkedEdge.class | Bin 3195 -> 3106 bytes .../ProjektGraph/graph/MarkedVertex.class | Bin 2809 -> 2725 bytes 7 files changed, 21 insertions(+), 7 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 0322ef4..c692f54 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,10 +4,10 @@