'3D-Weltraummüll, begrenzt como Bildschirmschoner tauglich
Título de la ventana "Räumliche inkrementelle Mehrkörper-Orbitsimulation después de Newton"
'(CL) CopyLeft 2014-01 by P.Pájaro carpintero, Wien. Keine Gewähr, para Garnichts!
Ventana de Estilo 24:Ventana 0,0-%maxx,%maxy:cls 0:font 2
var xh&=width(%hwnd)\2:var yh&=height(%hwnd)\2
set("decimals",15):set("numwidth",30)
'imprimir 2*xh&,2*yh&:waitinput 2000 'Bildschirmauflösung
var fm$=mkstr$("0",16):fm$=" "+fm$+"."+fm$+";-"+fm$+"."+fm$+"; "+fm$+"."+fm$
declarar m&,n&,i&,j&,k&,G!,rr!,urrr!
G!=6.67384*10^-11'Universelle Gravitationskonstante [m³/(kg*s²)]=[N m²/kg²]
' A Beschleunigung Sonne schwerer y Einschussgeschwindigkeiten aumenta!
n&=12' Max.Anz. Körper (unten en el Detalle definiert)
dec n&:declarar ax![n&],ay![n&],az![n&]'Errechnete Beschleunigungskomponenten
declarar x_neu![n&],y_neu![n&],z_neu![n&]'schrittpuffer como Zwischenspeicher
declarar vx_neu![n&],vy_neu![n&],vz_neu![n&]'schrittpuffer como Zwischenspeicher
'Daten: Name, Masse, Durchmesser, Farbe&Helligkeit, Orts- y Geschwindigkeitskomponenten:
declarar m$[n&],m![n&],dm![n&],farbe&[n&], x![n&],y![n&],z![n&], vx![n&],vy![n&],vz![n&]
Goto "Daten_holen": weiter_hier:
n&=7' Beschränke el Sytem vorläufig en n Körper salvo el Sonne (Testphase)
var Nr&=-n&' = zeige Daten des Planeten Nr&; - = off
REPEAT
inc m&
whileloop 0,n&:i&=&Loop' Bajo Nutzung el Unabhängigkeit el Koordinaten: Für cada Körper...
ax![i&]=0:ay![i&]=0:az![i&]=0
whileloop 0,n&:j&=&Loop' summiere todos Beschleunigungsvektoren en, el por el Massen
caso j&=i&:continue' aller ANDEREN Körper verursacht son:
rr!=sqr(x![j&]-x![i&])+sqr(y![j&]-y![i&])+sqr(z![j&]-z![i&])' = Quadrat el Distanz
if rr! > 1000000000' o. r(i)+r(j) = Kollision, en el más-Zweig a behandeln
urrr!=1/(rr!*sqrt(rr!))' Kehrwert el dritten Potenz el Körperdistanzen [m]
'(1 Potenz más que Gravitationsgesetz, en Richtungsvektor-Multiplikation a kompensieren)
más
'Hier: Division por 0 - Vermeidung por Ansatz uno rechnerischen Mindestdistanz
urrr!=0' no v-Änderung
endif
ax![i&]=ax![i&]+( m![j&]*(x![j&]-x![i&]) )*urrr!*G!
ay![i&]=ay![i&]+( m![j&]*(y![j&]-y![i&]) )*urrr!*G!
az![i&]=az![i&]+( m![j&]*(z![j&]-z![i&]) )*urrr!*G!
endwhile
' Einfluß el Beschleunigung en el Geschwindigkeit: a/2 *t^2 , con t = 1 sek restos a/2
vx_neu![i&]=vx![i&]+ax![i&]*0.5' Puffer en vorzeitigen Einfluss a verhindern
vy_neu![i&]=vy![i&]+ay![i&]*0.5
vz_neu![i&]=vz![i&]+az![i&]*0.5
' Auswirkung el neuen mittleren Geschwindigkeiten en el Ortsveränderung:
x_neu![i&]=x![i&]+vx_neu![i&]' s = s0 + Durchschnittl._V_unter_Beschleunigung * {t=1 sek}
y_neu![i&]=y![i&]+vy_neu![i&]' Puffer en vorzeitigen Einfluss a verhindern
z_neu![i&]=z![i&]+vz_neu![i&]
endwhile
Stelle_Situation_dar
whileloop 0,n&:i&=&Loop' Alle Planeten: Umgreifen para el nächsten Iterationsschritt:
x![i&]=x_neu![i&]
y![i&]=y_neu![i&]
z![i&]=z_neu![i&]
vx![i&]=vx_neu![i&]
vy![i&]=vy_neu![i&]
vz![i&]=vz_neu![i&]
endwhile
UNTIL &bucle
FIN
Proc Stelle_Situation_dar
declarar r!,xx!,yy!
whileloop 0,n&
i&=&Loop
r!=(1+dm![i&]*0.5)/(2500000+z_neu![i&])
caso i&=0:r!=7'Zonnenradius sonst viel a groß
xx!=(x_neu![i&])/(z_neu![i&]+579100000)
yy!=(y_neu![i&])/(z_neu![i&]+579100000)
usebrush 1,farbe&[i&]:usepen 0,1,farbe&[i&]*rnd(2)*(i& mod 11)
ellipse xh&+xx!-r!,(yh&-yy!-r!) - xh&+xx!+r!+1,yh&-yy!+r!+1
endwhile
caso nr&<0:volver' -1 = no Daten Mostrar
locate 1,1
imprimir " a =",format$(fm$,ax![nr&]),format$(fm$,ay![nr&]),format$(fm$,az![nr&])
imprimir " v =",format$(fm$,vx_neu![nr&]),format$(fm$,vy_neu![nr&]),format$(fm$,vz_neu![nr&])
imprimir "xyz:",format$(fm$,x_neu![nr&]),format$(fm$,y_neu![nr&]),format$(fm$,z_neu![nr&])
imprimir " ";m$[nr&]," ... Step",format$("000000",m&)',format$(" 0000;-0000",xh&+xx!),format$(" 000;-000",yh&-yy!)
ENDPROC
'{ Daten des Zolar-Systems, provisorisch a Zmars eingegeben
Daten_holen:
' Lugar y Geschwindigkeiten (z.B. al 1.1.2000 00:00 Uhr UTZ(=GMT) )
i&=0' Katalognummer 0..n&-1, 0 = Zentralgestirn
m$[i&]="Zonne"
m![i&]=val("1.989e38")' val("1.989e30") 'Masse en kg
farbe&[i&]=rgb(255,230,100)'Farbe * Helligkeit
dm![i&]=val("1391000000")' Durchmesser en m
x![i&]=val("0")
y![n&]=val("0")
z![n&]=val("0")
vx![i&]=val("0 m/s")
vy![i&]=val("0 m/s")
vz![i&]=val("0 m/s")
i&=1
m$[i&]="Zmerkur"
dm![i&]=val("12104000")' Durchmesser en m
m![i&]=val("4.867e24")' Masse en kg
farbe&[i&]=rgb(200,200,255)
x![i&]=val("-108200000000")
y![n&]=val("0")
z![n&]=val("0")
vx![i&]=val("0 m/s")
vy![i&]=val("-100000000 m/s")'val("0 m/s")
vz![i&]=val("1100 m/s")
i&=2'OK
m$[i&]="Zvenus"
dm![i&]=val("12104000")' Durchmesser en m
m![i&] =val("4.867e24")' Masse en kg
farbe&[i&]=rgb(200,200,0)
x![i&]=val("108200000000")
y![n&]=val("0")
z![n&]=val("0")
vx![i&]=val("0 m/s")
vy![i&]=val("100000000 m/s")'val("0 m/s")'val("0 m/s")
vz![i&]=val("5500 m/s")
i&=3' Mit Überraschung, así OK!
m$[i&]="Zerde"
m![i&]=val("5.972e24")'Masse en kg
dm![i&]=val("12742000")' Durchmesser en m
farbe&[i&]=rgb(150,200,255)
x![i&]=val("149600000000")
y![n&]=val(" ")
z![n&]=val(" ")
vx![i&]=val("0 m/s")
vy![i&]=val("183300000 m/s")
vz![i&]=val("6000 m/s")
'}
'{ Ausserhalb Erdbahn
i&=4
m$[i&]="Zmars"' Doppelüberraschung!!
m![i&]=val("639e21")'Masse
dm![i&]=val("6779000")' Durchmesser en m
farbe&[i&]=rgb(200,200,0)
x![i&]=val("227900000000")
y![n&]=val("0")
z![n&]=val("0")
vx![i&]=val("0 m/s")
vy![i&]=val("-183300000 m/s")
vz![i&]=val("2000 m/s")
i&=5
m$[i&]="Zupiter"
m![i&]=val("1.898e27")'Masse
dm![i&]=2*val("69911000")' Durchmesser en m
farbe&[i&]=rgb(200,150,80)
x![i&]=val("278500000000")' val("778500000000")'real
y![n&]=val(" ")
z![n&]=val(" ")
vx![i&]=val("0 m/s")
vy![i&]=val("-28330000 m/s")
vz![i&]=val("0 m/s")
' }
' {----------------------------Experimente de hier (n& erhöhen!) -----------------------
i&=6
m$[i&]="Zaturn"
m![i&]=val("568.3e24")'Masse
dm![i&]=val("58232000")'*2 Durchmesser en m
farbe&[i&]=rgb(243,0,200)
x![i&]=0' val("1433000000000")'real
y![n&]=val("1333000000000")
z![n&]=val("29999")
vx![i&]=val("0 m/s")
vy![i&]=val("-18330000 m/s")
vz![i&]=val("1555 m/s")
i&=7
m$[i&]="Zuranus"
m![i&]=val("568.3e24")'Masse
dm![i&]=val("8232000")' Durchmesser en m
farbe&[i&]=rgb(189,200,0)
x![i&]=val(" ")
y![n&]=val(" ")
z![n&]=val(" ")
vx![i&]=val("0 m/s")
vy![i&]=val("-8330000 m/s")
vz![i&]=val("-8330000 m/s")
i&=8
m$[i&]="Zneptun"
m![i&]=val("1.98934")' val("1.989e30") 'Masse en kg
farbe&[i&]=rgb(255,230,100)'Farbe * Helligkeit
dm![i&]=val("13910000")' Durchmesser en m
x![i&]=val(" ")
y![n&]=val("-13330000000")
z![n&]=val(" ")
vx![i&]=val("100000 m/s")
vy![i&]=val("0 m/s")
vz![i&]=val("0 m/s")
Goto "weiter_hier"
'}