"Auto" über Weg fahren lassen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
firefighter10
Beiträge: 6
Registriert: Do 23. Sep 2010, 18:21
OS, Lazarus, FPC: Windows7 (L. 0.9.28.2 Beta FPC 2.2.4)
CPU-Target: 64Bit

"Auto" über Weg fahren lassen

Beitrag von firefighter10 »

Hallo zusammen.

Ich habe folgendes vor:
Ich will ein Auto, also ein Bild von diesem, über eine Karte mit Straßen fahren lassen. Das Auto soll sich dabei natürlich an das Straßennetz halten.
Zuerst habe ich die Karte als timage auf die Form gezogen. Danach das viel kleinere Bild des Autos durch ändern der Position über die Karte bewegt.
Das hat auch gut geklappt. Das Auto ist immer da angekommen wo es hin sollte, hat sich dabei natürlich nicht an das Straßennetz gehalten, wie sollte es auch?
Im nächsten Schritt habe ich dann versucht alle Straßen durch Koordinaten festzulegen. Das Klappt zwar, ist aber bei größeren Karten unpraktisch, da ich ja jede Straße einzeln definieren muss.

Meine Frage. Gibt es eine Lösung für dieses Problem, z.B. die Farben der Karte untersuchen um festzustellen, was Straße ist und was nicht.

Bin für jede Lösungsidee dankbar

firefighter10

Korkenkrone
Beiträge: 33
Registriert: Sa 18. Sep 2010, 20:33
OS, Lazarus, FPC: OpenSUSE 11.3 (L 0.9.28.2 Beta FPC 2.2.4)
CPU-Target: x86-64

Re: "Auto" über Weg fahren lassen

Beitrag von Korkenkrone »

Straßenkarten zur Navigation liegen meistens als Vektoren vor. Da kannst du natürlich deine Autos diese Vektoren vorwärts oder rückwärts durchlaufen lassen.

Ansonsten ist eine Spurführung durch Farberkennung das Naheliegendste, da du auf der Karte die Straßen ja farblich markiert hast. Du könntest aus dem Kartenmaterial auch versuchen ein eigenes Straßenraster zu bauen bei dem du anstatt Farben einfach Booleans verwendest, die ein Straßenpixel anzeigen.

felix96
Beiträge: 287
Registriert: So 29. Nov 2009, 17:44
CPU-Target: 32BitWin+64bitUbunt

Re: "Auto" über Weg fahren lassen

Beitrag von felix96 »

http://wiki.delphigl.com/index.php/Tutorial_pathfinding
http://wiki.delphigl.com/index.php/Tuto ... thfinding2

