Planetenbahn
Übersicht

![]() |
AnanasBetreff: Planetenbahn |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey
In Physik müssen wir gerade eine Erde-kreist-um-Sonne-Simulation basteln, in einer beliebigen Pragrammiersprache. Klar dass ich BB gewählt habe ![]() Wir sollen in einer Schleife immer berechnen, wohin die Erde als nächstes wandert. Ich poste hier mal meine Berechnungen, nur stimmen sie anscheinend nicht: Meine Erde startet am Ort (150/0/0) (weil die Erde 150 Mio km von der Sonne entfernt ist) und wird in Y-Richtung nach oben geschossen. Die Sonne ist im Nullpunkt. Nachdem die Erde eine Anfangsgeschwindigkeit hat, sollte alles mit den Berechnungen laufen.... sollte ![]() Hier mal der Code meiner Rechnungen (wird immer wieder in der Schleife abgefragt): BlitzBasic: [AUSKLAPPEN]
Variablen t, G, msonne usw wurden natürlich am Anfang definiert. (a=Beschleunigung, v=Geschw., G=GravitationsKonstante, r=Abstand Erde-Sonne, x= momentaner X-Standort(Erde), y= momentaner Y-Standort(Erde) Ich weiss, die Motivation ist klein jemandem bei doofen Rechnungen zu helfen aber ich hoffe trotzdem dass mir jemand sagen kann was ich falsch mache (oder eine Vermutung). Vielen Dank mfg EDIT: Die Erde fliegt immer schneller noch oben (Y) und erhält auch eine kleine Beschleunigung in X-Richtung, statt einen Kreis um die Sonne zu fliegen... |
||
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du hast die entsprechenden Variablen hoffentlich als Float deklariert.
Schaue dir die Variablen-Werte mal mit Hilfe von Debuglog ![]() Auf die Schnelle erkenne ich nämlich keine Fehler außer den, dass du bei der Positionierung nicht den Weg-Faktor von 10^9 beachtest. (->"EntityX(erde)+vx*t*10^(-9)") mfG mpmxyz Edit: Für eine höhere Genauigkeit solltest du die Berechnung "EntityX(erde)+(vx*t-0.5*ax*t*t)*10^(-9)" zur Positionsbestimmung nutzen. (Herleitung durch Formeln zur beschleunigten Bewegung) |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich verstehe nicht ganz, was daran "realitätsgetreu" sein soll. Schon allein, weil man bei den richtigen Abmessungen niemals Sonne und Erde gleichzeitig sehen könnte... Ich würde die Bahn per Cos/Sin berechnen und die Bahnexzentrizität dabei beachten. | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Krischan |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hmm, das ist jetzt zwar gleich ein ganzes Sonnensystem, dafür aber sehr realistisch, evt. kannst Du Dir da was abgucken, im dazugehörigen Thread gibt es weitere Infos zur Steuerung und was das alles soll:
https://www.blitzforum.de/foru...338#153843 Code: [AUSKLAPPEN] ;Realistisches 2D-Modell des Sonnensystems V1.0
;unter Berücksichtigung des N-Körper Problems ;mit realen Daten der Objekte vom 01.01.2000 AppTitle "Realistisches 2D-Modell des Sonnensystems V1.0" ;Parameter scrX = 640 ;Bildschirmbreite scrY = 480 ;Bildschirmhöhe scrD = 32 ;Farbtiefe scrT = 2 ;1=Fenster 2=Fullscreen pn = 10 ;Anzahl Planeten ps = 3 ;Grösse der Planeten zoom = 200 ;Zoomfaktor (1=weit,250=nah, 200=inneres System, 5=komplett) tracers = 1 ;Planetenspuren 1=ein 0=aus sunmove = 1 ;Korrektur der Sonnenbewegung 1=ein 0=aus sunmass#= 1.0 ;Sonnenmasse (1=normal) TIM# = 0 ;Zeitfaktor rücksetzen TIMINT# = 0.5 ;um x Sonnentage erhöhen pro Durchgang, je höher desto ungenauer! ;bei über 10 kann der Merkur "verloren" gehen :-) ;Gaußsche Gravitationskonstante K1# = .01720209895 K2# = K1# * K1# ;Felder dimensionieren Dim X#(pn), Y#(pn), Z#(pn), VX#(pn), VY#(pn), VZ#(pn), MASS#(pn), ro(pn), gr(pn), bl(pn) Dim name$(pn), oldx#(pn), oldy#(pn), DEG#(pn), MU#(pn), SEMI#(pn), ECCEN#(pn) ;Datenfelder auslesen Dim pla$(pn,11) Restore planetdata For p=0 To pn-1 For q=0 To 11 Read pla$(p,q) name$(p)=pla$(p,0) ;Name X#(p)=pla$(p,1) ;X-Position Y#(p)=pla$(p,2) ;Y-Position Z#(p)=pla$(p,3) ;Z-Position VX#(p)=pla$(p,4) ;Geschwindigkeit X VY#(p)=pla$(p,5) ;Geschwindigkeit Y VZ#(p)=pla$(p,6) ;Geschwindigkeit Z MASS#(p)=Float(pla$(p,7))*10^Int(pla$(p,8)) ;Masse ro(p)=pla$(p,9) ;Rotanteil gr(p)=pla$(p,10) ;Grünanteil bl(p)=pla$(p,11) ;Blauanteil Next Next ;Daten der Objekte Stand 01.01.2000 .planetdata ; Name POS X POS Y POS Z Vx Vy Vz Masse*10^X Rot Grü Bla Data "Sonne" , 0.0000000 , 0.0000000 , 0.0000000 , 0.000000000 , 0.000000000 , 0.000000000 , 1.991 , 30 , 255 , 255 , 0 Data "Merkur" , -0.1778023 , -0.3863251 , -0.1879025 , 0.020335410 , -0.007559570 , -0.006147710 , 3.191 , 23 , 255 , 64 , 0 Data "Venus" , 0.1787301 , -0.6390267 , -0.2987722 , 0.019469170 , 0.004915870 , 0.000978980 , 4.886 , 24 , 255 , 192 , 128 Data "Erde" , -0.3305873 , 0.8497269 , 0.3684325 , -0.016483420 , -0.005365460 , -0.002326460 , 5.979 , 24 , 0 , 0 , 255 Data "Mars" , -1.5848092 , -0.3648638 , -0.1244522 , 0.003821510 , -0.011241840 , -0.005259630 , 6.418 , 23 , 255 , 0 , 0 Data "Jupiter" , 4.1801700 , -2.5386080 , -1.1900210 , 0.004106423 , 0.006125327 , 0.002525539 , 1.901 , 27 , 128 , 255 , 0 Data "Saturn" , -4.6197080 , -8.2374610 , -3.2033610 , 0.004647751 , -0.002328957 , -0.001161564 , 5.684 , 26 , 255 , 255 , 128 Data "Uranus" , -3.7245900 , -17.1975200 , -7.4791700 , 0.003833665 , -0.000845721 , -0.000424809 , 8.682 , 25 , 0 , 255 , 255 Data "Neptun" , 1.9138100 , -27.9215500 , -11.4762000 , 0.003118271 , 0.000233303 , 0.000017967 , 1.027 , 26 , 0 , 128 , 255 Data "Pluto" , -23.2285900 , -18.5272000 , 1.2167500 , 0.002066577 , -0.002488884 , -0.001397200 , 1.080 , 24 , 128 , 128 , 128 ;Masse mit Sonne normalisieren (Sonne=1) For I = 1 To pn-1 MASS#(I) = MASS#(I) / MASS(0) Next MASS#(0) = sunmass# ;reduzierte Masse in Gaussschen Einheiten erzeugen For I = 1 To pn-1 MU#(I) = K2# * (1 + MASS#(I)) Next ;Grafikmodus Graphics scrX,scrY,scrD,scrT SetBuffer BackBuffer() ;Hauptschleife While Not KeyHit(1) ;Zeit um Faktor erhöhen TIM# = TIM# + TIMINT# ;Tracer einzeichnen For i=0 To pn-1 ;Tracerfarbe If tracers Then Color 32,32,32 Else Color 0,0,0 Oval(scrX/2+oldx#(i),scrY/2+oldy#(i),ps,ps,1) Next ;Berechnungen und Planetenausgabe Gosub NewV Gosub NewP ;Fake CLS oben links Rect 0,0,150,42,1 Color 255,255,255 ;Textausgabe oben links Text 0, 0,"Tage: "+Int(TIM#) Text 0,10,"Jahre: "+TIM#/365.25 Text 0,20,"Zeit: "+TIMINT# Text 0,30,"Zoom: "+zoom ;Tastaturbefehle ;Pfeil rauf/runter = Zoom in/out ;Pfeil links/rechts = langsamer/schneller ;Space = Tracers ein/aus ;F1 = inneres Sonnensystem ;F2 = komplettes Sonnensystem ;F3 = Sonnenmasse verdoppelt ;F4 = Sonnenmasse halbiert ;F5 = Erdmasse = 0.05 Sonnenmassen ;-) kp=0 If KeyDown(200) Then zoom=zoom+1:If zoom>250 Then zoom=250 If KeyDown(208) Then zoom=zoom-1:If zoom<1 Then zoom=1 If KeyDown(203) Then TIMINT#=TIMINT#-.5:If TIMINT#<.5 Then TIMINT#=.5 If KeyDown(205) Then TIMINT#=TIMINT#+.5:If TIMINT#>25 Then TIMINT#=25 If KeyHit(57) Then tracers=1-tracers:Cls If KeyDown(59) Then zoom=200:Cls If KeyDown(60) Then zoom=5:Cls If KeyDown(61) Then MASS#(0)=2 If KeyDown(62) Then MASS#(0)=0.5 If KeyDown(63) Then MASS#(3)=.05 ;Bufferflip Flip 1 Wend End ;ab hier Gosubs------------------------------------------------------------- ;Gosub: neue Geschwindigkeit berechnen .NewV For I = 0 To pn-1 ;Parameter rücksetzen AX# = 0 AY# = 0 AZ# = 0 ;keine Ahnung was hier passiert For J = 0 To pn-1 If (J = I) Then Goto weiter XJI# = X#(J) - X#(I) YJI# = Y#(J) - Y#(I) ZJI# = Z#(J) - Z#(I) R# = Sqr(ZJI# * ZJI# + YJI# * YJI# + XJI# * XJI#) R3# = R# * R# * R# COEFF# = K2# * MASS#(J) / R3# AX# = COEFF# * XJI# + AX# AY# = COEFF# * YJI# + AY# AZ# = COEFF# * ZJI# + AZ# .weiter Next ;neue Geschwindigkeit berechnen VX#(I) = VX#(I) + AX# * TIMINT# VY#(I) = VY#(I) + AY# * TIMINT# VZ#(I) = VZ#(I) + AZ# * TIMINT# Next Return ;Gosub: neue Position berechnen und Planeten einzeichnen .NewP For i=0 To pn-1 ;neue Position berechnen X#(i) = X(i) + VX#(i) * TIMINT# Y#(i) = Y(i) + VY#(i) * TIMINT# Z#(i) = Z(i) + VZ#(i) * TIMINT# ;Zoomfaktor berücksichtigen sx#=X#(i)*zoom sy#=Y#(i)*zoom ;Korrektur der Sonnenbewegung If i=0 And sunmove=1 Then sunx#=sx# suny#=sy# EndIf ;Position mit Zoomfaktor und Sonnenkorrektur sx#=sx#-sunx# sy#=sy#-suny# ;alte Position für Tracer speichern oldx#(i)=sx# oldy#(i)=sy# ;Planeten zeichnen Color ro(i),gr(i),bl(i) Oval(scrX/2+sx#,scrY/2+sy#,ps,ps,1) Next Return |
||
![]() |
Ananas |
![]() Antworten mit Zitat ![]() |
---|---|---|
@mpmxyz: Jo ich rechne natürlich mit Floats, und danke für den Tip mit dem zurückrechnen, was mir gar nicht aufgefallen ist, weil ich einfach die Zeit t ganz klein gemacht habe, was dann das zurückrechnen etwa ausgeglichen hat. Weiter bin ich leider nicht ![]() @Xeres: klar ist es nicht realistisch dass man Sonne + Erde auf einem Bild hat, eigentlich wären die ja kleiner als ein Pixel... Mein Lehrer meint einfach, wir sollen die echten Werte (Abstände, Massen,..) in der Formel im Programm einsetzen. Zur Darstellung werden Erde und Sonne natürlich stark vergrössert... Ausserdem ist mein Lehrer ziemlich stur... Er hat gesagt wie er es will und schülerfreiheiten lässt er nicht (musste ich schon beim letzten Projekt mit einer schmerzhaften Note erfahren^^) Er möchte dass immer schrittweise die neue Beschleunigung, Geschw. und Position der Erde nach einer bestimmten Zeit t berechnet wird. Weiss also auch nicht ob ich das anders lösen sollte @Krischan: Danke schonmal! ich glaube bei mir stimmt irgendwas mit der Beschleunigungsberechnung nicht, da hab ich mal die Stelle bei dir angeschaut: BlitzBasic: [AUSKLAPPEN]
Leider hast du selber geschrieben dass du keine Ahnung hast was da passiert xD Was genau bedeutet denn das COEFF? Und was sind XJI, YJI... usw? Und so nebenbei: Goto und Gosub sind böse ![]() Naja waren sie vielleicht noch ned als du den Code geschrieben hast... |
||
Krischan |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das war auch einer meiner ersten Codes hier. Und ich habe wirklich keine Ahnung was da passiert, hab das nur von Qbasic portiert. Irgendwelche Mathe-Genies hier? Vortreten!
Ist auch egal, Hauptsache es läuft ![]() |
||
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe die fragliche Stelle mal kommentiert:
BlitzBasic: [AUSKLAPPEN] For I = 0 To pn-1 Die Berechnungen unterscheiden sich nur vom Code von Ananas, weil hier die Berechnungen nach Gauß verwendet werden. (Außerdem ziehen sich die Planeten mit der Sonne gegenseitig an. Sonst dürfte z.B. eine Änderung der Erdmasse keine Änderung der Erdbahn hervorrufen.) Diese nutzen die "Einheiten des Sonnensystems". mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
- Zuletzt bearbeitet von mpmxyz am Mi, Mai 12, 2010 18:11, insgesamt 2-mal bearbeitet
Krischan |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
*staun* ![]() |
||
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
mach If (J = I) zu If not (J = I)...endif und du bist das goto los. | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group