Macros zu gleichmäßiger Beschleunigung ;)

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8812
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Macros zu gleichmäßiger Beschleunigung ;)

Beitrag von NicTheQuick »

Hier ein paar Macros, die der ein oder andere mal für das ein oder andere
Physikproblem gebrauchen könnte:

Code: Alles auswählen

; v      : Geschwindigkeit in m/s
; a      : Beschleunigung in m/s²
; t      : Zeit in s
; s      : Strecke in m
;
; v_2 = v_1 + a * t
; s   = a/2 * t² + v * t

; Du willst die Dauer t der Beschleunigung a von Geschwindigkeit v_1 auf v_2 berechnen
; t = (v_2 - v_1) / a
Macro Acc_t_vva(v_1, v_2, a)
  ((v_2 - v_1) / a)
EndMacro

; Du willst die Dauer t der Beschleunigung a um Strecke s zurückzulegen berechnen
; t = Sqr(2 * s / a)
Macro Acc_t_sa(s, a)
  Sqr(2 * s / a)
EndMacro

; Du willst die Geschwindigkeit v nach Beschleunigung a über die Dauer t berechnen
; v = a * t
Macro Acc_v_at(a, t)
  (a * t)
EndMacro

; Du willst die Geschwindigkeit v nach Beschleunigung a über die Dauer t und der Anfangsgeschwindigkeit v_0 berechnen
; v = t * a + v_0
Macro Acc_v_v0at(v_0, a, t)
  (t * a + v_0)
EndMacro

; Du willst die Geschwindigkeit v nach Beschleunigung a über die Strecke s und der Anfangsgeschwindigkeit v_0 berechnen
; v = Sqr(2 * a * s) + v_0
Macro Acc_v_v0as(v_0, a, s)
  (Sqr(2 * a * s) + v_0)
EndMacro

; Du willst die Strecke s nach Beschleunigung a über die Dauer t und der Startgeschwindigkeit v berechnen
; s = a/2 * t² + v * t
Macro Acc_s_tav(t, a, v)
  (a * t * t / 2 + v * t)
EndMacro

; Du willst die Beschleunigung a berechnen, mit der man auf der Strecke s beschleunigung muss um von v_1 zu v_2 zu kommen
; a = (v_2 - v_1)² / (2 * s)
Macro Acc_a_vvs(v_1, v_2, s)
  ((v_2 - v_1) * (v_2 - v_1) / (2 * s)) * (1 - (0 Or v_2 < v_1) * 2)
EndMacro

; Du willst die Beschleunigung a berechnen, mit der man in der Dauer t von v_1 auf v_2 beschleunigen kann
; a = (v_2 - v_1) / t
Macro Acc_a_vvt(v_1, v_2, t)
  ((v_2 - v_1) / t)
EndMacro



; kleines Beispiel:
;
; Fritz fährt 100 m/s mit seinem Auto.
; Wie stark muss Fritz verzögern, damit er genau
; nach 400 m noch eine Endgeschwindigkeit von 1 m/s hat?

Debug "Fritz muss mit " + Str(Acc_a_vvs(100, 1, 400)) + " m/s verzögern"

; ...noch ein kleines Beispiel:
; 
; Fritz weiß nicht mit welcher Geschwindigkeit er fährt.
; Wenn Fritz in 2 Sekunden mit -9.5 m/s² verzögert, dann
; hat er eine Endgeschwindigkeit von 4 m/s. Wie schnell ist
; er gefahren?

Debug "Fritz fuhr " + Str(Acc_v_v0at(4, 9.5, 2)) + " m/s"

; ...und noch eins:
; 
; Fritz weiß nicht mit welcher Geschwindigkeit er fährt.
; Wenn Fritz auf 100 Meter mit -5.5 m/s² verzögert, dann
; hat er eine Endgeschwindigkeit von 10 m/s. Wie schnell ist
; er gefahren?

Debug "Fritz fuhr " + Str(Acc_v_v0as(10, 5.5, 100)) + " m/s"
Es fehlen noch mehrere Varianten, aber das hier sind wohl die
gebräuchlisten.

Für Fehlermeldungen wäre ich dankbar. Es kann nämlich gut sein, dass ich
da irgendwo was falsch gemacht habe. :|

PS.: Braucht jemand ein Sgn()-Macro?

Code: Alles auswählen

Macro Sgn(Value)
  (1 - (0 Or Value <= 0) - (0 Or Value < 0))
EndMacro

Debug Sgn(10)
Debug Sgn(0)
Debug Sgn(-10)
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Ih du Sack, ich hab heute darüber ne Arbeit geschrieben :lol:. Konnte das nicht
etwas früher kommen :P? Dann hätte ich damit meine HA machen können.
Bild
Antworten