function m2fm(v,fx,fs){//秒轉為分秒,fx為小數點位數,fs為1轉為"分秒"格式否則轉為"角度分秒"格式 var gn='+'; if(v<0) v=-v, gn='-'; var f=floor(v/60), m=v-f*60; if(!fs) return gn + f + "'" +m.toFixed(fx) + '"' ; if(fs==1) return gn + f + '分' +m.toFixed(fx) + '秒'; if(fs==2) return gn + f + 'm' +m.toFixed(fx) + 's'; } function hcjj(t){ //返回P03黃赤交角,t是世紀數 var t2=t*t, t3=t2*t,t4=t3*t,t5=t4*t; return (84381.4060 -46.836769*t -0.0001831*t2 +0.00200340*t3 -5.76e-7*t4 -4.34e-8*t5)/rad; } function rad2rrad(v){//對超過-PI到PI的角度轉為-PI到PI v=v % (2*Math.PI); if(v<=-Math.PI) return v+2*Math.PI; if(v>Math.PI) return v-2*Math.PI; return v; } function rad2mrad(v){ //對超過0-2PI的角度轉為0-2PI v=v % (2*Math.PI); if(v<0) return v+2*Math.PI; return v; } function llrConv(JW,E){ //球面坐標旋轉、黃道赤道坐標變換,赤到黃E取負 var r=new Array(),J=JW[0],W=JW[1]; r[0]=atan2( sin(J)*cos(E) - tan(W)*sin(E), cos(J) ); r[1]=asin ( cos(E)*sin(W) + sin(E)*cos(W)*sin(J) ); r[2]=JW[2]; r[0]=rad2mrad(r[0]); return r; } function dt_ext(y,jsd){ var dy=(y-1820)/100; return -20+jsd*dy*dy; } //二次曲線外推 function dt_calc(y){ //世界時-原子時之差,傳入年 var y0=dt_at[dt_at.length-2]; //表最後一年 var t0=dt_at[dt_at.length-1]; //表最後一年的deltatT if(y>=y0){ var jsd=31; //y1年之後加速估計。瑞士星曆表jsd=31,NASA網站jsd=32,skmap的jsd=29 if(y>y0+100) return dt_ext(y,jsd); var v = dt_ext(y, jsd); //二次曲線外推 var dv= dt_ext(y0,jsd) - t0; //ye年二次外推與te的差 return v - dv*(y0+100-y)/100; } var i,d=dt_at; for(i=0;i<d.length;i+=5) if(y<d[i+5]) break; var t1=(y-d[i])/(d[i+5]-d[i])*10, t2=t1*t1, t3=t2*t1; return d[i+1] +d[i+2]*t1 +d[i+3]*t2 +d[i+4]*t3; } function dt_T(t){ return dt_calc(t/365.2425+2000)/86400.0; } //傳入儒略日(2000起算),計算TD-UT(單位:日) var XL0_xzb = new Array( //行星星曆修正 //經(角秒),緯(角秒), 距(10-6AU) -0.08631, +0.00039, -0.00008, //水星 -0.07447, +0.00006, +0.00017, //金星 -0.07135, -0.00026, -0.00176, //火星 -0.20239, +0.00273, -0.00347, //木星 -0.25486, +0.00276, +0.42926, //土星 +0.24588, +0.00345, -14.46266, //天王星 -0.95116, +0.02481, +58.30651 //海王星 ) function XL0_calc(xt,zn,t,n){ //xt星體,zn坐標號,t儒略世紀,n計算項數 t/=10; //儒略千年數 var i,j,v=0,tn=1,c; var F=XL0[xt],n1,n2,N; var n0, pn=zn*6+1, N0 = F[pn+1]-F[pn]; //N0序列總數 for(i=0;i<6;i++,tn*=t){ n1=F[pn+i], n2=F[pn+1+i], n0=n2-n1; if(!n0) continue; if(n<0) N=n2; //項數 else { N = floor(3*n*n0/N0+0.5)+n1; if(i) N+=3; if(N > n2) N=n2; } for(j=n1,c=0;j<N;j+=3) c += F[j]*Math.cos(F[j+1] +t*F[j+2]); v += c*tn; } v/=F[0]; if(xt==0){ //地球 var t2=t*t, t3=t2*t; //千年數的次方 if(zn==0) v += (-0.0728 -2.7702*t -1.1019*t2 -0.0996*t3) / rad; if(zn==1) v += (+0.0000 +0.0004*t +0.0004*t2 -0.0026*t3) / rad; if(zn==2) v += (-0.0020 +0.0044*t +0.0213*t2 -0.0250*t3) / 1000000; }else{ //其它行星 var dv = XL0_xzb[ (xt-1)*3+zn ]; if(zn==0) v += -3*t/rad; if(zn==2) v += dv/1000000; else v += dv/rad; } return v; } function gxc_sunLon(t){ //光行差,t是世紀數 var v =-0.043126+ 628.301955*t -0.000002732*t*t; //平近點角 var e = 0.016708634-0.000042037*t-0.0000001267*t*t; return ( -20.49552 * (1+e*Math.cos(v)) )/rad; //黃經光行差 } var nutB=new Array(//中精章動表 2.1824, -33.75705, 36e-6,-1720,920, 3.5069, 1256.66393, 11e-6,-132, 57, 1.3375,16799.4182, -51e-6, -23, 10, 4.3649, -67.5141, 72e-6, 21, -9, 0.04, -628.302, 0, -14, 0, 2.36, 8328.691, 0, 7, 0, 3.46, 1884.966, 0, -5, 2, 5.44, 16833.175, 0, -4, 2, 3.69, 25128.110, 0, -3, 0, 3.55, 628.362, 0, 2, 0); function nutationLon2(t){ //只計黃經章動 var i,a, t2=t*t, dL=0, B=this.nutB; for(i=0;i<B.length;i+=5){ if(i==0) a=-1.742*t; else a=0; dL += (B[i+3]+a) * Math.sin( B[i]+B[i+1]*t+B[i+2]*t2 ); } return dL/100/rad; }
|