Beschleunigung eines Objekts

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

GearTechDE

ehemals 'KillerJo96'

Betreff: Beschleunigung eines Objekts

BeitragSo, Okt 30, 2011 11:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ich weiß, dieses Thema gibt´s schon zig mal aber irgendwie haben mir alle nicht weitergeholfen.
In der Schule habe ich bei meinem Physiklehrer gelernt, dass ich die Geschwindigkeit eines z.B. Autos
mit der Formel Geschwindigkeit = Beschleunigung * Zeit ausrechnet.

Soweit hab ich das auch schon in mein Projekt eingebaut. Das Auto fängt langsam an zu beschleunigen und wird immer schneller.

Mein Problem ist jetzt aber, dass das Auto immer schneller wird. Ich habe im Type eine maxspeed Variable gesetzt die auf 0.08 gesetzt wird.

Mein Code bisher:
BlitzBasic: [AUSKLAPPEN]

If KeyDown(Key_Up) Then

mp\zeit = mp\zeit + 1

Select mp\zeit

Case 10

mp\beschleunigung = mp\beschleunigung + 0.01

End Select

mp\speed = mp\beschleunigung * mp\zeit
MoveEntity mp\mesh,0,0,mp\speed

End If


Ich habe schon probiert:

BlitzBasic: [AUSKLAPPEN]

mp\beschleunigung = mp\beschleunigung + 0.01 Mod mp\maxspeed ;das ich mod einbaue, klappt nicht


Warum funktioniert das nicht? Kann mir da einer helfen?
Ausserdem möchte ich, dass wenn man Key_Up wieder los lässt, die Geschwindigkeit langsam wieder nach lässt. Das klappt irgendwie auch nicht. Ich glaube mit dem Select Case Befehl ist das auch nich so sinnvoll ich hab da keine Ahnung wie ich es sonst lösen sollte. Naja ich hofffe ihr könnt mir helfen

Danke im Voraus Wink
Mit freundlichen Grüßen: GearTechDE

Xeres

Moderator

BeitragSo, Okt 30, 2011 12:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Problem ist, das Zeit schon abläuft, die musst du nicht wirklich noch rein rechnen.
Immer wenn die Schleife durchläuft, tickt die Zeit etwas weiter. Bei 60Hz halt 1/60 Sekunde ~16ms.
Beschleunigung erhöht sich (z.B. Gravitation) um einen Wert B:
Beschleunigung = Beschleunigung + B
und die Beschleunigung erhöht die Geschwindigkeit:
Geschwindigkeit = Geschwindigkeit + Beschleunigung
Und die Zeit ist überall dabei, weil sie sowieso während des Programms läuft.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

GearTechDE

ehemals 'KillerJo96'

BeitragSo, Okt 30, 2011 13:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Öhh ja.. Ich probier das mal. Ich meld mich wieder.
Mit freundlichen Grüßen: GearTechDE

Propellator

Betreff: Re: Beschleunigung eines Objekts

BeitragSo, Okt 30, 2011 14:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Killerjo96 hat Folgendes geschrieben:

Ich habe schon probiert:

BlitzBasic: [AUSKLAPPEN]

mp\beschleunigung = mp\beschleunigung + 0.01 Mod mp\maxspeed ;das ich mod einbaue, klappt nicht


Warum funktioniert das nicht? Kann mir da einer helfen?


Ah, dieser Fehler unterlief mir auch schon, versuche doch mal
BlitzBasic: [AUSKLAPPEN]

mp\beschleunigung = (mp\beschleunigung + 0.01) Mod mp\maxspeed


Ob das auch bei Floats gut funktioniert kann ich dir aber nicht sagen.
Propellator - Alles andere ist irrelephant.
Elefanten sind die Könige der Antarktis.

GearTechDE

ehemals 'KillerJo96'

BeitragSo, Okt 30, 2011 14:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
mp\beschleunigung = (mp\beschleunigung + 0.01) Mod mp\maxspeed