Poste mal deinen Code, wenn du das hinkriegst (ich habs nicht geschafft :-(
Danke schonmal für eure Antworten
it´s not a bug, it´s a feature!

firefighter10
Beiträge: 6
Registriert: Do 23. Sep 2010, 18:21
OS, Lazarus, FPC: Windows7 (L. 0.9.28.2 Beta FPC 2.2.4)
CPU-Target: 64Bit

Re: "Auto" über Weg fahren lassen

Beitrag von firefighter10 »

Korkenkrone hat geschrieben: Ansonsten ist eine Spurführung durch Farberkennung das Naheliegendste, da du auf der Karte die Straßen ja farblich markiert hast. Du könntest aus dem Kartenmaterial auch versuchen ein eigenes Straßenraster zu bauen bei dem du anstatt Farben einfach Booleans verwendest, die ein Straßenpixel anzeigen.
Könntest du mal bitte erklären, wie genau man die Farbe der einzelnen Pixel ausliest.

felix96 hat geschrieben:http://wiki.delphigl.com/index.php/Tutorial_pathfinding
http://wiki.delphigl.com/index.php/Tuto ... thfinding2

Poste mal deinen Code, wenn du das hinkriegst (ich habs nicht geschafft :-(
Ich fürchte dazu verstehe ich noch nicht genug von Lazarus um das zu verstehen. Das direkte auslesen der Farbe eines Bildes scheint mir da etwas einfacher zu sein.

felix96
Beiträge: 287
Registriert: So 29. Nov 2009, 17:44
CPU-Target: 32BitWin+64bitUbunt

Re: "Auto" über Weg fahren lassen

Beitrag von felix96 »

firefighter10 hat geschrieben: Könntest du mal bitte erklären, wie genau man die Farbe der einzelnen Pixel ausliest.
Das wieß sogar ich (Juhu, ich weis was :-)
Also, wenn du z.B. ein Image hast, kanst due die Pixel so auslesen:
TColorvariable := Imagename.Picture.Bitmap.Canvas.Pixels[x,y];

z.B. bei einem Image1 und einer TColorvariable namens farbe und denn Koordinaten X=10, Y=2:

Code: Alles auswählen

farbe:=Image1.Picture.Bitmap.Canvas.Pixels[10,2];
Nur, wenn du mit der Stech funktion arbeitest, weiß ich nicht, wie es geht :-(
Danke schonmal für eure Antworten
it´s not a bug, it´s a feature!

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: "Auto" über Weg fahren lassen

Beitrag von carli »

firefighter10 hat geschrieben:
felix96 hat geschrieben:http://wiki.delphigl.com/index.php/Tutorial_pathfinding
http://wiki.delphigl.com/index.php/Tuto ... thfinding2

Poste mal deinen Code, wenn du das hinkriegst (ich habs nicht geschafft :-(
Ich fürchte dazu verstehe ich noch nicht genug von Lazarus um das zu verstehen. Das direkte auslesen der Farbe eines Bildes scheint mir da etwas einfacher zu sein.
Dazu muss man kein Lazarus können, dazu muss man Ahnung vom Programmieren haben. Wegfindealgorithmen, wer da nicht genau weiß, wie der Algorithmus geht, der schreibt schnell mal eine fehlerhafte Wegsuche oder ein total ineffizientes Stück Code.

firefighter10
Beiträge: 6
Registriert: Do 23. Sep 2010, 18:21
OS, Lazarus, FPC: Windows7 (L. 0.9.28.2 Beta FPC 2.2.4)
CPU-Target: 64Bit

Re: "Auto" über Weg fahren lassen

Beitrag von firefighter10 »

Danke! Ich probiere mal ob es funktioniert. Melde mich auf jeden Fall noch mal!
( hoffentlich mit einer funktionierenden Anwendung)

Korkenkrone
Beiträge: 33
Registriert: Sa 18. Sep 2010, 20:33
OS, Lazarus, FPC: OpenSUSE 11.3 (L 0.9.28.2 Beta FPC 2.2.4)
CPU-Target: x86-64

Re: "Auto" über Weg fahren lassen

Beitrag von Korkenkrone »

firefighter10 hat geschrieben:
felix96 hat geschrieben:http://wiki.delphigl.com/index.php/Tutorial_pathfinding
http://wiki.delphigl.com/index.php/Tuto ... thfinding2

Poste mal deinen Code, wenn du das hinkriegst (ich habs nicht geschafft :-(
Ich fürchte dazu verstehe ich noch nicht genug von Lazarus um das zu verstehen. Das direkte auslesen der Farbe eines Bildes scheint mir da etwas einfacher zu sein.
Das Problem dabei wird sein, dass die Spurführung ein anderes Problem ist, als Wegfindung. Wenn du dein Fahrzeug dazu bringst, auf den Straßen entlang zu fahren, musst du es auch dazu bringen, die richtigen Straßen in die richtige Richtung zu fahren um das Ziel zu erreichen. Für eine effektive Wegfindung ist es vielleicht sogar empfehlenswert die Straßen als Vektoren darzustellen, oder andere Methoden zu nutzen um die Wegfindung zu erleichtern. Eine andere Möglichkeit zum Beispiel wäre es, Kreuzungen von Straßen zu finden und zu speichern und dann jeweils die Kreuzungen mit denen eine direkte Verbindung besteht zusammen mit der Entfernung dieser Verbindung dort einzutragen.

Wegfindung ist wirklich kein einfaches Thema, mit dem man sich früh beschäftigen sollte. Zumindest nicht in der Form, wie du es machst, dass du ein Problem hast und dann versuchst die richtige Lösung zu finden. Du solltest dir erstmal eher Lösungen suchen (also die Algorithmen) und dann Beispiele dazu entwickeln. Wie du siehst, erfordern beide Wegfindungsalgorithmen, die Felix verlinkt hat, unterschiedliche Vorgehensweisen, die auch wieder für Vektoren oder Kreuzungspunkte (die sich bei Straßenkarten anbieten) anders wären.

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: "Auto" über Weg fahren lassen

Beitrag von pluto »

Es gibt noch eine viel einfachere Variante:
Du baust eine Karte mit einem einfachen altmodischen 2D Array auf. Jede Eintrag ist ein Record oder eine Klase.
Jetzt erstellst du einfach Objekte, in dieser Karte, die das Auto Steuern. Z.B. fährt es an einem bestimmten Punkt los.
Du gibst nur einmal an, in welche Richtung. Trifft das Auto auf ein Objekt, wird es in eine Anderen Richtung gelenkt.

Das ganze ist natürlich nicht schön, wie ein Weg zu finden, aber es wäre eine Möglichkeit.

Die andere wäre: Das Auto einfach Per Zufall durch die Straßen fahren zu lassen. Bei jeder Möglichkeit abzubiegen, wird "gewürfelt".
Lässt es die "Straße" zu, kann abgebogen werden. Z.b. nicht wenn es dort eine Einbahndstraße gibt und du von der Falschen Richtung kommst. Kommt auch an, wie genau du das ganze machen möchtest.

Einzelne Image würde ich nicht verwenden, sie sind zu "unpraktisch", für dieses Vorhaben. Z.B. wäre Andorra eine relativ einfache Möglichkeit sowie eine Paintbox oder vielleicht eine eigene Komponente. Alles besser als ein TImage.

Wenn du diese zwei "Varianten" eingebaut hast, könntest du natürlich mit der dritten Anfangen: Ein bestimmten Weg finden.
MFG
Michael Springwald

felix96
Beiträge: 287
Registriert: So 29. Nov 2009, 17:44
CPU-Target: 32BitWin+64bitUbunt

Re: "Auto" über Weg fahren lassen

Beitrag von felix96 »

Vielleicht könnte man erst einmal alle Wege ausrechnen, mit random,l und anschließend das Auto den kürzesten fahren lassen.
Danke schonmal für eure Antworten
it´s not a bug, it´s a feature!

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: "Auto" über Weg fahren lassen

Beitrag von pluto »

Vielleicht könnte man erst einmal alle Wege ausrechnen, mit random,l und anschließend das Auto den kürzesten fahren lassen.
Wird das so nicht überlichwerweise gemacht ?
MFG
Michael Springwald

Antworten