Seil auspendeln lassen...

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

onkelz89

Betreff: Seil auspendeln lassen...

BeitragMo, Mai 28, 2007 13:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

hab folgenden Code eben erstellt. Klappt soweit auch ganz gut, nur wie lasse ich das Seil auspendeln? Man müsste ja irgendwie die Geschwindigkeit von dem Körper messen (der unten hängt) oder???

Code: [AUSKLAPPEN]
Graphics 800,600,32,2
SetBuffer = BackBuffer()

laenge=150
x=450
y=300
xa=400
ya=300

timer=CreateTimer(45)
While Not KeyHit(1)
Cls

Color 200,200,200
Line xa,ya,x,y
Color 0,0,200
Rect x,y,5,5

y=y+1 ;vereinfacht schwerkraft

mom=0
If xa>x Then mom=mom+(xa-x)
If xa<x Then mom=mom+(x-xa)
If ya>y Then mom=mom+(ya-y)
If ya<y Then mom=mom+(y-ya)
If mom>laenge Then
   For i = 0 To (mom-laenge)
      If xa>x Then x=x+1
      If xa<x Then x=x-1
      If ya>y Then y=y+1
      If ya<y Then y=y-1
   Next
EndIf

If KeyDown(81) Then xa=xa+2    ;Num Pad Tasten 1 & 2
If KeyDown(79) Then xa=xa-2

If KeyDown(74) Then laenge=laenge-1     ;Num Pad + & -
If KeyDown(78) Then laenge=laenge+1

Text 10,10,mom+" Meter"

WaitTimer(timer)
Flip
Wend

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, Mai 28, 2007 13:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, erstmal heisst es ''SetBuffer BackBuffer()'' und nicht ''SetBuffer = BackBuffer()'', ganz wichtig! Sonst ruckelte es nur so rum. Wink

Und jetzt zu deinen Fragen:

Zum Auspendeln brauchst du zusätzlich zu deiner Position noch eine Geschwindigkeitsvariable. Was ich gerne wissen würde: Willst du ein Pendel welches an einer Stange verbunden ist, oder an einem Gummiband?
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

onkelz89

BeitragMo, Mai 28, 2007 13:35
Antworten mit Zitat
Benutzer-Profile anzeigen
hectic hat Folgendes geschrieben:
Also, erstmal heisst es ''SetBuffer BackBuffer()'' und nicht ''SetBuffer = BackBuffer()'', ganz wichtig! Sonst ruckelte es nur so rum. Wink

Und jetzt zu deinen Fragen:

Zum Auspendeln brauchst du zusätzlich zu deiner Position noch eine Geschwindigkeitsvariable. Was ich gerne wissen würde: Willst du ein Pendel welches an einer Stange verbunden ist, oder an einem Gummiband?


Oh das mit dem ''SetBuffer = BackBuffer()" hab ich sehr oft gemacht.. hm vielleicht werden ein paar Projekt ab jetzt doch noch was werden Wink Danke für die Info.

Und bin gerade am testen mit der Geschwindigkeitsvariabel... muss noch en bissel probieren befors klappt.

Es soll eigentlich ein Seil sein mit ein wenig toleranz. Aber hab erstmal keine "feinheiten" eingebaut das wär dann ja noch schwerer. Wüsste mom auch gar nicht wie ich es als Seil darstellen könnte...
 

onkelz89

BeitragMo, Mai 28, 2007 13:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Kurzer Stand der Dinge:

Code: [AUSKLAPPEN]
Graphics 800,600,32,2
SetBuffer BackBuffer()

laenge=150
x=450
y=300
xa=400
ya=300

xb=0;backup
xs=0;x koordinaten speed

timer=CreateTimer(45)
While Not KeyHit(1)
Cls

xb=x

Color 200,200,200
Line xa,ya,x,y
Color 0,0,200
Rect x,y,5,5

y=y+1 ;vereinfacht schwerkraft
x=x+xs