Nope, funktioniert leider nicht. Aber trotzdem danke.
Mit freundlichen Grüßen: GearTechDE

ToeB

BeitragSo, Okt 30, 2011 14:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Lass einfach die Zeit sein. MoveEntity bewegt ja schon das Entity jeden Schleifendurchgang (1/60s meistens) um den gesetzten Wert. Deswegen musst du nur noch die Strecke angeben, um die das entity pro festgesetzter Zeiteinheit bewegen werden soll. Also bspw. 2 Einheiten pro Sekunde, also 0.33 Einheiten pro Frame. Möchtest du jetzt beschleunigen, einfach den "Einheiten Pro Frame"-Wert erhöhen (oder erniedrigen).

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Propellator

BeitragSo, Okt 30, 2011 14:26
Antworten mit Zitat
Benutzer-Profile anzeigen
@ToeB

Soweit ich es verstanden habe versucht er das ja auch.
Propellator - Alles andere ist irrelephant.
Elefanten sind die Könige der Antarktis.

ToeB

BeitragSo, Okt 30, 2011 14:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Toll !

Er soll es aber verstehen.
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

GearTechDE

ehemals 'KillerJo96'

BeitragSo, Okt 30, 2011 14:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Okey Leute habe es jetzt geschafft. Ich habe es zwar selber gelöst, aber genau so wie Toeb gesagt hat, ich habe die Zeit weggelassen. Ich kann jetzt per knopfdruck den speed erhöhen. Bei loslassen des knopfes geht der speed langsam wieder runter. und wenn er schneller runter soll einfach rückwärts fahren xD

Danke für die Hilfe
Mit freundlichen Grüßen: GearTechDE

Midimaster

BeitragSo, Okt 30, 2011 17:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Vorsicht: Besserwisserei:

Xeres:Zitat:
...
Beschleunigung erhöht sich (z.B. Gravitation) um einen Wert B:
...
Beschleunigung = Beschleunigung + B
und die Beschleunigung erhöht die Geschwindigkeit:
Geschwindigkeit = Geschwindigkeit + Beschleunigung
...


Das ist doch falsch, oder? Die Beschleunigung bleibt immer gleich. Bei Gravitation immer 10m/s^2

Die Geschwindigkeit erhöht sich laufend aufgrund der Beschleunigung:

Speed = Beschleunigung * Sekunden

Speed = 10m/s^2 * 1s = 10m/s
Speed = 10m/s^2 * 2s = 20m/s
Speed = 10m/s^2 * 3s = 30m/s
...
Speed = 10m/s^2 * 10s = 100m/s

Also genügt es zu der aktuellen Geschwindigkeit jedesmal fixen Wert dazuzuaddieren.

Am Auto varriiert die Beschleunigung zwar, aber nur aufgrund unterschiedlichen Gasgebens. Also wird auch hier aus der Gaspedalstellung ein fixer Wert ermittelt und der wird nun laufend zur Speed addiert.

Die Speed kann niemals mittels der Modulo-Funktion MOD() einen sinnvollen Wert ergeben. Es ist eher so, dass bei einer best. Geschwindigkeit keine weitere Addition mehr möglich ist.

BlitzBasic: [AUSKLAPPEN]
If Speed<240 Then 
Speed=Speed+Beschleunigung
EndIf


In der Realität passiert folgendes: Der Widerstand der Reifen, der Luft, der Bauteile wird so groß, dass er die Beschleunigung auffrisst. In einem solchen Modell müsste keine IF-Abfrage erscheinen:

BlitzBasic: [AUSKLAPPEN]
Speed=Speed + Beschleunigung
Widerstand= Speed/24
Speed=Speed - Widerstand

Außerdem würde jetzt das Auto nach dem Gas-wegnehmen auch noch automatsich langsamer, wie in der Realität.
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
  • Zuletzt bearbeitet von Midimaster am Mo, Okt 31, 2011 8:55, insgesamt 2-mal bearbeitet

Xeres

