planeten und meteoriten
Übersicht

KnartzBetreff: planeten und meteoriten |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
So hab ich mir es gedacht ...
ein paar meteoriten + planeten - die planeten üben ihre gravitation auf die meteoriten aus ... und die meteoriten fliegen halt rum ... standart und dann kam atan2 ![]() hier meine 2 Probleme #1 die anzeige des atan2 winkels ist "komisch" #2 !achtung mathe! mit atan2 hab ich möchte ich jetzt errechnen in welche richtung die meteoriten abgelenkt werden, da brauch ich jetzt einen kleinen spoiler wie ich das dann mache. Ich bin nicht grade ein mathe-ass (... meine mathelehrer verzweifelten immer ...) BlitzBasic: [AUSKLAPPEN]
danke für eure tips |
||
![]() |
SoNenTyp |
![]() Antworten mit Zitat ![]() |
---|---|---|
Atan2 giebt einen winkel zwischen 180 und -180 zurück.
Aus der Onlinehilfe: Um einen vollen Winkel im Bereich von 0° bis 360° auszurechnen, muss man nur diese Formel anwenden: Winkel#=(ATAN2(y#,x#)+360) MOD 360 Ich hoffe dammit ist dir geholfen. |
||
Gruss Der Typ.
User posted image |
Knartz |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
sorry, hab mich nicht richtig ausgedrückt -
ich wollte wissen wie ich mithilfe von atan2 herausbekommen kann um welche x und y einheiten ich die meteoriten verschieben muss. also muss ich doch so rechnen : x-vector oder y-vector = (gravitation / entfernung²) x dings berechnen - wobei dings jetzt irgendwas mit atan2 sein müsste, oder ? ich hab mir gedacht , das ich auf diese weise einen nach dem anderen planeten auf den vektor aufaddiere und hinterher die bewegungsänderung erreiche. ich muss halt nur rausbekommen wie ich dann die x und y verschiebungen finde. z.b.: g_planet1 ... ... n x-vector = 4 - 2 - 5 - + 4 = 1 thx ********************************************* eure antworten sind weiterhin willkommen ich hatte eine idee ... war eigentlich ganz einfach BlitzBasic: [AUSKLAPPEN]
hab bestimmt was falsch gemacht aber das teste ich später aus ![]() |
||
![]() |
tft |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi....
warum machst du das so Kompliziert? Benutz doch das EntitySystem. Oder hast du nur Blitz 2D? oder Blitz+ |
||
TFT
https://www.sourcemagic.ch Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!! |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi, habe sowas schon mal erstellt. Der Code ist allerdings etwas länger... Es lassen sich Animationssequenzen Speichern/Laden. Dies ist dann wichtig, wenn man beispielsweise 4000 oder mehr Planeten erstellt. Da jede Position mit jeder anderer berechnet werden muß, dauert es dann schon etwas länger bis eine Animation ausgerechnet wird. Habe das mal gemacht, da ich wissen wollte wie sich Spiralen im Universum bilden und habe im Code ein 'Gravitations-Doppler-Effekt' eingebaut. Spiralen bilden sich bei größerer Anzahl von Planeten. Allerdings siehts etwas komisch aus. Und es dauert etwa 10000 Animationssequenzen bis sich die Bewegungen stabilisiert haben. Dafür habe ich mein Rechner schon mal 36 Stunden rechnen lassen, um mir dann per Load das ganze anzuschauen... ![]() game$=Input$("[L]oad / [S]ave / [ENTER] : ")
q%=0 w%=0 dx#=0 dy#=0 sq#=0 xm#=0 ym#=0 xn#=0 yn#=0 zm#=1 px%=0 py%=0 fa%=0 fr%=0 st%=200 Dim xp#(st) Dim yp#(st) Dim xg#(st) Dim yg#(st) ;ANIMATION SAVE/ANIM If Not game$="l" Then Cls If game$="s" Then name$=Input$("Dateiname: ") file=WriteFile("data\"+name$) WriteShort(file,st) Graphics 1024,768,16,2 Else Graphics 1024,768,16,1 End If SetBuffer BackBuffer() Origin 512,384 For q=1 To st wk#=(Rand(1,3)*100)+Rnd(0,20) ;xp(q)=Cos(wk)*Rnd(100,140) ;yp(q)=Sin(wk)*Rnd(100,140) xp(q)=Rnd(-40,40)+Rnd(-30,30)+Rnd(-20,20) yp(q)=Rnd(-40,40)+Rnd(-30,30)+Rnd(-20,20) xg(q)=(+yp(q)/20) yg(q)=(-xp(q)/20) Next While Not KeyHit(1) 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=Sqr(dx*dx+dy*dy) dx=xp(q)-(xp(w)-((xg(w)*sq)/(st/4))) dy=yp(q)-(yp(w)-((yg(w)*sq)/(st/4))) sq=1/(dx*dx+dy*dy) xg(q)=xg(q)-(dx*sq*0.02) yg(q)=yg(q)-(dy*sq*0.02) End If Next Next xm=0 ym=0 For q=1 To st xg(q)=xg(q)*0.999 yg(q)=yg(q)*0.999 xp(q)=xp(q)+xg(q) yp(q)=yp(q)+yg(q) xm=xm+xp(q) ym=ym+yp(q) Next Color 24,24,24 Rect -720*(zm/2),-720*(zm/2),720*zm,720*zm,0 For q=1 To st fa=Sqr((xg(q)^2)+(yg(q)^2))*5 If fa>100 Then fa=100 Color 150+fa,50+fa*2,100-fa/2 ;If q=st Then Color 255,255,255 ;If q=st-1 Then Color 255,255,255 Plot (xp(q)*zm)-(xm/st*zm),(yp(q)*zm)-(ym/st*zm) If game$="s" Then WriteShort(file,Int(xp(q)+32767)) WriteShort(file,Int(yp(q)+32767)) WriteByte(file,Int(fa)) End If Next If KeyDown(57) Then For q=1 To 41 xp(q)=-200+q*10 yp(q)=0 xg(q)=0 yg(q)=0 Next End If If KeyDown(200) Then zm=zm+(zm/40):If zm>9999 Then zm=9999 If KeyDown(208) Then zm=zm-(zm/20):If zm<0.01 Then zm=0.01 fr=fr+1:Text -512,-370,fr Flip 0 Cls Wend End If ;ANIMATION LOAD If game$="l" Then Cls name$=Input$("Dateiname: ") file=ReadFile("data\"+name$) st=ReadShort(file) Graphics 1024,768,16,1 SetBuffer BackBuffer() Origin 512,384 While Not Eof(file) Color 24,24,24 Rect -720*(zm/2),-720*(zm/2),720*zm,720*zm,0 xn=xm yn=ym xm=0 ym=0 For q=1 To st px=ReadShort(file)-32767 py=ReadShort(file)-32767 fa=ReadByte(file) Color 150+fa,50+fa*2,100-fa/2 xm=xm+px ym=ym+py Plot (px*zm)-(xn/st*zm),(py*zm)-(yn/st*zm) Next If KeyDown(200) Then zm=zm+(zm/40):If zm>9999 Then zm=9999 If KeyDown(208) Then zm=zm-(zm/20):If zm<0.01 Then zm=0.01 If KeyHit(1) Then End fr=fr+1:Text -512,-370,fr Flip 1 Cls Wend End If End Wer das ganze mit mehr Partikeln ausprobieren möchte, sollte den Drehimpuls etwas reduzieren! Das geht mit den beiden Zeilen 48 und 49... /20 muß dann /200 stehen... Ausprobieren! Mit LOAD wird eine bereits gespeicherte Sequenz geladen und dargestellt. Mit SAVE wird eine Sequenz berechnet/dargestellt und abgespeichert. Mit ENTER wird nur berechnet und dargestellt. Mit Cursor hoch/runter kann man rein/raus-zoomen, Egal ob gerade gespeichert wird oder nicht. Die Berechnungen werden dadurch nicht beeinflusst. Sorry wegen keiner Komentaren im Quelltext. Ist halt nur für mich gewesen, und habe immer wieder dran rumgebastellt... Aber hoffe das ich dir denoch helfen konnte... |
||
![]() |
Spikespine |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
ich habe auch mal einen Code mit metorit und planet gemacht, vielleicht kannst du ihn ja gebrauchen.... Code: [AUSKLAPPEN] Graphics 1024,768,32,2
SetBuffer BackBuffer() Const grav# = .2 planet_x# = 512 planet_y# = 384 meteor_x# = 100 meteor_y# = 500 meteor_vx# = 0.0 meteor_vy# = 6.0 Repeat Cls entfernung# = Sqr((meteor_x#-planet_x#)^2 + (meteor_y#-planet_y#)^2) winkel# = (atan2(planet_x#-meteor_x,planet_y-meteor_y)+360)mod 360 anziehung# = grav# * ((500-entfernung#)/100) meteor_vx# = meteor_vx# + sin(winkel) * anziehung ;Geschwindigkeit horizontal meteor_vy# = meteor_vy# + cos(winkel) * anziehung ;Geschwindigkeit vertikal meteor_x# = meteor_x# + meteor_vx# meteor_y# = meteor_y# + meteor_vy# Color 255,255,255 Oval planet_x#-10,planet_y#-10,20,20 Color 128,128,128 Oval meteor_x#-5,meteor_y#-5,10,10 Text 0,0,"Winkel: "+winkel Text 0,12,"Entfernung: "+entfernung Text 400,0,"anziehung: "+anziehung Text 400,12,"vx: "+meteor_vx Text 400,24,"vy: "+meteor_vy Text 400,36,"v: "+(sqr(meteor_vx^2+meteor_vy^2)) Flip Until KeyHit(1) End edit: die formel für anziehung# ist garantiert falsch. ![]() |
||
Athlon 64 3700+ | 1024 MB RAM | GeForce 7900 GT | Blitz2D, Blitz3D, BlitzPlus, BlitzMax |
Knartz |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
danke für die codes, sehr lehrreich
mir ist gestern abend als ich nicht einschlafen konnte folgendes eingefallen : BlitzBasic: [AUSKLAPPEN]
zuerst benutzt man atan2() um den winkel zu bekommen dann den winkel / 90 um eine zahl zwischen 0 und 2 zu bekommen. z.B.: 0° = 0 45° = 1/2 90° = 1 ... 180° = 2 1 - wert , ergibt jetzt den anteil den die gravitation auf die x-bewegung ausübt... z.B.: 45° = 1/2 = 1-1/2 = 1/2 * g soweit so gut ... oder ? @tft ich hab b3d - aber wie meinst du jetzt, dass das entity system die berechnung ersetzt/verkürzt ? |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group