@create PM @link PM = #0 @lock/Basic PM=#1 @lset PM/Basic=no_inherit @lock/Use PM=#1 @lset PM/Use=no_inherit @set PM = WIZARD &AUTHOR PM=Mark Hassman (mark@moosh.net) &DAT_DAYLENGTH PM=86400 &DATE PM=December 23, 2002 &DAT_JAN012000 PM=946710000 &DAT_PLANET_LIST PM=#4 #7 #8 #9 #10 #11 #12 #13 #14 #15 #16 &FN_COS_DEGREES PM=[cos(%0,d)] &FN_DAYS_ELAPSED PM=[fdiv(sub(secs(),v(DAT_JAN012000)),v(DAT_DAYLENGTH))] &FN_MEAN_ANOMALY PM=[u(fn_rationalize,[sub([add([mul(u(%0/DAILY_MOTION),u(fn_days_elapsed))],u(%0/MEAN_LONGITUDE))],u(%0/LONGITUDE_PERHELION))])] &FN_RADIUS_VECTOR PM=[setq(6,sub(1,power(u(%0/ECCENTRICITY),2)))][setq(7,add(1,mul(u(%0/ECCENTRICITY),cos_d(u(FN_TRUE_ANOMALY,%0)))))][mul(u(%0/MEAN_DISTANCE),fdiv(r(6),r(7)))] &FN_RATIONALIZE PM=[setq(0,div(floor(%0),360))][if(eq(r(0),0),%0)][if(gt(r(0),0),[sub(%0,mul(r(0),360))])][if(lt(r(0),0),[add(%0,mul(add(abs(r(0)),1),360))])] &FN_SIN_DEGREES PM=[sin(%0,d)] &FN_TRUE_ANOMALY PM=[setq(2,u(FN_MEAN_ANOMALY,%0))][setq(3,mul(sub(mul(2,u(%0/ECCENTRICITY)),fdiv(power(u(%0/ECCENTRICITY),3),4)),sin_d(r(2))))][setq(4,mul(1.25,power(u(%0/ECCENTRICITY),2),sin_d(mul(2,r(2)))))][setq(5,mul(1.0833,power(u(%0/ECCENTRICITY),3),sin_d(mul(3,r(0)))))][u(fn_rationalize,[add(r(2),mul(fdiv(180,pi()),add(r(3),r(4),r(5))))])] &FN_X PM=[setq(8,sub(add(u(FN_TRUE_ANOMALY,%0),u(%0/LONGITUDE_PERHELION)),u(%0/LONGITUDE_ASCENDING)))][setq(9,sub(mul(cos_d(u(%0/LONGITUDE_ASCENDING)),cos_d(r(8))),mul(sin_d(u(%0/LONGITUDE_ASCENDING)),sin_d(r(8)),cos_d(u(%0/INCLINATION)))))][mul(u(FN_RADIUS_VECTOR,%0),r(9))] &FN_Y PM=[setq(8,sub(add(u(FN_TRUE_ANOMALY,%0),u(%0/LONGITUDE_PERHELION)),u(%0/LONGITUDE_ASCENDING)))][setq(9,add(mul(sin_d(u(%0/LONGITUDE_ASCENDING)),cos_d(r(8))),mul(cos_d(u(%0/LONGITUDE_ASCENDING)),sin_d(r(8)),cos_d(u(%0/INCLINATION)))))][mul(u(FN_RADIUS_VECTOR,%0),r(9))] &FN_Z PM=[setq(8,sub(add(u(FN_TRUE_ANOMALY,%0),u(%0/LONGITUDE_PERHELION)),u(%0/LONGITUDE_ASCENDING)))][mul(u(FN_RADIUS_VECTOR,%0),mul(sin_d(r(8)),sin_d(u(%0/INCLINATION))))] @STARTUP PM=@function sin_d=me/fn_sin_degrees;@function cos_d=me/fn_cos_degrees;@tr me/tr_doall;@tr me/tr_docycle @set PM/STARTUP=no_command prefixmatch &TR_DOALL PM=@dolist [v(dat_planet_list)]=@tr me/tr_set_coords=## &TR_DOCYCLE PM=@wait 60={@tr me/tr_doall;@tr me/tr_docycle} &TR_SET_COORDS PM=@switch hasattr(%0,orbits)=0,{@space/set %0/x=[u(fn_x,%0)];@space/set %0/y=[u(fn_y,%0)];@space/set %0/z=[u(fn_z,%0)]},{@space/set %0/x=[add(u(fn_x,%0),[hs_get_attr(u(%0/orbits),x)])];@space/set %0/y=[add(u(fn_y,%0),hs_get_attr(u(%0/orbits),y))];@space/set %0/z=[add(u(fn_z,%0),hs_get_attr(u(%0/orbits),z))]} &VERSION PM=0.1 (Alpha)