Kanonenkugel mit Physik

Übersicht BlitzBasic Allgemein

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

 

Haubitze

BeitragSo, Jan 23, 2011 13:27
Antworten mit Zitat
Benutzer-Profile anzeigen
ist denn 9.81m/s^2 nicht das gleiche wie

Code: [AUSKLAPPEN]

9.81m   sqr(9.81m)   sqr(9.81m)   3,13209....m
_____ = _________  = _________ = __________

  s^2     sqr(s^2)        s           s

ich bin zwar kein mathegenie aber ich denke so koennte man mit der erdanziehung doch eher rechnen
zumindest in Computersimulationen/spielen.

h(t)=h0-1/2*3.132*t ?
s(t)=1/2*3.132*t ?

wenn meine ueberlegung falsch ist so bitte ich dies zu entschuldigen.

Salute

Edit: ja Xeres die einheit wuerde dann komisch klingen aber das ergebniss mueste doch das selbe sein oder nicht?
  • Zuletzt bearbeitet von Haubitze am So, Jan 23, 2011 13:33, insgesamt 2-mal bearbeitet

Xeres

Moderator

BeitragSo, Jan 23, 2011 13:31
Antworten mit Zitat
Benutzer-Profile anzeigen
"Wurzel(Meter) pro Sekunde" ist keine Geschwindigkeit und Einheiten-technisch mehr als Fragwürdig.
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)

mpmxyz

BeitragSo, Jan 23, 2011 13:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Formel ist auch eher an den Haaren herbeigezogen. Wink
Bei gleichmäßigen Beschleunigungen hat man auf alle Fälle einen quadratischen Term.
Zum Integral:
Teile das einfach in zwei einzelne Integrale auf:
t>te:
v(t)=Integral(G+Fe,0..te)/m+Integral(G,te..t)/m+v0
t<=te:
v(t)=Integral(G+Fe,0..t)/m+v0
mfG
mpmxyz
PS: Eine Fouriertransformation wäre hier ein viel zu großes Kaliber! Razz Die kannst du erst gebrauchen, wenn du noch den Luftwiderstand mit hineinbringst.
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

Xeres

Moderator

BeitragSo, Jan 23, 2011 14:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Haubitze hat Folgendes geschrieben:
ja Xeres die einheit wuerde dann komisch klingen aber das ergebniss mueste doch das selbe sein oder nicht?
Wenn die Einheiten nicht stimmen, ist es falsch. Man muss Beschleunigung mit Zeit Multiplizieren um eine Geschwindigkeit zu erhalten. Das macht man Implizit, wenn man in Spielen Geschwindigkeit & Positionen per Frame berechnet (sachen mit 1 Multiplizieren oder durch 1 Teilen ist ja kein Problem).
Einfach so ne Wurzel ziehen kann man in keinem Fall machen, wenn man was physikalisch basierendes machen möchte - dann kann man gleich blanke Zahlen ohne Einheiten nehmen.
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)
 

Haubitze

BeitragSo, Jan 23, 2011 14:17
Antworten mit Zitat
Benutzer-Profile anzeigen
okay dann vergess ich meine idee gleich mal wieder Very Happy
war auch nur hn gedanke der zugegebener masen nicht in die reale welt passt.

werde mich trozdem mal mit dem problem auseinander setzen da ich
das sicher auch mal brauchen werde.

also ueberlest meinen vorhergehenden post bitte mit absicht XD

salute

Vertex

BeitragSo, Jan 23, 2011 14:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Haubitze: Sqrt(a*b) = Sqrt(a)*Sqrt(b) und Sqrt(a/b) = Sqrt(a)/Sqrt(b)

Code: [AUSKLAPPEN]
       m
9,81 * -- | Sqrt(.)
       s²

             Sqrt(m)
Sqrt(9,81) * -------
             |s|


Also Meter hoch 1/2 ist vllt. physikalisch nicht so häufig anzutreffen, aber mathematisch korrekt. Ähm Betrag von Sekunde ist sicherlich auch zweifelhaft, kann man sicher weglassen.
Siehe http://www.j3l7h.de/videos.html#a1 unter "multiplikative Einheiten", da ist das wunderbar erläutert.

mpmxyz: Danke ersteinmal! Arg, das muss ich mir nochmal durch den Kopf gehen lassen. Ähm Integrate f(t) dt was gibt das eigentlich zurück? Aus dem Bauch heraus eine Funktion, die t auf eine Fläche von 0 bis t unter f(t) abbildet. Aber gut, dass muss ich nochmal aufmalen.

Ciao Olli
vertex.dreamfall.at | GitHub

Vertex

BeitragSo, Jan 30, 2011 15:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Es ist fast gelöst:
BlitzBasic: [AUSKLAPPEN]
Const GRAPHICS_X_OFFSET = 50 ; [px]
Const GRAPHICS_Y_OFFSET = 600 - 50; [px]
Const GRAPHICS_X_SCALE# = 80.0 ; [px/m]
Const GRAPHICS_Y_SCALE# = -80.0 ; [px/m]

Type TVector
Field X#
Field Y#
End Type