Moderator

BeitragSo, Okt 30, 2011 18:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Woops Embarassed
Klar, stimmt so nicht.
Keine Ahnung woher ich die Extra-Beschleunigung genommen habe. Rolling Eyes
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Propellator

BeitragSo, Okt 30, 2011 18:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Nun wird es aber Mechanisch hier!

Eigentlich müsste er doch gleich mit Kräften rechnen.
Also, hier die Newtonschen Axiome:
Newton hat Folgendes geschrieben:

Ein Körper, auf den keine Kraft wirkt, behält Betrag und Richtung seiner Geschwindigkeit bei.


D.h. die Geschwindigkeit (ein Vektor) v ist konstant, wenn der resultierende Kräftevektor 0 ist.

Newton hat Folgendes geschrieben:

Die Änderung des Bewegungszustands ist proportional zur wirkenden Kraft und erfolgt in der Richtung, in der die Kraft wirkt.

d.h., der resultierende Kraftvektor Fres = m * a
Wobei m die Masse ist und a der Beschleunigungsvektor.

Newton hat Folgendes geschrieben:

Wirkt ein Körper 1 auf einen Körper 2 mit der Kraft F21 ein, so wirkt stets der Körper 2 auf den Körper 1 mit einer gleich grossen, entgegengesetzt gerichteten Kraft F12 ein.


So, dann hätten wir mal die 3 newtonsche Axiome.

Also, eine der Kräfte ist die Gravitationskraft bzw. Gewichtskraft.
Zitat:

FG = mg

m = Masse, g = Fallbeschleunigung, auf der Erde c.a. 9.81 m/s2

Dass das Auto nun nicht in den Boden sinkt, hängt mit der Normalkraft zusammen. Diese bewirkt nämlich, dass wenn eine Kraft senkrecht auf eine Oberfläche drückt, diese mit der gleichen Kraft zurückdrückt.

Nun müssen wir natürlich die Kraft der Luftmasse berücksichtigen, welche das Auto vor sich herschiebt. Und wo diese Kraft denn angreift. Das finden wir am besten im Windkanal heraus!

Natürlich müssen wir auch noch wissen mit wie viel Kraft sich das Auto fortbewegt, dann bräuchten wir auch noch eine Rollreibung und die Reibungszahl zwischen Gummireifen und Asphalt. Wohlbemerkt drückt die Rollreibung das Auto nach vorne, wenn es beschleunigt, und nach hinten, wenn es rollt. Beim Blockieren der Räder hätten wir dann auch noch eine Gleitreibung, dafür brauchen wir die Gleitreibungszahl, und beim Seitwärtsschlittern so alles miteinander. Und besonders wenn das auto die räder blockiert, und trotzdem angeschoben wird, dann bräuchten wir noch die Haftreibung.

Wie du siehst ist eine realistische Fahrphysik sehr komplex, und so haben wir eigentlich nur Modellartig den Körper des Autos abgedeckt, ohne zu berücksichtigen dass da Federungen drin sind und dass es 4 Räder hat.

Natürlich kannst du auch einfach die Beschleunigung irgendwie wählen, ich vermute das erzeugt schlussendlich ein besseres Resultat.

MfG

Propellator

PS: Schlussendlich ist Newtons Modell ja sowieso fehlerbehaftet, habe ich gehört, Einstein sei da genauer. Aber irgendwo muss man ja mal eine Grenze ziehen Very Happy
Propellator - Alles andere ist irrelephant.
Elefanten sind die Könige der Antarktis.
 

LordCoder

BeitragSo, Okt 30, 2011 20:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Midimaster hat Folgendes geschrieben:
Vorsicht: Besserwisserei:
Speed = Beschleunigung * Sekunden

Speed = 10m/s^2 * 1s = 100m/s
Speed = 10m/s^2 * 2s = 20m/s
Speed = 10m/s^2 * 3s = 30m/s
...
Speed = 10m/s^2 * 10s = 100m/s



