Physik?
Übersicht

![]() |
KabelbinderSieger des WM-Contest 2006Betreff: Physik? |
![]() Antworten mit Zitat ![]() |
---|---|---|
In Spielen wie Metal Arms für die Konsolen oder Charlie 2, einem Freewarespiel gib es Hängebrücken mit Realer Physik. Ich habe mal versucht sowas nachzuprogrammieren.
Leider verhält sich dieses...ähm... Ding nicht richtig wie eine Brücke. Es hat zwar auch den trägen Charakter einer Hängebrücke, bildet aber ohne Krafteinwirkung keine Parabel, sondern eine Ecke. Ich hab versucht, das mit Krafteinwirkung und Schwerkraft irgendwie hinzukriegen. Es kann aber sein, dass das der Falsche weg ist. Kann mir da viellecht jemand helfen? hier der Code (Die brücke lässt sich mit der Leertaste in Wallung bringen, um zu zeigen, dass es nicht wirklich eine Starre Ecke ist): Code: [AUSKLAPPEN] AppTitle "H-Brücke"
Graphics 640,480,16,2 SetBuffer BackBuffer() Dim kompo#(7,5) Global move Const gewicht = 10 For i = 1 To 7 kompo(i,1) = 220+i*28 kompo(i,2) = 240 kompo(i,5) = gewicht Next Delay 1500 Repeat For i = 2 To 6 move = 0 move = move - Cos(ATan2(kompo(i,2)-kompo(i-1,2),kompo(i,1)-kompo(i-1,1)))*(kompo(i,1)-kompo(i-1,1))/3 move = move + Cos(ATan2(kompo(i+1,2)-kompo(i,2),kompo(i+1,1)-kompo(i,1)))*(kompo(i+1,1)-kompo(i,1))/3 kompo(i,3) = move move = 0 move = move - Sin(ATan2(kompo(i,2)-kompo(i-1,2),kompo(i,1)-kompo(i-1,1)))*(kompo(i,2)-kompo(i-1,2))/3 move = move - Sin(ATan2(kompo(i+1,2)-kompo(i,2),kompo(i+1,1)-kompo(i,1)))*(kompo(i+1,2)-kompo(i,2))/3 move = move + kompo(i,5) kompo(i,4) = move If KeyDown(57) Then kompo(4,4)=kompo(4,4)-7 kompo(i,1)=kompo(i,1)+kompo(i,3) kompo(i,2)=kompo(i,2)+kompo(i,4) Next For i = 1 To 7 Rect kompo(i,1),kompo(i,2)-5,1,10 If i < 7 Then Line kompo(i,1),kompo(i,2),kompo(i+1,1),kompo(i+1,2) Next Flip Delay 50 Cls Until KeyHit(1) End |
||
<Wing Avenger Download> ◊◊◊ <Macrophage Download> |
![]() |
Xenon |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi!
Du musst vllt. noch Pfeiler reinmachen und die Brücke da ranhängen mit Seilen, ich hoffe du verstehst was ich meine. Wobei es daran nicht liegen wird... Ich werd mich da auch mal ransetzen und das selbt Programmieren probieren, sobald mein Beispiel #8 fertig ist ^^ Xenon |
||
Edlothiol |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich glaube (der code ist mit den Arrays ein bisschen schwer zu lesen), du addierst das Gewicht einfach als Geschwindigkeit, die Schwerkraft wirkt allerdings als Beschleunigung, d.h. du musst Gewicht * Zeit rechnen. | ||
![]() |
KabelbinderSieger des WM-Contest 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe mir mal ein neues Prinzip ausgedacht.
Ich finde, die Ergebnisse, die ich dabei heraubekommen habe sehen garnicht schlecht aus: Die Punkte liegen nur uaf einer Parabel; der Nachteil ist nur, dass die Punkte sklavisch and die Parabel gebunden sind, was bestimmte Schwenksequenzen oder Belastung einzelner Brückenglieder unmöglich macht. (wenn man Strghält kann man Spannungen in der Brücke aufbauen und mit der Leertaste Kann man die Brücken länge auf 8 setzen (sonst 3)): Code: [AUSKLAPPEN] AppTitle "H-Brücke2"
Graphics 640,480,16,1 gewicht# =0 fall# = 0 streb# = 3 bolt = CreateImage(10,10) MaskImage bolt,0,0,0 SetBuffer ImageBuffer(bolt) Color 170,100,0 Oval 0,0,10,10 Color 210,160,20 Oval 2,2,6,6 Dim kompo(20,2) Delay 1000 SetBuffer BackBuffer() Repeat Color 0,160,0 Rect 0,210,220,480 Rect 430,210,220,480 If KeyDown(57) = 1 Then streb = 8.0 Else streb = 3.0 EndIf If KeyDown(29) = 1 Then gewicht = 8 ;Beschleunigung fall = fall + Sgn(streb-gewicht)/20.0 ;Reibung fall = fall * 0.98 ;Übertragung gewicht = gewicht + fall ;anhalten If gewicht<streb+0.15 And gewicht>streb-0.15 Then gewicht = streb For i = 0 To 20 kompo(i,1) = i*10+220 ;UnterAnwendung einer quadratischen Gleichung mit 240 als Verschiebungsvector ;(3.0 ist nur ein korrekturwert) --> kompo(i,2) = (i-10)^2*-gewicht/10+240+(gewicht-3.0)*10.0 Next Color 255,255,255 For i = 0 To 20 If i < 20 Then Line kompo(i,1)+5,kompo(i,2)+5,kompo(i+1,1)+5,kompo(i+1,2)+5 DrawImage bolt,kompo(i,1),kompo(i,2) Next Flip Cls Until KeyHit(1) End |
||
<Wing Avenger Download> ◊◊◊ <Macrophage Download> |
![]() |
stfighter01 |
![]() Antworten mit Zitat ![]() |
---|---|---|
zur 1sten formel
so ganz durchblicke ich deine formel zwar nicht, aber das problem das mir dabei ins auge fällt ist das nicht alle punkte voneinander abhängig sind. diese abhängigkeiten sind aber ziemlich kompliziert zu programmieren, daher würde ich empfehlen das du deine zweite formel noch etwas ausbaust damit sie auch vor, zurück und etwas seitlich schaukeln kann. sollte nicht allzu schwer sein. oder aber du verwendest die tokamak physik, die unterstützt sowas auch. http://playerfactory.proboards...1075570526 mfg stfighter |
||
Denken hilft! |
![]() |
KabelbinderSieger des WM-Contest 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Info: Komme gerade von einer 5 Tägigen Klassenfahrt nach England wieder daher die lange Abwesenheit.
@ stfighter01, ja, so hab ich mir das überlegt, dass alle Punkte von eineander abhängig sind. Das ich auch hier der Fall es ist nur so, dass der erste und der letzte Punkt fixpunkte sind, an denen man keine berechnungen vornehmen muss. Auf der langen Farht nach England hatte ich ne mege Zeit, die Brechnung meines Brückchen nochmal zu überdenken. mir ist dabei eine weitaus simplere Lösung eingefallen. (Atan2.. Wer braucht das den schon ![]() Beeinflussen kann man die Brücke, indem man die 1-5 Tasten drückt. ja, ich glaube ich habe es bald geschafft: Code: [AUSKLAPPEN] AppTitle "H-Brücke3"
Graphics 640,480,16,2 SetBuffer BackBuffer() Dim kompo#(7,5) Global move Const gewicht# = 12 Const U = 10 For i = 1 To 7 kompo(i,1) = 220+i*(200/7) kompo(i,2) = 240 kompo(i,5) = gewicht Next Delay 1500 z = MilliSecs() Repeat For i = 2 To 6 If KeyDown(i)=1 Then kompo(i,5)=40 Else kompo(i,5)=12 EndIf Next For i = 2 To 6 move = 0 move = move - (kompo(i,1)-kompo(i-1,1))/U move = move + (kompo(i+1,1)-kompo(i,1))/U kompo(i,3) = move move = 0 move = move - (kompo(i,2)-kompo(i-1,2))/U move = move - (kompo(i,2)-kompo(i+1,2))/U move = move + (kompo(i,5)/10.0) kompo(i,4)=move kompo(i,1)=kompo(i,1)+kompo(i,3) kompo(i,2)=kompo(i,2)+kompo(i,4) Next For i = 1 To 7 Rect kompo(i,1),kompo(i,2)-5,1,10 If i < 7 Then Line kompo(i,1),kompo(i,2),kompo(i+1,1),kompo(i+1,2) Next Flip Cls Until KeyHit(1) End |
||
<Wing Avenger Download> ◊◊◊ <Macrophage Download> |
![]() |
stfighter01 |
![]() Antworten mit Zitat ![]() |
---|---|---|
schön schauts zwar aus, aber so ganz stimmt deine physik dennoch nicht.
wenn sie WIRKLICH real sein soll musst du eins bedenken. wenn du einen punkt beeinflusst dann wirkt sich das auf alle umliegenden punkte aus (gut hast du gemacht), diese punkte wirken sich wiederrum auf ALLE umliegenden punkte aus (auch auf den vorherigen) dieser übt wieder kräfte auf alle aus usw. die kräfte werden immer schwächer und teilen sich auf, aber verschwinden nie ganz (wie bei einer schwingung z.b.: Stimmgabel) du machst im moment nur einen durchlauf, daher kann das noch nicht ganz richtig sein. aber wie gesagt, schaut auch cool aus. mfg stfighter |
||
Denken hilft! |
![]() |
KabelbinderSieger des WM-Contest 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du hast Recht, stfighter01!
Ich hab die Reibung vergessen! Hier die berichtigte Version: Code: [AUSKLAPPEN] AppTitle "H-Brücke3"
Graphics 640,480,16,1 SetBuffer BackBuffer() Dim kompo#(7,5) Global move# Const gewicht# = 12 Const U = 10 For i = 1 To 7 kompo(i,1) = 220+i*(200/7) kompo(i,2) = 240 kompo(i,5) = gewicht Next Delay 1500 z = MilliSecs() Repeat For i = 2 To 6 If KeyDown(i)=1 Then kompo(i,5)=30 Else kompo(i,5)=gewicht EndIf Next For i = 2 To 6 move = 0 move = move - (kompo(i,1)-kompo(i-1,1))/U move = move + (kompo(i+1,1)-kompo(i,1))/U kompo(i,3) = move move = 0 move = move - (kompo(i,2)-kompo(i-1,2))/U move = move - (kompo(i,2)-kompo(i+1,2))/U move = move + (kompo(i,5)/10.0) move = move * 0.99 kompo(i,4)=move kompo(i,1)=kompo(i,1)+kompo(i,3) kompo(i,2)=kompo(i,2)+kompo(i,4) Next For i = 1 To 7 Rect kompo(i,1),kompo(i,2)-5,1,10 If i < 7 Then Line kompo(i,1),kompo(i,2),kompo(i+1,1),kompo(i+1,2) Next Flip Cls Until KeyHit(1) End |
||
<Wing Avenger Download> ◊◊◊ <Macrophage Download> |
![]() |
Merced |
![]() Antworten mit Zitat ![]() |
---|---|---|
Interessant. Mach doch mal so eine Art "Hängebrücken"-Bridgebuilder daraus? Wäre sicherlich ein lustiges kleines Spiel ![]() |
||
http://www.starship-battles.de.vu
http://www.venture-interactive.de.vu |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, interessant anzusehen, nur leider als Hängebrücke nicht zu gebrauchen. Derzeit ist das Verhältnis zwischen den Punkten nicht Fix, was keiner realen Brücke entspricht (du würdest sicher keine Brücke aus Bungeeseil herstellen wollen). Eine gewisse "Dehnfähigkeit" ist zwar nahezu jedem Material inherent aber bei dem Maßstab der hier verwendet wird kann man das getrost vernachlässigen.
Dem könnte man durch definieren eines Abstandes zum Nachbaren engegenwirken, der nicht überschritten werden darf. Zudem fehlt wirklich die Eigendynamik der einzelnen Brückenelemente. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Merced |
![]() Antworten mit Zitat ![]() |
---|---|---|
Schlagene Argumente *g* Aber das hinzukkriegen dürfte gehen. Und dann wärs bestimmt lustig anzusehen wie die eben erbaute Brücke unter der Last eines Zuges zusammenfällt ![]() |
||
http://www.starship-battles.de.vu
http://www.venture-interactive.de.vu |
![]() |
KabelbinderSieger des WM-Contest 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hab jetzt lang nichts mehr daran gemacht. Grade hab ich mal noch versucht das mit der Dynamik hinzubekommen:
Code: [AUSKLAPPEN] AppTitle "H-Brücke4"
Graphics 640,480,16,1 SetBuffer BackBuffer() Dim kompo#(7,5) Global move# Const gewicht# = 12 Const U = 10 For i = 1 To 7 kompo(i,1) = 220+i*(200/7) kompo(i,2) = 240 kompo(i,5) = gewicht Next Delay 1500 z = MilliSecs() Repeat For i = 2 To 6 If KeyDown(i)=1 Then kompo(i,5)=30 Else kompo(i,5)=gewicht EndIf Next For i = 2 To 6 move = 0 move = move - (kompo(i,1)-kompo(i-1,1))/U move = move + (kompo(i+1,1)-kompo(i,1))/U kompo(i,3) = move move = 0 move = move - (kompo(i,2)-kompo(i-1,2))/U move = move - (kompo(i,2)-kompo(i+1,2))/U move = move + (kompo(i,5)/10.0) kompo(i,4)=kompo(i,4)*0.9 kompo(i,4)=kompo(i,4)+move kompo(i,1)=kompo(i,1)+kompo(i,3) kompo(i,2)=kompo(i,2)+kompo(i,4) Next For i = 1 To 7 Rect kompo(i,1),kompo(i,2)-5,1,10 If i < 7 Then Line kompo(i,1),kompo(i,2),kompo(i+1,1),kompo(i+1,2) Next Flip Cls Until KeyHit(1) End |
||
<Wing Avenger Download> ◊◊◊ <Macrophage Download> |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group