mom=0
If xa>x Then mom=mom+(xa-x)
If xa<x Then mom=mom+(x-xa)
If ya>y Then mom=mom+(ya-y)
If ya<y Then mom=mom+(y-ya)
If mom>laenge Then
   For i = 0 To (mom-laenge)
      If xa>x Then x=x+1
      If xa<x Then x=x-1
      If ya>y Then y=y+1
      If ya<y Then y=y-1
   Next
EndIf

If xb<x Then xs=2
If xb>x Then xs=-2

If KeyDown(81) Then xa=xa+5
If KeyDown(79) Then xa=xa-5

If KeyDown(74) Then If laenge>5 Then laenge=laenge-1
If KeyDown(78) Then If laenge<200 Then laenge=laenge+1

Text 10,10,mom+" Meter"

WaitTimer(timer)
Flip
Wend


Jetzt geht es aber naja... halt noch nicht soooo realistisch Razz
Und hat einer ne Idee wie ich das verfeinern könnte?

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, Mai 28, 2007 13:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Problem ist, dass du es versucht mit If-Abfragen zu machen und dadurch natürlich unrealistisches Verhalten zu beobachten gekommst. Besser ist es auf rein mathematischem Wege zu lösen. Dazu habe ich mal ein Seil gemacht, was aber schon etwas länger her ist und somit sicherlich nicht die eleganteste Lösung ist: Code: [AUSKLAPPEN]
Graphics 800,800,0,2
SetBuffer BackBuffer()

q%=0;Allgemeine Schleifenvariable
ln#=20;Länge der einzelnen Kettenglieder
st%=20;Gesamtanzahl der Kettenglieder
s1#=0;Ist/länge des aktuellen Kettenglieds
s2#=0;Soll/länge des aktuellen Kettenglieds
dx#=0;Zwischenvariable für Phytagoraz
dy#=0;Zwischenvariable für Phytagoraz
wk#=0;Winkel des aktuellen Kettenglieds
Dim xp#(st)   ;X-Position
Dim yp#(st)   ;Y-Position
Dim x1#(st)   ;X-1.Zwischenposition
Dim y1#(st)   ;Y-1.Zwischenposition
Dim xg#(st)   ;X-Geschwindigkeit
Dim yg#(st)   ;Y-Geschwindigkeit
hh#=2 ;Steifigkeit einzelner Glieder

;Mausposition auf mitte des Bildschirmes
MoveMouse 400,200

;Kettenposition auf mitte des Bildschirmes
For q=0 To st
 xp(q)=400
 yp(q)=200+q*ln;(q Mod 2)*ln
 x1(q)=xp(q)
 y1(q)=yp(q)
Next




While Not KeyHit(1)

 ;Erstes Kettenglied auf Mausposition setzen
 xp(0)=MouseX()
 yp(0)=MouseY()

For w=1 To 20
 xp(0)=MouseX()
 yp(0)=MouseY()

 For q=0 To st-1
  wk=(ATan2(yp(q)-yp(q+1),xp(q)-xp(q+1)))Mod 360
  dx=(xp(q+1)+Cos(wk)*ln)-xp(q)
  dy=(yp(q+1)+Sin(wk)*ln)-yp(q)
  xp(q+1)=xp(q+1)-dx/2.0
  yp(q+1)=yp(q+1)-dy/2.0
  xg(q+1)=xg(q+1)-dx/2.0
  yg(q+1)=yg(q+1)-dy/2.0
  xp(q)=xp(q)+dx/2.0
  yp(q)=yp(q)+dy/2.0
  xg(q)=xg(q)+dx/2
  yg(q)=yg(q)+dy/2
 Next
