Schon verbundene Punkte nicht erneut verbinden

Opi3

Aktives Mitglied
Hallo,
ich bin gerade dabei eine kleine Simulation zum Ameisenalgorithmus zu 'basteln'.
Das funktioniert auch soweit alles.

Meine 'Map' besteht aus mehreren Punkten, von den Jeder via 'LinkedList' seine Nachbarn kennt.
Das mache ich Optisch klar, indem ich sie mit Linien verbinde.

Jetzt werden ja ziemlich viele Striche zu viel gezeichnet. Fällt jemandem eine schöne Lösung ein, das 'Doppel-Zeichnen' zu umgehen?

Opi3

Java:
		for (int x = 0; x < map.getMapWidth(); x++) {
			for (int y = 0; y < map.getMapHeight(); y++) {
				Point[] p = map.getNeighboursPosition(x, y);
				for (int i = 0; i < p.length;i++) {
						g.drawLine((int) (x * hexR) , (int) (y * hexR) ,
								(int) (p[i].x * hexR) , (int) (p[i].y * hexR));
				}
			}
		}
 
Zuletzt bearbeitet:
B

bygones

Gast
in einer collection die verbundenen punkte speichern und vorm zeichnen einfach auf existenz ueberpruefen
 

moormaster

Top Contributor
Einfach nur Linien zeichnen, die zu Nachbarn führen, welche rechts oder unterhalb liegen. Dann wird keine Verbindung doppelt gezeichnet.

Wenn auch diagonal gelegene Nachbarn berücksichtigt werden sollen, dann auch die Linien mitzeichnen, die nach rechts-unten oder rechts-oben führen.

Auf die Weise spart man sich eine riesige Liste von schon gezeichneten Linien, die erst immer wieder durchsucht werden muss.
 

Opi3

Aktives Mitglied
Mit meiner jetzigen Struktur kriege ich einfach nur die Nachbar 'rein',
weiß allerdings nicht in welcher Reihenfolge sie tatsächlich um den Ursprung angeordnet sind.
D.h. ich weiß nicht welche rechts oder unterhalb liegen. Leider.

Außerdem weiß ich nicht ob am ende jeder Punkt wirklich nur 8 Nachbarn haben soll, oder eventuell auch 'wild Verflochtene-Netze' unterstützt werden sollen. (Hätte ich vorher sagen müssen Entschuldigung.)

Ob das mit der Liste wirklich besser ist muss ich ausprobieren.
Vielen Dank für den Tipp.

Opi3...
... sieh manchmal den Wald vor Bäumen nicht...
 

moormaster

Top Contributor
Die Reihenfolge ist egal. Du kennst doch die Koordinaten des Startpunkts (x,y) und die des Nachbarn (p.x, p.y), mit dem die Linie verbunden werden soll. Damit kannst du doch in einer if Abfrage vergleichen, ob der Nachbar rechts, unterhalb, ... usw. liegt.

Wenn du jetzt wilde Verknüpfungen haben willst, geht das immernoch, in dem du ausrechnest, in welchem Winkel die Linie weggehen würde. Dann zeichnest du einfach nur alle Linien, die in einem Halbkreis liegen... also z.B. alle Linien, die im Winkel >= 0° und < 180° weggehen.
 

Opi3

Aktives Mitglied
Hm, das mag Angehen, ich bin mir aber immer noch nicht sicher, wie es dann mit der Möglichkeit des Erweiterns steht.

Wahrscheinlich werde ich Heute oder Morgen mal alle Möglichkeiten ausprobieren und und die Permanenteste ausprobiere.

Vielen Dank für alle Tipps,
Opi3
 

moormaster

Top Contributor
Noch eine Alternative wäre:

Die Verbindungslinien nicht direkt an den Punkt-Objekten speichern, sondern in einer Liste von Linien, wobei jede Linie ihren Start und Zielpunkt kennt.

Dann kannst du diese Liste einmal mit ner for Schleife durchgehen und jede Linie genau einmal zeichnen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Cardlayout prüfen ob schon vorhanden, keine doppelten Allgemeine Java-Themen 3
Thallius Herausfinden ob ein externes Programm schon gestartet ist? Allgemeine Java-Themen 10
S ExecutorService.invokeAll -- was passiert wenn einige Tasks schon ausgefuehrt wurden? Allgemeine Java-Themen 2
GUI-Programmer Jar File funktioniert nicht auf PC2, auf PC1 schon Allgemeine Java-Themen 13
ARadauer Schon mal jemand für Ungarn CSV Datein geschreiben? Allgemeine Java-Themen 2
reibi Workspace schon geöffnet (Kein Eclipse Thema) Allgemeine Java-Themen 14
P J2EE EJB Einstieg - hängt schon am XDoclet + Eclipse Allgemeine Java-Themen 5
G Schon wieder Regex Problem :-/ Allgemeine Java-Themen 6
J Nicht schießen - schon wieder OpenOffice. Allgemeine Java-Themen 4
L schon wieder der "javac nicht gefunden" fehler Allgemeine Java-Themen 9
M schon wieder Comport-Problem Allgemeine Java-Themen 21
T läuft mein Programm schon? - wie feststellen Allgemeine Java-Themen 6
U schon wieder regex Allgemeine Java-Themen 3
S Schon gewusst? Allgemeine Java-Themen 33
bummerland Wie lange programmiert ihr schon in Java? Allgemeine Java-Themen 10
X Punkte in einem Feld bestimmen Allgemeine Java-Themen 22
F Punkte in einem Bild finden Allgemeine Java-Themen 10
C Reguläre Ausrücke Punkte im Satz richtig erkennen Allgemeine Java-Themen 6
nrg JS als ScriptEngine - alle Punkte ersetzen Allgemeine Java-Themen 4
J Konstrukt um alle Paare und Tripel einer Punkte-Menge bilden Allgemeine Java-Themen 12
H Shortcut ruft zwei Menu-punkte auf Allgemeine Java-Themen 5
S JFreeChart LineChart Punkte über NULL Werte hinweg verbinden Allgemeine Java-Themen 5
G Graph mittels Punkte erstellen Allgemeine Java-Themen 27
T Slashes in String durch Punkte ersetzen Allgemeine Java-Themen 2
D abstand 2er punkte Allgemeine Java-Themen 18
A Punkte in HighScore Liste übernehmen? Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben