|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 05.05.2004, 15:56 Titel: Vektorrechnung: Auto fährt gegen Wand |
|
|
Ich programmierer gerade ein Rennspiel. Für die Kollision mit Wänden hatte ich mir gedacht, den Winkel zwischen der Autobewegung und der Wand zu berechnen, und wenn dieser kleiner als 45 Grad istdas Auto mehr oder weniger(hängt dann vom Winkel ab) abzubremsen und paralel zur Wand weiterfahren lassen, und wenn er größer ist, das auto anzuhalten.
Dies ist ja in etwa realistisch, da das Auto, wenn es frontal gegen eine Wand fährt ja auch stehen bleiben wüürde. Schrappt es allerdings nur an der Wand entlang verleiert es nur etwas Geschwindigkeit und das natürlich auch abhängig vom Bewegungswinkel. Das Auto muss anschließend aber paralel zur Wand fahren, da es sonst ja durch sie hindurch fahren würde, wenn ich nur die Geschwindigkeit verringern würde.
So da jetzt jeder hoffentlich kapiert hat, wie ich mir das vorstelle, kann ich ja jezt mein problem beschreiben:
Das Auto ist folgendermasen definiert:
Position (x, y)
Fahrrichtung (Winkel zwischen 0 u. 360 Grad)
Geschwindigkeit
Die Wand ist so definiert:
Startpunkte (x, y)
Endpunkt (x, y)
Hei, da kommt Freude auf. Ich hab nämlich ziemlich wenig Ahnung von Vektorrechnung, und das dumme ist, das ich ja einigemale Vektoren in winkel umrechnen muss und wahrscheinlich auch umgekehrt. Ich glaub man kann einiges mit Sinus und Kosinus und deren Umkehrfunktionen machen, aber so ganz blick ich da nicht durch.
Da die x und y 's ja absulute Koordinaten sind, muss ich die Vektoren zwischendurch wahrscheinlich auch normalsieren oder so.
Naja, kennt sich jemand damit aus oder kann mir jemand sagen wo man so was lernt. So nen kleiner Internetlink oder so (aber am besten einer wofür man kein Abitur braucht, bin erst in der 10) _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
Chewie Super JLI'ler
Anmeldedatum: 17.07.2003 Beiträge: 382
Medaillen: Keine
|
Verfasst am: 06.05.2004, 18:04 Titel: |
|
|
aus eigener erfahrung kann ich dir nur raten: lass das mit dem autorennspiel ausser, du willst es ganz primitiv haben, aber es schaut nicht so aus, nach deiner kollisionsschilderung. ich hab mir mal die berechnungen für ein 'realistischeres' fahrverhalten angesehen...da wird einem schlecht.
solltest du es doch wagen: was weißt du von vektoren? du solltest auf die richtungsangabe in grad verzichten und statt dessen einen richtungsvektor nehmen...ist dann leichter, den an der wand entlang zu orientieren.
im spiel checks du dann, ob die neue position hinter der wand ist, wenn ja mußt du das auto mal zurückversetzen, dann nimmst du dir richtungsvektor und vektor wandAB her und berechnest dir den winkel mit dem punktprodukt...ich hab das hier schonmal versucht zu erklären, such mal danach oder schau z.B. hier.
und wenn du dann den winkel hast, wirds erst richtig lustig, das überlaß ich mal dir |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 07.05.2004, 10:20 Titel: |
|
|
Ich hab mir jetzt ein neues Buch gekauft: 3DSpieleprogrammierung von David Scherfgen.
Da ist am Anfang ein Kapitel über Vektorrechnung. Ich denke, damit könnte ich es vieleicht schaffen. Sind nämlich ziemlich viele Funktionen (Winkel zwischen 2 Vektoren usw.) beschrieben. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 07.05.2004, 10:49 Titel: |
|
|
Zitat: | abzubremsen und paralel zur Wand weiterfahren lassen |
Meinst du das Auto soll gegen die Wand ausgerichtet werden(unrealistisch) oder es soll die Ausrichtung beibehalten und an der Wand entlangschleifen? Das ist ziemlich einfach zu erreichen. Wenn du willst, dass ich dir helfen dann schreib mal was dir alles zur Verfügung steht(Levelgeometrie etc, wie ist alles aufgebaut..) _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 08.05.2004, 15:08 Titel: |
|
|
Die Levels sind mithilfe von Linien aufgebaut. jede besteht aus einer XY Start Position und einer XYEndposition. Ich habs jetzt geschafft zu testen ob das Auto die Wand berührt oder nicht (mithilfe einer Linie-Kreis Kollisionsabfrage). Jee Wand soll auserdem noch ihren eigenen Winkel speichern (kann man ja aus den Koordinaten der Start und Endpunkte irgendwie berechnen). Wenn ich den Fahrwinkel des Autos vom Richtungswinkel der Wand abzieh, kann ich also den Einschlagswinkel feststellen und dementsprechend reagieren. Im Moment bleibt das Auto bei einem zu steilen Winkel (zwischen 45 und 135 Grad) stehen. Ist er flacher, richtet es sich nach der Wand aus und fährt weiter(mit vermindertet Gewschwindigkeit).
Mein einziges Problem ist zur Zeit, den Winkel der Wand zu berechnen. Also aus den 4 Koordinaten (StartX, StartY, EndX, EndY) einen Winkel zwischen 0 und 360 Grad.
Wäre net wenn mir jemand sagen könnte welche Funktion ich zum berechnen des Winkels brauch. (Ich denke mal ich muss zuerst XStart-XEnd und YStar-YEnd rechen. Aber weiter weiß ich nicht) _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
=]Mid[=]Night[= Super JLI'ler
Anmeldedatum: 20.11.2002 Beiträge: 380 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 08.05.2004, 15:42 Titel: |
|
|
(y2 - y1) / (x2 - x1) ergibt die Steigung der Strecke.
atan((y2 - y1) / (x2 - x1)) gibt den winkel der strecke im bogenmaß zurück, den du dann noch in grad umrechnen kannst:
atan((y2 - y1) / (x2 - x1)) * PI / 180 |
|
Nach oben |
|
|
Chewie Super JLI'ler
Anmeldedatum: 17.07.2003 Beiträge: 382
Medaillen: Keine
|
Verfasst am: 08.05.2004, 15:55 Titel: |
|
|
oder eben mit dem punktprodukt, steht eh im buch vom scherfgen drinnen.
vDirWand = vB - vA;
vDirX = Vec(1.0f, 0.0f);
winkel = acos(Punktprod(vDirWand, vDirX)); |
|
Nach oben |
|
|
xardias JLI Master
Alter: 38 Anmeldedatum: 28.12.2003 Beiträge: 804 Wohnort: Palo Alto, CA Medaillen: Keine
|
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|