Next

 For q=1 To st
  yg(q)=yg(q)+.02
  xg(q)=xg(q)*.999
  yg(q)=yg(q)*.999
  xp(q)=xp(q)+xg(q)
  yp(q)=yp(q)+yg(q)
  Color 120+(q Mod 2)*120,0,0
  Line xp(q),yp(q),xp(q-1),yp(q-1)
 Next

 ;Cursorspielerei
 If KeyDown(203) xg(st)=xg(st)-1
 If KeyDown(205) xg(st)=xg(st)+1
 If KeyDown(200) yg(st)=yg(st)-1
 If KeyDown(208) yg(st)=yg(st)+1

 ;Mausposition zeichnen
 Color 200,200,200
 Oval xp(0)-4,yp(0)-4,9,9,0

 ;Standardkramm
 Flip
 Cls
Wend
End

Willst du noch eine Erweiterung dazu, die zudem wesentlich eleganter programmiert wurde, so schaue dir mal folgenden Link an https://www.blitzforum.de/foru...p;start=36 Gleich der erste Beitrag (hier auf 36 gesetzt).
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

onkelz89

BeitragMo, Mai 28, 2007 14:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Shocked Wow, ok also das find ich mal richtig cool.
Wie kommt man auf sowas? Also ich mein nur durch ausprobieren gehts ja nu net...
Gibt es ne Site wo so Formeln drin stehen oder selber im Physikbuch nachgeschaut?

Aja noch ne Frage: Wie weit darf man den Quellcode für eigene Projekte benutzen?

Und vielen Dank für die Infos

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, Mai 28, 2007 14:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Idee es nachzuprogrammieren hatte ich, als ich bis zum Umfallen die Demo von ''Bridge Builder'' gespielt habe. Die Formeln dazu habe ich mir selber ausgedacht, doch die Formeln sind nicht neues. Physik-Engines zB nutzen ähnliche Varianten bzw. Methoden um physikalisches Verhalten zu simulieren. Also dem Aufbau einzeln verbundener Knotenpunkte die in ihrer Gesamtstruktur ein Körper bilden.

Was den Code im Codearchiv betrifft, so habe ich mir https://www.blitzforum.de/foru...hp?t=17380 durchgelesen und bin mir im klaren, was es zu bedeuten hat. Den Code den ich hier oben gepostet habe, würde ich dir nicht empfehlen ihn zu nutzen (war nur als Grundgedanke angedacht), da ich es mitlerweile anders machen würde. Aber wenn du genau diesen nutzen möchtest, so bleibt dir auch dieser offen. Wink

Weil du anscheinend so begeistert von diesem Teil bist, hier noch ein kleines Pregame von mir http://www.hectic.de/data/buggy_2d.rar Dabei zuvor die liesmich.txt lesen.

Viel Spaß..!
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

onkelz89

BeitragMo, Mai 28, 2007 14:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Danke für die Hilfe Very Happy
Das mit der Autophysik is auch cool. Basiert das auf dem gleichen Prinzip?

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, Mai 28, 2007 14:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, die Autophysik ist bis auf wenige Ausnahmen aus dem oben genannten Editor entnommen worden.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

FWeinb

ehemals "ich"

BeitragMo, Mai 28, 2007 19:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Köntest du Hectic nich mal ein Tutorial zu alle dem Schreiben denn dann würde man das auch alles Verstehen ^^

mfg

ich
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, Mai 28, 2007 20:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmmm, also so schwer ist es ja nun nicht. Kannst ja mal versuchen, dir alle Beiträge durch zu lesen. Viele hatten Fragen an mich und ich habe jedem versucht es zu erklären. Im grunde habe ich es sogar mehrmals immer wieder erklärt und versucht jedesmal anders zu formulieren. Doch bei recht einseitiger Technik, kommt doch immer das selbe bei raus.

Im grunde geht es um KPs (KnotenPunkte beinhalten: Position und Geschwindigkeit) und VKs (VerKlinkungen beinhalten Informationen, welche KPs miteinander verbunden sind). Ein entsprechendes Update beider Schleifen macht das ganze physikalisch so korrekt.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

FWeinb

ehemals "ich"

BeitragMi, Mai 30, 2007 15:00
Antworten mit Zitat
Benutzer-Profile anzeigen
JA gut aber ich meint ja auch nur damit du es eben nicht ständieg wieder Erklähren must ^^
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group