Seite 1 von 2
Gravitation
Verfasst: 13.12.2007 19:46
von Tompazi
Hi, ich habe folgendes Problem, ich will den "Ball hinunter fallen lassen" und zwar mit linear zunehmender geschwindigkeit das er dann wieder unten abprallt und - jetzt mein problem -, dass er dann wie ein normaler Ball auf der erde es tun würde, immer weniger hoch springen soll und dann irgendwann am boden liegen bleiben sollte.
Wie mache ich das?
hier mal mein Code:
Code: Alles auswählen
InitSprite()
InitKeyboard()
BallX = 10 ; Ballposition X Achse
BallY = 10 ; Ballposition Y Achse
BallYA = 10 ; Ball-anfangs-position Y Achse
tA = Date(); Anfangszeit
sX = 1 ; Geschwindigkeit X Achse
sY = 1 + a ; Geschwindigkeit Y Achse
OpenScreen(1024,768,32,"Gravi")
Repeat
ClearScreen(000000$)
t = Date() ; jetztZeit
tI = t - tA + 1 ; Gefahrene Zeit
v = BallY - BallYA + 1 ; Weg
a = v / tI ; Beschleunigung Y Achse
If sY > 0
sY = 1 + a ; Geschwindigkeit Y Achse
Else
sY = -1 - a ; Geschwindigkeit Y Achse
EndIf
If BallX < 0
sX = -sX
EndIf
If BallX > 1024
sX = -sX
EndIf
If BallY < 0
sY = -sY
EndIf
If BallY > 768
sY = -sY
EndIf
BallY + sY
BallX + sX
StartDrawing(ScreenOutput())
DrawingMode(1)
FrontColor($FFFFFF)
Circle(BallX,BallY,10)
StopDrawing()
FlipBuffers()
ExamineKeyboard()
Until KeyboardPushed(1)
Danke Tompazi
Ps: Weiß nicht wieso aber der ball steigt ein bischen bevor er herunter fällt.
Verfasst: 13.12.2007 20:09
von hardfalcon
Da musst du einen Reibungsfaktor für den Luftwiderstand in deine Rechnung mit einbeziehen. Wie das aber genau geht, weiss ich leider auch nicht...
Verfasst: 13.12.2007 20:15
von STARGÅTE
ganz einfach du entziehst dem Ball am aufplallpunkt engergie , also:
dadurch prallt er nur noch mit 90% der aufplallgeschw. wieder nach oben
Ich denke mal für diese Sache reich diese grobe schätzung der Reibung, kannst den Faktor natürlich verändern
EDIT: habe mein DEin code zu laufen gebracht:
Code: Alles auswählen
InitSprite()
InitKeyboard()
BallX.f = 100 ; Ballposition X Achse
BallY.f = 100 ; Ballposition Y Achse
sX.f = 5 ; Geschwindigkeit X Achse
sY.f = 0 ; Geschwindigkeit Y Achse
a.f = 0.0981 ; Beschleunigung
Reibung.f = 0.9
OpenScreen(1024,768,32,"Gravi")
Repeat
ClearScreen(000000$)
sY + a ; Gravitation
BallY + sY
BallX + sX
If BallX < 0
BallX = 0
sX = -sX * Reibung
EndIf
If BallX > 1024
BallX = 1024
sX = -sX * Reibung
EndIf
If BallY < 0
BallY=0
sY = -sY * Reibung
EndIf
If BallY > 768
BallY = 768
sY = -sY * Reibung
EndIf
StartDrawing(ScreenOutput())
DrawingMode(1)
FrontColor($FFFFFF)
Circle(BallX,BallY,10)
StopDrawing()
FlipBuffers()
ExamineKeyboard()
Until KeyboardPushed(1)
Du hattest n paar kleine fehler, jetzt läuft der Code so wie du haben wolltest

Verfasst: 13.12.2007 20:38
von Vermilion
Man müsste doch noch auch die Dichte/Masse des Körpers sowie Material berücksichtigen, wenn man es wirklich realistisch machen will...
Verfasst: 13.12.2007 20:42
von STARGÅTE
ja logisch, aber da er eh nur n Kreis springn lässt ist das "scheiß egal".
Klar wäre das Material wichtig, wenn man darstellen will wie sich der Körper beim auftreffen verformt oder ob er vllt garnicht mehr hochkommt (sandsack)
Verfasst: 13.12.2007 22:45
von Fluid Byte
Damit der Ball nicht ewig weiterläuft müsste man doch die Reibung bei Kollision auf beiden Achsen berücksichtigen oder?
Code: Alles auswählen
If BallX < 0
BallX = 0
sX = -sX * Reibung
sY * Reibung
EndIf
If BallX > 1024
BallX = 1024
sX = -sX * Reibung
sY * Reibung
EndIf
If BallY < 0
BallY=0
sY = -sY * Reibung
sX * Reibung
EndIf
If BallY > 768
BallY = 768
sY = -sY * Reibung
sX * Reibung
EndIf
Ich weiß nicht ob das physikalisch korrekt ist aber es funktioniert.
Verfasst: 13.12.2007 23:07
von NicTheQuick
Die Luftwiderstandskraft hängt ab von der Geschwindigkeit und der Form des
Objektes, das Material ist egal, die Masse aber auch wieder nicht.
Dazu kommt noch, dass beim Aufprall Energie in Form von Wärme verloren
geht, weil sich die Objekte (Ball und Boden) mehr oder weniger stark
verformen. Das hängt jetzt wiederum nur vom Material ab. Je nach dem wie
leicht sich das Material in seinem elastischen Bereich verformen lässt, ist die
Reibung größer oder kleiner. Dringt die Verformungskraft über den
elastischen Bereich heraus, dann wandelt sich ein Teil der Energie in Wärme
um (siehe Sandsack) und der Ball springt nicht mehr wirklich hoch oder bleibt
sogar einfach liegen.
Verfasst: 13.12.2007 23:24
von STARGÅTE
lol da könnte mal endlos viele Sachen aufzählen ^^
- Die Gravitationskraft nimmt mit zunehmende Höhe ab
- Wird das Objekt
sehr schnell muss mal relativistischen Formeln rechnen da man sonst die Lichtgeschwindigkeit überschreiten würde.
- In alles Gasen/Flüssigkeiten gibt es auch Auftriebskräft die entgegen der Gravitation wirken.
....
@NicTheQuick: Bitte nicht von verlorener Energie reden : "beim Aufprall Energie in Form von Wärme verloren geht"
Sie geht nicht verloren, sie wird nur umgewandelt
Aber zurück zum Thema, wurde dir (Tompazi) jetzt geholfen ?

Verfasst: 14.12.2007 15:05
von NicTheQuick
STARGÅTE hat geschrieben:@NicTheQuick: Bitte nicht von verlorener Energie reden : "beim Aufprall Energie in Form von Wärme verloren geht"
Sie geht nicht verloren, sie wird nur umgewandelt

Die Formulierung ist nicht falsch, da Bewegungsenergie verloren geht. Und
von der spreche ich ja die ganze Zeit. Und wenn sie in Form von
Wärmeenergie verloren geht, dann heißt das nichts anderes als umwandeln.
Verfasst: 16.12.2007 15:11
von 50-Pfennig
Also ich würde einfach den Impulserhaltungssatz und den Energieerhaltungssatz anwenden. Dazu braucht man ja aber Massen, die man sich dann ausdenken müsste.