Physik?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Kabelbinder

Sieger des WM-Contest 2006

Betreff: Physik?

BeitragDi, Sep 07, 2004 15:21
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Sep 07, 2004 17:37
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Sep 07, 2004 18:28
Antworten mit Zitat
Benutzer-Profile anzeigen
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.

Kabelbinder

Sieger des WM-Contest 2006

BeitragMi, Sep 08, 2004 21:44
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Sep 10, 2004 15:27
Antworten mit Zitat
Benutzer-Profile anzeigen
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!

Kabelbinder

Sieger des WM-Contest 2006

BeitragSa, Sep 18, 2004 11:22
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink )
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

BeitragSa, Sep 18, 2004 19:19
Antworten mit Zitat
Benutzer-Profile anzeigen
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!

Kabelbinder

Sieger des WM-Contest 2006

BeitragDi, Sep 21, 2004 13:56
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Sep 21, 2004 14:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Interessant. Mach doch mal so eine Art "Hängebrücken"-Bridgebuilder daraus? Wäre sicherlich ein lustiges kleines Spiel Wink
http://www.starship-battles.de.vu
http://www.venture-interactive.de.vu

BladeRunner

Moderator

BeitragDi, Sep 21, 2004 14:36
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Sep 21, 2004 15:05
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink
http://www.starship-battles.de.vu
http://www.venture-interactive.de.vu

Kabelbinder

Sieger des WM-Contest 2006

BeitragDo, Okt 07, 2004 14:46
Antworten mit Zitat
Benutzer-Profile anzeigen
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>

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group