Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi auto entlang einer linie fahren lassen (https://www.delphipraxis.net/77155-auto-entlang-einer-linie-fahren-lassen.html)

holle 15. Sep 2006 12:00


auto entlang einer linie fahren lassen
 
hallo, ich möchte ein auto entlang einer linie fahren lassen. die linie beschreibt eine straße. z. b. 100px gerade aus und dann eine kurve mit einem radius von 50px. das auto soll der linie folgen und sich in fahrtrichtung drehen. das auto habe ich als grafik vorliegen.
wie könnte man das am besten realisieren?

mfg holle. (danke)

SirThornberry 15. Sep 2006 12:05

Re: auto entlang einer linie fahren lassen
 
an welcher stelle kommst du nicht weiter? Kannst du das Fahrzeug nicht drehen oder kannst du der Linie nicht folgen?

holle 15. Sep 2006 21:59

Re: auto entlang einer linie fahren lassen
 
ums drehen habe ich mich erstmal gar nicht gekümmert. gehen wir mal von einem punkt als auto aus. wie kann ich dann der linie folgen? es gibt ja eine kreisgleichung, damit könnte man das auto eine kurve fahren lassen. nur wie bekomme ich das zusammen?

mfg holle

3_of_8 15. Sep 2006 22:01

Re: auto entlang einer linie fahren lassen
 
Wie liegt deine Linie vor? Hast du ein schwarz/weißes Bild, hast du jeden einzelnen Punkt oder hast du Vektorkoordinaten und Bezierkurvenangaben? Oder willst du das hart kodieren?

holle 15. Sep 2006 22:06

Re: auto entlang einer linie fahren lassen
 
bis jetzt habe ich noch keine linie. ich habe eine kreuzung als hintergrundbild. hier soll das auto links abbiegen. wie, ist egal. ich könnte ja eine zweite grafik mit einer schwarz-weiß linie zum weg finden nutzen?

mfg holle

Phobeus 15. Sep 2006 23:07

Re: auto entlang einer linie fahren lassen
 
Bin gerade auf dem Sprung, aber ich spendiere mal einen Code-Schnipsel aus einem Projekt von mir, der verwendet wird um ein Objekt entlang einer Route wandern zu lassen. Die Routen sind als einfache 2f-Vectoren gespeichert. Touched führt eine einfache Prüfung durch, ob das Objekt eine gewisse Toleranz-Distanz zum Zielpunkt erreicht hat. Anschließend brauchst Du nur noch das Objekt in die richtige Richtung zu drehen.

Delphi-Quellcode:
if control = CC_ROUTE then
begin
  rx := route[currentRoute].x;
  ry := route[currentRoute].y;

  xdiff := abs(rx-pos[0]);
  ydiff := abs(ry-pos[1]);

  length := sqrt(xdiff*xdiff+ydiff*ydiff);

  mx := (rx - pos[0]) / length*speed;
  my := (ry - pos[1]) / length*speed;

  pos[0] := pos[0] + mx;
  pos[1] := pos[1] + my;

  // check, if a route point is reached
  if touched(rx,ry) then
  begin
     case route[currentRoute].action of
     RP_NEXT:
     begin
       g_Console.add('Reach rp '+IntToStr(currentRoute)+' proceed to next');
       inc(currentRoute)
     end;
     RP_REPEAT:
     begin
       g_Console.add('Reach rp '+IntToStr(currentRoute)+' start over again');
       currentRoute := 0;
     end;
   end;
end;

holle 17. Sep 2006 12:11

Re: auto entlang einer linie fahren lassen
 
@Phobeus
danke für den code. nur leider blick ich da nicht so ganz durch. könntest du mal bitte erläutern, was da gemacht wird?
danke, holle.

Nikolas 17. Sep 2006 12:40

Re: auto entlang einer linie fahren lassen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Eine Ellipse kann man so parametrisieren:

( cos(x)*a, sin(x)*b ) (0<x<=2pi; für a=b=r wirds ein Kreis mit Radius r)

Wenn das Auto eine Kurve nach links fahren soll (um 90°) muss der Ausdruck x zwischen 0 und pi/2 liegen, da Delphi Eingaben in Rad erwartet. Das Auto fährt damit einen Viertelkreis ab.
Zuerst suchst du dir den Mittelpunkt deines Kreisstückes. (M in der Grafik) dann machst du eine while-Schleife in der du Winkelwerte zwischen 0 und pi/2 abarbeitest. Je nach dem, wie groß der Abstand zwischen zwei Winkelwerten ist, springt das Auto mehr oder weniger.
Die Position deines Autos hast du dann immer durch (M.x+cos(phi)*r, M.y-sin(phi)*r) gegeben.

mimi 17. Sep 2006 14:18

Re: auto entlang einer linie fahren lassen
 
ich würde das noch etwas anders machen:
du weißt doch bestimmt wo sich die staße im bild befindet wenn nicht: das musst mit paint herrausfinden und die eck punkte abspeichern in einer variable...

du brauchst einzelne objekte z.b. bilder die du einfügt....
jetzt könntes du mit hilfe eine zeitschleife den werten der staße entlangen fahren z.b. so:

nehmen wir an deine starße befindet sich bei folgenden punkten:
20(x),10(y),100(w),100(h) dürfte eine komische starße werden naja....
jetzt musst du das auto auf die straße setzten:
10,15,10,10(die werte ensprechen wie von oben nur andere zahlen)
am besten zeichnest du erstmal als rechteck(10,15,10,10) müste klappen.

jetzt musst du dies rechteck verschieben in einem z.b. timer:
5+10(x)
bei der breite bin ich mir nicht sicher ob du
x+breite machen musst oder nicht....

ich hoffe du versteht den weg....es die starße zu ende musst du prüfen was jetzt für ein starßen typ kommmt am besten verwaltest du alle starßen in ein array und defnierst einen eigenen record z.b.
TStrasse=record
r:Trect;// für die position und größe
typ:Integer;//für das bild was angezeigt werden soll....
end;

Auto:TStraße

so währes aufjedenfall am einfachsten ist zwar eine menge zu schreiben aber du hast auch was davon !

Nikolas 17. Sep 2006 14:52

Re: auto entlang einer linie fahren lassen
 
Wie willst du denn mit diesem Ansatz eine Kurve fahren?


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:19 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz