= #JxnPortable\docs\gallery\Planetarium.jxn

#ifndef owner
owner = @java.awt.Frame( "  - Planetarium -" )
noApplet = true
#endif
#JXN:include/SliderInclude.jxn
!
! TODO:
! - Darstellung ohne XYGrid
!
! Massstabsverzerrungen:
! - Mondbahnradius x 20
! - Planentendurchmesser x 1000 ... 1600
! - Sonnendurchmesser x 25 ... 30
!
! Naeherungen/Vernachlaessigungen
! - Groessenaenderung der Planeten bei unterschiedlichem Erdabstand
! - Alle Bahnknoten liegen auf der y-Achse
! - Exzentrizitaet nur bei der Merkurbahn
! - cos inkl ~= 1 bei Berechnung von x (ausser bei Merkur)
! - tan( z / sqrt( x^2 + y^2 ) ) ~= z / sqrt( x^2 + y^2 )
!
! Kuerzel:
!   e  = Erde / earth
!   m  = (Erd-)Mond / moon
!   mk = Merkur / mercury
!   v  = Venus
!   ma = Mars
!
!   T     = siderische Umlaufzeit / a
!   r, a  = Bahnradius, grosse Halbachse (nur Merkur) / AE
!   exz   = Exzentrizitaet (nur Merkur)
!   i     = Inklination / °
!
re = 1.
Te = 1.
! Mondbahn
#ifdef noApplet
Tm = slider.add( "TMoon/Te", 0.075, 0., 0.2 )
rm = slider.add( "rMoon/re", 0.05, 0., 0.2 )
#else
Tm = 0.075
rm = 0.05
#endif
! Merkur
amk = slider.add( "aMcry/re", 0.387, 0., 2. )
exz = slider.add( "eMcry", -0.206, -1., 1. )
imk = slider.add( "inclMcry/°", 7.01, 0., 90. )
! tmax = slider.add( "tmax", 1., 0., 2.5 )
tmax = 1.
!
ti = slider.add( "t/Te", 0., 0., 5. )
!
! Erde
xei = re cos( 2 PI ti / Te )
yei = re sin( 2 PI ti / Te )
!
! Erdposition fuer Planetenbahnen
tp = ti + x / 40
xep = re cos( 2 PI tp / Te )
yep = re sin( 2 PI tp / Te )
!
! Mond
xmi = xei + rm cos( 2 PI ti / Tm )
ymi = yei + rm sin( 2 PI ti / Tm )
zmi = sinD(5.15) cos( 2 PI ti / Tm )
!
tt = ti + tmax x / 20
xe = re cos( 2 PI tt / Te )
ye = re sin( 2 PI tt / Te )
xm = xe + rm cos( 2 PI tt / Tm )
ym = ye + rm sin( 2 PI tt / Tm )
!
! Asteriod (z.B. Apollo)
! a = 1.471  (grosse Halbachse)
! T = sqrt( a^3 )
! exz = -0.56  (Exzentrizitaet)
! i = 6.347 Grad mit Beruecksichtigung in x (* cosD(i))
!
! Merkur
! amk = 0.3871
! Tmk = 0.241
Tmk = sqrt amk^3
! exz = -0.20563
! imk = 7.005
phii = Planetarium.kepler( 2 PI ti / Tmk, exz, 0.000001 )
rphi = Planetarium.rphi( phii, exz, amk )
xmki = rphi cos(phii) cosD(imk)
ymki = rphi sin(phii)
zmki = rphi cos(phii) sinD(imk) / abs( xmki - xei, ymki - yei )
!
phi = Planetarium.kepler( 2 PI tp / Tmk, exz, 0.000001 )
rph = Planetarium.rphi( phi, exz, amk )
xmk = rph cos(phi) cosD(imk)
ymk = rph sin(phi)
zmk = rph cos(phi) sinD(imk) / abs( xmk - xep, ymk - yep )
!
! Venus
rv = 0.7233
! Tv = 0.615
Tv = sqrt rv^3
xvi = rv cos( 2 PI ti / Tv )
yvi = rv sin( 2 PI ti / Tv )
zvi = xvi sinD(3.395) / abs( xvi - xei, yvi - yei )
!
xv = rv cos( 2 PI tp / Tv )
yv = rv sin( 2 PI tp / Tv )
zv = xv sinD(3.395) / abs( xv - xep, yv - yep )
!
! Mars
rma = 1.5237
! Tma = 1.881
Tma = sqrt rma^3
! exz = 0.0934 vernachlaessigt
xmai = rma cos( 2 PI ti / Tma )
ymai = rma sin( 2 PI ti / Tma )
zmai = xmai sinD(1.85) / abs( xmai - xei, ymai - yei )
!
xma = rma cos( 2 PI tp / Tma )
yma = rma sin( 2 PI tp / Tma )
zma = xma sinD(1.85) / abs( xma - xep, yma - yep )
!
xh = 2.0
yh = -1.25
! Ruecklauf unterdruecken
phiMa0 = atan2( xma - xep, yma - yep )
phiMa = sw( 3.13 - abs( phiMa0 ), phiMa0 java.lang.Double.NaN, phiMa0 )
phiMk0 = atan2( xmk - xep, ymk - yep )
phiMk = sw( 3.13 - abs( phiMk0 ), phiMk0 java.lang.Double.NaN, phiMk0 )
phiV0 = atan2( xv - xep, yv - yep )
phiV  = sw( 3.13 - abs( phiV0  ), phiV0  java.lang.Double.NaN, phiV0 )
!
cmk = @Color(204,204,153)
FILL_CIRCLE = 1
DRAW_CIRCLE = -1
DRAW_LINE = 0
!
! Blick von der Erde nach aussen gegen den Sternenhimmel
pf1 = plot( 0.2 x, yh + 0 x, GRAY, -1018, 1. )
! TODO: pf1 = @KmgXYPanel().add( curve( 0.2 x, yh + 0 x, GRAY, -2 ) )
pf1.add( curve( xh phiMa / PI, yh + xh zma/PI, R ) )
pf1.add( @JxnSymbolPainter( FILL_CIRCLE, xh atan2( xmai - xei, ymai - yei ) / PI, yh + xh zmai/PI, 5 ).setColor(R) )
pf1.add( @JxnSymbolPainter( FILL_CIRCLE, xh atan2(  xvi - xei, yvi - yei  ) / PI, yh + xh  zvi/PI, 9 ).setColor(G) )
pf1.add( @JxnSymbolPainter( FILL_CIRCLE, xh atan2( xmki - xei, ymki - yei ) / PI, yh + xh zmki/PI, 4 ).setColor(cmk) )
pf1.add( @JxnSymbolPainter( FILL_CIRCLE, xh atan2( -xei, -yei ) / PI, yh, 25 ).setColor(Y.brighter()) )
pf1.add( curve( xh phiMk / PI, yh + xh zmk/PI, cmk, -2 ) )
pf1.add( curve( xh phiV / PI, yh + xh zv/PI, G, -3 ) )
pf1.add( @JxnSymbolPainter( sw( 1. - abs( ymki - yei, xmki - xei ), DRAW_CIRCLE, FILL_CIRCLE ), xh atan2( xmki - xei, ymki - yei ) / PI, yh + xh zmki/PI, 4 ).setColor(cmk) )
pf1.add( @JxnSymbolPainter( sw( 1. - abs(  yvi - yei, xvi - xei  ), DRAW_CIRCLE, FILL_CIRCLE ), xh atan2(  xvi - xei, yvi - yei  ) / PI, yh + xh  zvi/PI, 9 ).setColor(G) )
pf1.add( @JxnSymbolPainter( DRAW_CIRCLE, xh atan2( xmki - xei, ymki - yei ) / PI, yh + xh zmki/PI, 4 ).setColor(cmk) )
pf1.add( @JxnSymbolPainter( DRAW_CIRCLE, xh atan2( xmai - xei, ymai - yei ) / PI, yh + xh zmai/PI, 5 ).setColor(R) )
! pf1.add( @JxnSymbolPainter( FILL_CIRCLE, xh atan2( xmi - xei, ymi - yei ) / PI, yh + xh zmi/PI, 25 ).setColor(@Color(255,255,0,153)) )
pf1.add( @JxnSymbolPainter( FILL_CIRCLE, xh atan2( xmi - xei, ymi - yei ) / PI, yh + xh zmi/PI, 25 ).setColor(Y.darker()) )
!
! Blick von oben auf die Planetenbahnen
pf1.add( @JxnSymbolPainter( FILL_CIRCLE, 0., 0., 25 ).setColor(Y.brighter()) ).add( curve( xm, ym, GRAY, -1 ) )
pf1.add( @JxnGraphicsPainter( DRAW_LINE, xei, yei, xmki, ymki ).setColor(cmk) ).add( curve( xmk, ymk, cmk, -4 ) )
pf1.add( @JxnGraphicsPainter( DRAW_LINE, xei, yei, xvi,  yvi  ).setColor(G) )
pf1.add( @JxnGraphicsPainter( DRAW_LINE, xei, yei, xmai, ymai ).setColor(R) )
pf1.add( @JxnSymbolPainter( FILL_CIRCLE, xei,  yei, 10 ).setColor( @Color( 127, 127, 255 ) ) )   ! earth
pf1.add( @JxnSymbolPainter( FILL_CIRCLE, xmi,  ymi,  3 ).setColor(Y.darker()) )   ! moon
pf1.add( @JxnSymbolPainter( FILL_CIRCLE, xmki, ymki, 4 ).setColor(cmk) )   ! mercury
pf1.add( @JxnSymbolPainter( FILL_CIRCLE, xvi,  yvi,  9 ).setColor(G) )     ! venus
pf1.add( @JxnSymbolPainter( FILL_CIRCLE, xmai, ymai, 5 ).setColor(R) )     ! mars
!
#JXN:include/Center1Include.jxn
pf1.getXYCanvas().setBackground( @Color( 51, 51, 127 ) )
#JXN:include/FrameInclude.jxn