Gravitationsspiele

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

hectic

Sieger des IS Talentwettbewerb 2006

Betreff: Gravitationsspiele

BeitragMo, Jul 11, 2005 5:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier mal eine kleine Demo mit Gravitationsberechnungen. Ich habe hier nur noch ein Bewegungswiederstabd eingebaut (Im Weltraum natürlich nicht vorhanden). Damit entstehen seltsame Kometenartige Dinge.

Viel Spaß!

Code: [AUSKLAPPEN]

Graphics 1024,768,16,1
SetBuffer BackBuffer()
Origin 512,384

q%=0
w%=0
xm#=0
ym#=0
xn#=0
yn#=0
dx#=0
dy#=0
fa%=0
st%=600

Dim xp#(st)
Dim yp#(st)
Dim xg#(st)
Dim yg#(st)

For q=1 To st
 xp(q)=Rnd(-120,120)+Rnd(-120,120)
 yp(q)=Rnd(-120,120)+Rnd(-120,120)
;xp(q)=(Rand(0,1)*800)+Rnd(-40,40)
;yp(q)=Rnd(-40,40)
 xg(q)=(+yp(q)/160)
 yg(q)=(-xp(q)/160)
Next




While Not KeyHit(1)
 xm=0
 ym=0

 For q=1 To st
  For w=1 To st
   If Not q=w Then
    dx=xp(q)-xp(w)
    dy=yp(q)-yp(w)
    sq#=0.01/(dx*dx+dy*dy)
    xg(q)=xg(q)-(dx*sq*1.2)
    yg(q)=yg(q)-(dy*sq*1.2)
   End If
  Next
 xg(q)=xg(q)*0.8
 yg(q)=yg(q)*0.8
 xp(q)=xp(q)+xg(q)
 yp(q)=yp(q)+yg(q)
 xm=xm+xp(q)
 ym=ym+yp(q)
 Next

 xn=xn+xm
 yn=yn+ym
 Color 24,24,24
 For q=-512 To 512 Step 200
  Rect -512,q-(yn/st) Mod 200,1024,1
  Rect q-(xn/st) Mod 200,-512,1,1024
 Next

 For q=1 To st
  xp(q)=xp(q)+xg(q)-(xm/st)
  yp(q)=yp(q)+yg(q)-(ym/st)
  fa=Abs(Sqr((xg(q)^2)+(yg(q)^2)))
  If fa>5 Then fa=5
  Color 150+fa*20,50+fa*40,100-fa*10
  Plot xp(q),yp(q)
 Next

 Flip 0
 Cls
Wend
End
  • Zuletzt bearbeitet von hectic am Do, Apr 06, 2006 13:51, insgesamt einmal bearbeitet

Triton

BeitragMo, Jul 11, 2005 16:07
Antworten mit Zitat
Benutzer-Profile anzeigen
sehr schön. Gefällt mir gut. Wird leider schon bei 1000 Objekten ganz schön lahm Smile
Coding: silizium-net.de | Portfolio: Triton.ch.vu

DA

BeitragMo, Jul 11, 2005 16:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Moin,

hübsch anzusehen. Doch vielleicht wärs besser gewesen Writepixelfast anstatt plot zu nehmen.
Plot ist ja ziemlich lahm, deswegen auch diese ruckligen Effekte.

Mfg
Deutscher Blitz Basic Chat
 

BlackTermi

BeitragMo, Jul 11, 2005 18:27
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm ich habs noch mal mit writepixel gemacht, allerdings is das auch noch nich so doll (writepixelfast funzt bei mir nicht vllt ändert ihr euch das ab...)

BlitzBasic: [AUSKLAPPEN]


Graphics 1024,768,16,1
SetBuffer BackBuffer()
Origin 512,384

q%=0
w%=0
xm#=0
ym#=0
xn#=0
yn#=0
dx#=0
dy#=0
fa%=0
st%=600

Dim xp#(st)
Dim yp#(st)
Dim xg#(st)
Dim yg#(st)

