"Auto" über Weg fahren lassen
-
- 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
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
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
-
- 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
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.
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.
Re: "Auto" über Weg fahren lassen
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
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!
it´s not a bug, it´s a feature!
-
- 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
Könntest du mal bitte erklären, wie genau man die Farbe der einzelnen Pixel ausliest.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.
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 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
Re: "Auto" über Weg fahren lassen
Das wieß sogar ich (Juhu, ich weis wasfirefighter10 hat geschrieben: Könntest du mal bitte erklären, wie genau man die Farbe der einzelnen Pixel ausliest.

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];

Danke schonmal für eure Antworten
it´s not a bug, it´s a feature!
it´s not a bug, it´s a feature!
-
- 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
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 hat geschrieben: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 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
-
- 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
Danke! Ich probiere mal ob es funktioniert. Melde mich auf jeden Fall noch mal!
( hoffentlich mit einer funktionierenden Anwendung)
( hoffentlich mit einer funktionierenden Anwendung)
-
- 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
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.firefighter10 hat geschrieben: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 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
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.
-
- 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
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.
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
Michael Springwald
Re: "Auto" über Weg fahren lassen
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!
it´s not a bug, it´s a feature!
-
- 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
Wird das so nicht überlichwerweise gemacht ?Vielleicht könnte man erst einmal alle Wege ausrechnen, mit random,l und anschließend das Auto den kürzesten fahren lassen.
MFG
Michael Springwald
Michael Springwald