 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
0oFreako0
Anmeldungsdatum: 17.12.2011 Beiträge: 114
|
Verfasst am: 27.04.2012, 08:30 Titel: Gravity und abprall mit cos und sin berechnen? |
|
|
Hallo Leute habe mal wieder eine Frage und zwar.
Wollte ich sowas in der Art umsetzen:
Das mit dem Abschusswinkel und Gravity ist kein Problem nur wie berechne ich es wenn das Objekt auf den boden aufschlägt zb objekt > ground?
das es dann wie in meiner gezeigten Grafik sich verhält? |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 27.04.2012, 09:23 Titel: |
|
|
Sicher nicht mit Sinus und Cosinus. Das kann man ganz allgemein mit einem Beschleunigungsvektor definieren.
Code: |
Dim As Single x = startpositionX, y = startpositionY, dx = startbeschleunigungX, dy = startbeschleunigungY
... Bewegungsschleife...
x += dx ' horizontale beschleunigung
y += dy 'vertikale beschleunigung
dy -= gravitation 'gravitation wäre z.B. 9.81 wenn man hier in physikalisch korrektem Maßstab arbeiten möchte, man kann aber auch einfach Werte nehmen, die "gut aussehen" - vor allem, da man sich sonst noch über ein passendes Aktualisierungsintervall Gedanken machen müsste und die Koordinaten generell sehr schnell wachsen würden.
If(objekt trifft boden) Then 'z.B. y-Koordinate <= 0
dy = (-dy / 10) ' Vertikale Beschleunigung umdrehen und um willkürlich gewählten Faktor 10 (oder beliebigen anderen Wert) abschwächen
dx /= 2 'Horizontale Beschleunigung um willkürlich gewählten Faktor 2 abschwächen.
End If
|
_________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
0oFreako0
Anmeldungsdatum: 17.12.2011 Beiträge: 114
|
Verfasst am: 28.04.2012, 15:02 Titel: |
|
|
Code: | ScreenRes 320,240,32
WindowTitle("Physik Test")
Dim draw_screen As UByte Ptr = ImageCreate(320,240,32)
Dim ground As Integer= 200
Dim x As Double = 10
Dim y As Double = ground -2
Dim mx As Double = 0.2
Dim my As Double = 1.5
Dim gravity As Double = 0.01
Randomize timer
Do
Line draw_screen, (0,0)-(320,240),0,bf
Draw String draw_screen,(0,0),Str(my)
x += mx
y -= my
my -=gravity
If y >= ground Then
my = (-my/2)
EndIf
Circle draw_screen,(x,y),1,RGB(0,0,255)
Line draw_screen,(0,ground)-(320,ground),RGB(255,0,0)
ScreenLock
Cls
Put(0,0),draw_screen
ScreenUnLock
Sleep 10
Loop Until InKey="q"
ImageDestroy draw_screen
End
|
Soweit bin ich schon.. Problem ist das mit der abschwächung man könnte es gut mit ner subtraktion machen aber das dann nciht so realistisch.
und /10 würde auch nicht viel bringen da der wert dann auf unter 0 sich senken würde |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 28.04.2012, 15:30 Titel: |
|
|
Warum sollte ein positiver Wert bei einer Division durch 10 auf einen Wert unter 0 sinken?
Dein Problem ist ein anderes: Wenn sich der Ball unterhalb des Bodens befindet, drehst du seine y-Richtung um. Wenn er es dann aber im nächsten Schritt nicht bis über den Boden schafft, drehst du wieder um und er fällt wieder nach unten. Lösung: Drehe die y-Richtung nur dann um, wenn sich der Ball unterhalb des Bodens befindet und sich gerade nach unten bewegt. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
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.
|
|