Function CreateVector.TVector(X#, Y#)
Local V.TVector = New TVector
SetXY(V, X, Y)
Return V
End Function

; R = V
Function CopyVector(R.TVector, V.TVector)
R\X = V\X
R\Y = V\Y
End Function

; V = (X, Y)
Function SetXY(V.TVector, X#, Y#)
V\X = X
V\Y = Y
End Function

; R = A + B
Function AddVector(R.TVector, A.TVector, B.TVector)
R\X = A\X + B\X
R\Y = A\Y + B\Y
End Function

; R = A - B
Function SubstractVector(R.TVector, A.TVector, B.TVector)
R\X = A\X - B\X
R\Y = A\Y - B\Y
End Function

; R = S*V
Function ScaleVector(R.TVector, V.TVector, S#)
R\X = S*V\X
R\Y = S*V\Y
End Function

; |V|
Function VectorLength#(V.TVector)
Return Sqr(V\X*V\X + V\Y*V\Y)
End Function

Function DrawVector(V.TVector)
Local X% = GRAPHICS_X_OFFSET + GRAPHICS_X_SCALE*V\X
Local Y% = GRAPHICS_Y_OFFSET + GRAPHICS_Y_SCALE*V\Y

Oval(X - 2, Y - 2, 5, 5)
End Function

; Eingangswerte
Global Mass# = 0.65 ; [kg]
Global ImpactDuration# = 0.25 ; [s]
Global ImpactForce.TVector = CreateVector(10.0, 25.0) ; [N = kg*m/s²]
Global GravityAcceleration.TVector = CreateVector(0.0, -9.81) ; [m/s²]
Global GravityForce.TVector = New TVector
ScaleVector(GravityForce, GravityAcceleration, Mass) ; [m*kg/s²]
Global Velocity0.TVector = CreateVector(0.0, 0.0) ; [m/s]
Global Position0.TVector = CreateVector(0.0, 1.8) ; [m]

; Zu berechnende Variablen
Global Velocity.TVector = New TVector
Global Position.TVector = New TVector
Global Acc.TVector = New TVector ; Akkumulator

Graphics(800, 600, 0, 2)
SetBuffer(BackBuffer())

For t# = 0.0 To 10.0 Step 0.01 ; [s]
If KeyDown(1) Then Exit

Local u# = ImpactDuration*(t - ImpactDuration)*Heaviside(t - ImpactDuration)
Local v# = (ImpactDuration^2.0 - t^2.0)/2.0*Heaviside(t - ImpactDuration)
Local w# = -t^2.0/2.0

ScaleVector(Acc, ImpactForce, (u + v + w)/Mass)
CopyVector(Position, Acc)


ScaleVector(Acc, GravityForce, t^2/(2.0*Mass))
AddVector(Position, Position, Acc)

ScaleVector(Acc, Velocity0, t)
AddVector(Position, Position, Acc)

AddVector(Position, Position, Position0)


Cls()
DrawGround()
Color(255, 0, 255)
DrawVector(Position0)
If t < ImpactDuration Then
Color(0, 255, 255)
Else
Color(255, 255, 255)
EndIf
DrawVector(Position)

Color(255, 255, 255)
Text(10, 10, "t = " + t + " s")
Text(10, 25, "r.x = " + Position\X + " m")
Text(10, 40, "r.y = " + Position\Y + " m")
Flip()

If Position\Y <= 0.0 Then Exit
Next

WaitKey()
End

Function Heaviside#(x#)
If x < 0.0 Then
Return 0.0
Else If x >= 0.0 Then
Return 1.0
EndIf
End Function

Function DrawGround()
Line(0, GRAPHICS_Y_OFFSET, GraphicsWidth() - 1, GRAPHICS_Y_OFFSET)
End Function


Das simuliert einen Basketball mit 0,65 kg Masse, der aus einer Höhe von 1,80 m mit rund der 4x Schwerkraft nach rechts oben 0,25 s lang geworfen wird.

Die Herleitung ist unter folgenden Link zu finden: Herleitung die letzte Formel der ersten Seite ist programmtechnisch umgesetzt, aber es gibt noch einen Vorzeichenfehler.

Den Vorzeichenfehler finde ich schon noch irgendwie, aber mich interssiert die Integration der Heaviside-Funktion (Theta, H, Sprungfunktion und wie sie sonst noch genannt wird). a*H(-x + c) + b bedeutet, von x < c ist sie a + b und für x >= c ist sie b. Die Herleitung für die Integration dieser Funktion ist auf Seite 2 des PDFs. Die Integration von mir unterscheidet sich blöderweise von der von Wolframalpha. Die beiden im Vergleich mit a = 2, b = 3, c = 1 einfach bei wolframalpha.com folgendes eingeben:
Code: [AUSKLAPPEN]
plot [2(x-1)*H(1 - x) + 3x, x(2 + 3) + 2(1 - x)H(x - 1)]

(Direktlink funktioniert nicht, da die URL von phpBB falsch geparst wird)
Vielleicht findet ja jemand den Fehler auf Seite 2 des PDFs Smile

Ciao Olli

mpmxyz

BeitragMi, Feb 02, 2011 20:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Vertex,
du vergisst einen Aspekt des unbestimmten Integrals: +C
Daher kannst du die Funktion beliebig hoch- und herunterschieben.
mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group