For q=1 To st
xp(q)=Rnd(-120,120)+Rnd(-120,120)
yp(q)=Rnd(-120,120)+Rnd(-120,120)
;xp(q)=(Rand(0,1)*800)+Rnd(-40,40)
;yp(q)=Rnd(-40,40)
xg(q)=(+yp(q)/160)
yg(q)=(-xp(q)/160)
Next




While Not KeyHit(1)
ClsColor 255,255,255
Cls
xm=0
ym=0

For q=1 To st
For w=1 To st
If Not q=w Then
dx=xp(q)-xp(w)
dy=yp(q)-yp(w)
sq#=0.01/(dx*dx+dy*dy)
xg(q)=xg(q)-(dx*sq*1.2)
yg(q)=yg(q)-(dy*sq*1.2)
End If
Next
xg(q)=xg(q)*0.8
yg(q)=yg(q)*0.8
xp(q)=xp(q)+xg(q)
yp(q)=yp(q)+yg(q)
xm=xm+xp(q)
ym=ym+yp(q)
Next

xn=xn+xm
yn=yn+ym
Color 24,24,24
For q=-512 To 512 Step 200
Rect -512,q-(yn/st) Mod 200,1024,1
Rect q-(xn/st) Mod 200,-512,1,1024
Next

LockBuffer BackBuffer()
For q=1 To st
xp(q)=xp(q)+xg(q)-(xm/st)
yp(q)=yp(q)+yg(q)-(ym/st)
fa=Abs(Sqr((xg(q)^2)+(yg(q)^2)))
If fa>5 Then fa=5

WritePixel xp(q),yp(q),150+fa*20*$10000 + 50+fa*40*$100 + 100-fa*10
Next
UnlockBuffer BackBuffer()

Flip 0

Wend
End



hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, Jul 11, 2005 20:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey Leute, der Grund für die lahme Berechnung liegt eher nicht am Plot-Befehl. Dies ist eine abgeleitete Version einer Sternenbewegungsberechnung. Das bedeutet, daß jeder X und Y -Wert mit jedem der anderen Sterne berechnet werden muß. Die Anzahl der Berechnungen pro ansteigender Sternenzahl ist expotential!

Bei 600 Sternen wird der erste Stern mit den Positionen aller anderen Sterne verglichen, der Vektor berechnet, dessen Beschleunigung auf die alte Addiert/Subtraiert, und ausgegeben. Dann kommt der zweite Stern der sich die Position des ersten und der allen anderen vornimmt. usw, usw.

Also:
(Sternenanzahl ^ 2) - Sternenanzahl

Triton

BeitragDi, Jul 12, 2005 16:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Gravitationswirkung ist doch in einiger Entfernung fast 0. Wenn man nur Objekte in einem bestimmten Radius überprüft könnte das sicher einiges an Berechnungen einsparen. Wäre zwar nicht mehr 100% Akkurat, aber...naja, schneller Smile

Außerdem steigt es bei dieser formel (Sternenanzahl ^ 2) - Sternenanzahl
Quadratisch an Wink
Coding: silizium-net.de | Portfolio: Triton.ch.vu

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, Jul 13, 2005 3:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Triton,
daß mit der quadratischen Formel stimmt schon. Oder, ist das Verhalten des Exponenten nicht auch so??? Naja egal. Ich habe deinen Rat zur Tat gemacht und erstmal ein kleinen Geschwindigkeitstest durchgeführt.

Hier das Ergebnis:

23825 Zeit, wenn Abgefragt wird und immer berechnet werden muß
14740 Zeit, wenn Abgefragt wird und nie berechnet werden muß
17710 Zeit, wenn immer nur berechnet wird ohne Abfrage

Abgefragt habe ich so:

If Not xp(q)>xp(w)+100 Or xp(q)<xp(w)-100 Or yp(q)>yp(w)+100 Or yp(q)<yp(w)-100 Then

Daraus schließe ich, daß die Abfragen das ganze leider auch nicht schneller machen, da die Abfragen auch Zeit in Anspruch nehmen.

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group