Physikalisch korrekter Wurf
Übersicht

![]() |
sbrogBetreff: Physikalisch korrekter Wurf |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kennt jemand Artikel und Formeln über dieses Thema ? Wär echt mal spannend so was zu proggen ![]() |
||
- Zuletzt bearbeitet von sbrog am Mo, Jul 05, 2004 20:28, insgesamt einmal bearbeitet
Blitzkrieg Bop |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi!
Hast du kein Tafelwerk/ Formelsammlung ? Da steht so ne Formel drin... |
||
~ Hey Ho Let's Go ~ |
![]() |
sbrog |
![]() Antworten mit Zitat ![]() |
---|---|---|
Leider nicht, abgesehen davon, ich versteh bei so Formeln nur die Hälfte. | ||
![]() |
Lord_Vader |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey ich kämpfe mich auch mit Physik ab ![]() Nein mal ehrlich das was du meinst is ne kurve, parabel oder wie man das nennt, ne quadratische gleichung. f(x)= 2x+1 2x ist die scalierung das heisst die kugel fliegt 2mal so hoch aber noch gleich weit. +1 ist nur der startpunkt der y achse. x ist halt die weite, für die setzte den wert ein und rechnest. Dann haste die höhe der kugel auf der bestimmten x koordinate ![]() ![]() |
||
Edlothiol |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das war jetzt eine lineare Gleichung ![]() Wenn man einen Gegenstand wirft, fliegt er wie schon gesagt in einer Parabel. Die Gleichung sieht so aus: y = x² + px + q Für p und q muss man eben passende Werte einsetzen. Mathe 9. Schuljahr ![]() |
||
![]() |
sbrog |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: f(x)= 2x+1 2x
was bedeutet denn das 2x ? Meinst du f(x) = 2x +1 * 2x ??? Wie ich das sehe, ist das wohl nur die halbe Wahrheit. Irgendwie muss doch auch die Wurfstärke, die Erdanziehungskraft , die Wurfhöhe und der Abschusswinkel berücksichtigt werden.[/quote] |
||
![]() |
Lord_Vader |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sry natürlich ² ^^ Nein aber sonst hats gestimmt bei meiner gleichung, und wir hatten es im 10. ![]() f(x) ist das selbe wie y ![]() |
||
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
wenn ich das programmieren müsste (und das habe ich schon):
ich hab die Variablen x und y des Objekts. Ich füge die Variable x_speed# und y_speed# hinzu. wenn ich jetzt ein Objekt werfen will, dann: y_speed# = abschussgeschwindigkeit * sin ( abschusswinkel ) x_speed# = abschussgeschwindigkeit * cos( abschusswinkel ) Der Luftwiderstand und die Reibung sei vernachlässigt. Während des Flugs bleibt x_speed# bis zum auftreffen konstant! y_speed# nimmt immer um einen bestimmten Wert zu (Gravitationskonstante). Das war mein Vorschlag. Aber ihr könnt gerne mal zeigen, wie ihr das mit ner Funktion lösen wollt (stell' ich mir recht umständlich vor). Ürbigens wenn man wie gesagt die Reibung vernachlässigt ist dieser Wurf physikalisch korrekt. Schwierig wird es halt nur wenn man schräge Wände programmieren will. MfG D2006 |
||
![]() |
Michi1988 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich glaube D2006 trifft es schon ziemlich genau. Diese ganzen sachen
zu berücksichtigen ist glaube ich ohne besonders gute Physik Kenntnisse nahezu unmöglich. Viel zu viele Probleme und Einflüsse. z.b. eine unwucht der Kugel oder sonstiges. Michi |
||
![]() |
stfighter01 |
![]() Antworten mit Zitat ![]() |
---|---|---|
naja ein bisschen luftwiderstand zu simulieren ist nicht so schwer.
aber wie gesagt die kollisionsprüfung ist der horror schlechthin (zumindest bei unförmigen gegenden) für den reibungsfreien flug würd ich mich an D2006 seine variante halten. mfg stfighter |
||
Denken hilft! |
Cloud |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
die Wurfbahnparabel ist:
y = x * tan(a) - ( (g * x²) / (2V0² - cos² a) ) dabei ist: g = die Gravitationskonstante 9,81 m/s² V0 = ist die abwurfgeschwindigkeit a = der abwurfwinkel die Formel sollte meines Wissens so richtig sein sonst nochmal Googeln, sie berücksichtigt aber nicht den Luftwiderstand sollte so aber ausreichen. |
||
Duron 1200 | 256 RAM | Geforce 2 TI |
![]() |
sbrog |
![]() Antworten mit Zitat ![]() |
---|---|---|
Cloud hat Folgendes geschrieben: die Wurfbahnparabel ist:
y = x * tan(a) - ( (g * x²) / (2V0² - cos² a) stimmt das dann so in bb übersetzt ? g= 9,81 abwurfwinkel = 30 v0 = 10 y = x * Tan(abwurfwinkel) - ((g * x^2)/(2*v0^2-Cos(a)^2)) |
||
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das hatte ich mal zum testen gemacht .
Man kann dabei auf ein Ziel werfen und es wird immer getroffen . Vieleicht kannste es ja gebrauchen . LM werfen RM Ziel ändern Code: [AUSKLAPPEN] Graphics3D 640,480,16,0 SetBuffer BackBuffer() AppTitle " Steine werfen" Global cam=CreateCamera() CameraRange cam,1,10000 ;CameraClsMode cam,0,True light=CreateLight() PositionEntity cam,0,0,-50 Global ziel=CreateCube() EntityColor ziel,255,255,255 ScaleMesh ziel,0.5,0.5,0.5 ScaleMesh ziel,10,10,10 EntityType ziel,2 EntityPickMode ziel,2 Global stein=CreateSphere(8) ScaleMesh stein,0.5,0.5,0.5 ScaleMesh stein,10,10,10 EntityType stein,1 EntityRadius stein,5 HideEntity stein Type SteinType Field Entity Field xs# ;Stein Start Field ys# Field zs# Field xe# ;Ziel position Field ye# Field ze# Field wi# Field ws# Field st# Field dy# Field dz# Field l# ;Flugbahn länge Field treffer Field count Field blow# Field sollweg End Type Global cStein.SteinType ;----------------------------------------------------- Collisions 1,2,2,2 ;stein mit ziel als sphere to polygon ;----------------------------------------------------- While Not KeyHit(1) If MouseHit(1) Then CameraPick cam,MouseX(),MouseY() pe=PickedEntity() If pe Then SteinWerfen Rnd(-50,50),EntityY(cam),EntityZ(cam)+20,pe EndIf If MouseHit(2) Then PositionEntity ziel,Rnd(-50,50),Rnd(0,50),Rnd(50,500) EndIf SteineUpdaten UpdateWorld RenderWorld Text 0,0,"Maustaste 1 = Werfen , 2 = Ziel bewegen" Flip Wend End ;----------------------------------------------------- Function SteinWerfen(xs#,ys#,zs#,ZielEntity) Local dx#,dy#,dz# cStein=New SteinType cStein\Entity=CopyEntity(Stein) EntityColor cStein\Entity,Rnd(64,200),Rnd(64,200),Rnd(64,200) cStein\wi=-90 ;-90 bis 90 = 180 cStein\ws=180 cStein\st=4 cStein\xs=xs cStein\ys=ys cStein\zs=zs cStein\xe=EntityX(ZielEntity) cStein\ye=EntityY(ZielEntity) cStein\ze=EntityZ(ZielEntity) cStein\dy=0 cStein\dz=0 cStein\treffer=False cStein\count=100 cStein\blow=1 cStein\sollweg=False dx=cStein\xe - cStein\xs dy=cStein\ye - cStein\ys dz=cStein\ze - cStein\zs cStein\l=Sqr(dx*dx+dy*dy+dz*dz)* (Pi/(360 / cStein\ws)) ;das sollte die Flugbahnlänge ergeben !? PositionEntity cStein\Entity,xs,ys,zs PointEntity cStein\Entity,ZielEntity ResetEntity cStein\Entity End Function ;----------------------------------------------------- Function SteineUpdaten() For cStein = Each SteinType If cStein\treffer=False Then Local winkelvonbis#=cStein\ws / cStein\st cStein\dy= (-Sin(cStein\wi)*cStein\l) / winkelvonbis/2 ;bei /2 ist z.B. die max. Flughöhe = der Flugbahnlänge zum Ziel /2 cStein\dz= ( Cos(cStein\wi)*cStein\l) / winkelvonbis MoveEntity cStein\Entity,0,cStein\dy,cStein\dz If CountCollisions(cStein\Entity)>0 Then cStein\treffer=True EndIf If cStein\treffer=True Then cStein\blow=cStein\blow+0.025 ScaleEntity cStein\Entity,cStein\blow,cStein\blow,cStein\blow cStein\count=cStein\count-1 If cStein\count<=0 Then cStein\sollweg=True Else cStein\wi=cStein\wi+cStein\st If cStein\wi>90 Then cStein\sollweg=True EndIf If cStein\sollweg=True Then SteinWeg cStein EndIf Next End Function ;----------------------------------------------------- Function SteinWeg(xStein.SteinType) FreeEntity xStein\Entity Delete xStein End Function ;----------------------------------------------------- Function R2#(x#) ;Runden Return Int(x#*100.0)/100.0 End Function ;----------------------------------------------------- |
||
michaelw |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also richtig macht man das so, hab das auch schon auf dem Taschenrechner etc. programmiert:
x = v * t * cos (a) y = (-g/2) * t^2 + v * t * sin(a) wobei: v = Anfangsgeschwindigkeit (z.b. 50 Km/h) a = Abwurfwinkel (z.b. 45°) g = 9.81 = Fallbeschleunigung t = ist di Zeit, ist am Anfang auf Null zu setzen Man muss jetzt nur die Zeit jedesmal um einen bestimmten Faktor erhöhen und dann halt die x und y Position berechnen. Je nachdem wie viel größer man die Zeit pro Durchlauf macht, desto genauer oder ungenauer wird die Flugbahn gezeichnet. |
||
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die Formel von michaelw haut schon mal hin. Für eine Art "Ballerburg"-Clone (kennt das Game jemand?) reichts völlig aus.
Code: [AUSKLAPPEN] Graphics 800,600,16,2 SetBuffer BackBuffer() Global StX = 0 ; Startposition X Global StY = 500 ; Startposition Y Global x#,y# Global g = 9.81 ; Gravitation Global v = Input("Speed: (1 - 99) : ") ; Geschwindigkeit Global a = Input("Winkel: (0° - 90°): ") ; Winkel Global t# ; Zeit If v < 1 Then v = 1 If v > 99 Then v = 99 a = -a Start = MilliSecs() Repeat ;Cls UpdateBall() UpdateScreen() If y > 500 Then Color 255,255,255 Text 0,30, "Zeit: " + (MilliSecs()-Start) + "ms" Text 0,40, "Entf: " + (x - StX) + "m" Text 0,50, "Ende." Flip WaitKey End EndIf Flip Until KeyHit(1) End ; --- Flugbahn des Balles berechnen --- Function UpdateBall() t# = t + .1 x# = StX + v * t * Cos(a) y# = StY - (-g/2) * t^2 + v * t * Sin(a) End Function ; --- Flugbahn des Balles berechnen --- ; --- Bildschirminhalte anzeigen --- Function UpdateScreen() Color 255,255,255 Oval x-2,y-2,4,4,1 Color 0,0,100 Rect 0,500,800,100,1 End Function ; --- Bildschirminhalte anzeigen --- |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
- Zuletzt bearbeitet von Travis am Do, Jul 08, 2004 13:08, insgesamt 2-mal bearbeitet
![]() |
Mr.Keks |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: x = v * t * cos (a)
das ist eigentlich dasselbe wie das, was D2006 gepostet hat, wenn man von der fallbeschleunigung absieht... naja, und dass man eine formel ist, in die man eine beliebige zeit setzen kann, aber was bringt uns das?
y = (-g/2) * t^2 + v * t * sin(a) die fallbeschleunigung fällt ( ![]() ![]() Code: [AUSKLAPPEN] t# = t + .05
äh, lol? ich glaube, du hast die formel missverstanden travis... =) entweder schreibst du sx = startx + .... und setzt die zeit immer höher oder du setzt die zeit auf eins und schreibst sx = v*.... so wie du es jetzt machst, beschleunigt das geschoss ja sx# = sx + v * t * Cos(a) sy# = sy - (-g/2) * t^2 + v * t * Sin(a) ![]() |
||
MrKeks.net |
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
![]() Jetzt könnte ich mich glatt wieder dran setzen und ein Ballerburg-Clone machen. ![]() |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
michaelw |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@Inarie:
Ja, von D2006, das sind einfach die Gleichungen ineinander eingesetzt, aber dann machst du x einfach immer z.b. um 1 größer. In meiner Formel wird x aber immer berechnet und eben nicht immer um 1 größer. Ich glaub aber das die Wurfparabel Formel die Flugbahn berechnet wie sie mit Luftwiderstand oder so ist, und meine Formeln berechnen theoretische Werte, wie sie ohne Berücksichtigung des Luftwiderstandes wären. Ich hab die Erfahrung gemacht das diese theoretische Flugbahn schöner aussieht, aber muss Jeder selber wissen. |
||
![]() |
stfighter01 |
![]() Antworten mit Zitat ![]() |
---|---|---|
die formeln mögen ja richtig sein, aber ich würd es trotzdem so simulieren:
function feueredigsbums() x_speed= abschussgeschw* sin( winkel ) * zeitkonst y_speed= abschussgeschw* cos( winkel ) * zeitkonst x_pos= startpositionx y_pos= startpositiony end function mainloop start: y_speed= y_speed - gravitiationsbeschleunigung * zeitkonst x_pos= x_pos+ x_speed y_pos= y_pos+ y_speed mainloop end: legende: x,y_speed sind die geschwindigkeiten des objektes (z.b.: 800m/sec) x,y_pos gibt die position des objektes an gravitationsbeschleunigung ( 9.81 m/sec ) zeitkonst: faktor, abhängig von der bildschirmfrequenz um einen gleich schnellen flug auf allen systemen zu gewährleisten ist ausserdem massstab für die geschwindigkeit am bildschirm z.b.: 10 m/sec entspricht 10 cm/sec am bildschirm mfg stfighter |
||
Denken hilft! |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group