Oder wohl doch nicht
Speed = 10m/s^2 * 1s = 100m/s
nur so ein kleiner Vertippfehler
3. Platz BCC #60

Midimaster

BeitragSo, Okt 30, 2011 21:51
Antworten mit Zitat
Benutzer-Profile anzeigen
*** EDIT ***

(alles zurücknehm und das Gegenteil behaupte...)

@LordCoder und Halbleiter

vielen Dank für den Hinweis, ich hab's gleich ausgebessert!
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
  • Zuletzt bearbeitet von Midimaster am Mo, Okt 31, 2011 8:58, insgesamt einmal bearbeitet
 

n-Halbleiter

BeitragSo, Okt 30, 2011 22:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Midimaster, ich denke, LordCoder meinte, dass du einen Tippfehler gemacht hast. Wink

Die 10m/s² * 1s sind 10m/s, wie du ja gerade nochmal bewiesen hast; du schriebst allerdings 100m/s in deinem Post.
mfg, Calvin
Maschine: Intel Core2 Duo E6750, 4GB DDR2-Ram, ATI Radeon HD4850, Win 7 x64 und Ubuntu 12.04 64-Bit
Ploing!
Blog

"Die Seele einer jeden Ordnung ist ein großer Papierkorb." - Kurt Tucholsky (09.01.1890 - 21.12.1935)

darth

BeitragSo, Okt 30, 2011 22:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

der Thread ist ja sowieso schon rechthaberisch geworden, von daher mische ich doch gerne mit.

Code: [AUSKLAPPEN]
s(t) = s0 + v0 * t + 1/2 * a * t^2
v(t) = d/dt s(t) = v0 + a * t ;< Diese Zeile braucht er (falls a nicht explizit von der Zeit abhängt btw)
a(t) = d/dt v(t) = d^2/dt^2 s(t) = a ;Konstant, also a nicht explizit von der Zeit abhängig


Natürlich kann er es auch mit Kräften lösen wenn er will, und sobald dann
Code: [AUSKLAPPEN]
F_Beschleunigung = F_Reibung

erfüllt wird, ist die Beschleunigung = 0 und er hat das Problem der unendlichen Beschleunigung nicht. (Reibungskräfte sind proportional zur Geschwindigkeit.)

Er kann es auch über Verlet annähern wenn er will:
Code: [AUSKLAPPEN]
x(t+h) = 2 * x(t) - x(t-h) + F(x(t)) * h^2/m

Oder Velocity-Verlet..

Aber mal ganz ehrlich.. das ist doch alles unnötig und viel zu kompliziert ._. Es wäre viel einfacher, einfach bis zu einer gegebenen Maximalgeschwindigkeit zu beschleunigen und dann abzubrechen.

Code: [AUSKLAPPEN]
Const a# = 9.81 ;m/s^2
Const vMax# = 120 / 3.6 ;(km/h -> m/s)
...
if( v < vMax)
   v = v + a
else
   v = a
endif
...


Notfalls noch mit abs(), falls die Geschwindigkeit nach links oder rechts gehen soll. (Oder über Vektoren, dann kann er sich wegen ||v|| >= 0 auch den abs() sparen.)
Diese Signatur ist leer.

GearTechDE

ehemals 'KillerJo96'

BeitragSo, Okt 30, 2011 22:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie auch immer... xD
Mit freundlichen Grüßen: GearTechDE

Jan_

Ehemaliger Admin

BeitragMo, Okt 31, 2011 12:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei einen rennspiel, sollte man wenn man nciht eine simulation machen will die Normalen mittelschulansätze vergessen.

Für eine Fahrzeugengine sollte man mit wirkenden kräften und trägheit arbeiten, sowie reibung,.
Also, 4 Punkte brühren die Straße, jeder hat 1 gewicht. alle 4 können kräfte in eine andere Richtung wirken lassen.
Die haftung am Grund beschreibt die möglichkeit die kraft in beschleunigung umzusetzen
between angels and insects

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group