/****************************************
以下是天文计算部分,包含有：
常数 rad   : 每弧度的角秒数
常数 J2000 : 2000年1月1日 12:00:00 的儒略日数
常数 pi2   : 圆周率的2倍,即2*3.14159...
rad2str()  : 弧度转为"度分秒"或"时分秒"
rad2str2() : 弧度转为"度分"
rad2mrad() : 将超出0到360度的角度转为0到360度的解度
mod2(a,b)  : 临界余数(a与最近的整倍数b相差的距离)
int2(a)    : 取小等于a的最大整数
物件 JD    : 公历——儒略日——时间物件
物件 ZB    : 坐标变换物件，包含坐标旋转、章动、日月光行差(时)、视差、大气折射、恒星时的计算
物件 XL    : 日月黄道平分点坐标、视坐标、速度、已知经度反求时间等方面的计算
物件 SZJ   : 用来计算日月的升起、中天、降落
注意，上述函数或物件是纯天文学的，根据实际需要组合使用可以得到所需要的各种日月坐标，计算精度及计算速度也是可以根据需要有效控制的。
*****************************************/
Number.prototype.toFixed=function(m){ //IE6.0的toFixed()有Bug,所以重写
  var n=this, f='', p=Math.pow(10,m); //p为10进制移位量;
  if(n<0) n = -n, f = '-';   //把负数转为正数
  var a=Math.floor(n),b=n-a; //分离整数与小数
  b = Math.round(b*p );      //移位并四舍五入
  if(b>=p) a++,b-=p;         //进位
  if(m) b = '.'+(p+b+'').substr(1,m); //小数部分左边补0
  else b = '';
  return f+a+b;
};

function rad2str(d,tim){ //将弧度转为字串
 //tim=0输出格式示例: -23°59' 48.23"
 //tim=1输出格式示例:  18h 29m 44.52s
 var s=" ";
 var w1="°",w2="'",w3='"';
 if(d<0)  d=-d,s='-';
 if(tim){ d*=12/Math.PI; w1="h ",w2="m",w3="s"; }
 else     d*=180/Math.PI;
 var a=Math.floor(d); d=(d-a)*60;
 var b=Math.floor(d); d=(d-b)*60;
 var c=Math.floor(d); d=(d-c)*100;
 d=Math.floor(d+0.5);
 if(d>=100) d-=100, c++;
 if(c>=60)  c-=60,  b++;
 if(b>=60)  b-=60,  a++;
 a="   "+a, b="0"+b, c="0"+c, d="0"+d;
 s+=a.substr(a.length-3,3)+w1;
 s+=b.substr(b.length-2,2)+w2;
 s+=c.substr(c.length-2,2)+".";
 s+=d.substr(d.length-2,2)+w3;
 return s;
}
function rad2str2(d){ //将弧度转为字串,精确到分
 //输出格式示例: -23°59'
 var s="+";
 var w1="°",w2="'",w3='"';
 if(d<0)  d=-d,s='-';
 d*=180/Math.PI;
 var a=Math.floor(d);
 var b=Math.floor((d-a)*60+0.5);
 if(b>=60)  b-=60,  a++;
 a="   "+a, b="0"+b;
 s+=a.substr(a.length-3,3)+w1;
 s+=b.substr(b.length-2,2)+w2;
 return s;
}
function m2fm(v,fx,fs){//秒转为分秒,fx为小数点位数,fs为1转为"分秒"格式否则转为"角度分秒"格式
 var gn='';
 if(v<0) v=-v, gn='-';
 var f=int2(v/60), m=v-f*60;
 if(fs) return gn + f + '分' +m.toFixed(fx) + '秒';
 else   return gn + f + "'"  +m.toFixed(fx) + '"' ;
}
function rad2mrad(v){ //对超过0-2PI的角度转为0-2PI
  v=v % (2*Math.PI);
  if(v<0) return v+2*Math.PI;
  return v;
}
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 mod2(a,b){ //临界余数(a与最近的整倍数b相差的距离)
  var c=a/b;
  c -= Math.floor(c);
  if(c>0.5) c-=1;
  return c*b;
}
function int2(v){ return Math.floor(v); }  //取整数部分

var JD={ //日期元件
  Y:2000, M:1, D:1, h:12, m:0, s:0,
  dts:new Array( // TD - UT1 计算表
   -4000,108371.7,-13036.80,392.000, 0.0000, -500, 17201.0,  -627.82, 16.170,-0.3413,
    -150, 12200.6,  -346.41,  5.403,-0.1593,  150,  9113.8,  -328.13, -1.647, 0.0377,
     500,  5707.5,  -391.41,  0.915, 0.3145,  900,  2203.4,  -283.45, 13.034,-0.1778,
    1300,   490.1,   -57.35,  2.085,-0.0072, 1600,   120.0,    -9.81, -1.532, 0.1403,
    1700,    10.2,    -0.91,  0.510,-0.0370, 1800,    13.4,    -0.72,  0.202,-0.0193,
    1830,     7.8,    -1.81,  0.416,-0.0247, 1860,     8.3,    -0.13, -0.406, 0.0292,
    1880,    -5.4,     0.32, -0.183, 0.0173, 1900,    -2.3,     2.06,  0.169,-0.0135,
    1920,    21.2,     1.69, -0.304, 0.0167, 1940,    24.2,     1.22, -0.064, 0.0031,
    1960,    33.2,     0.51,  0.231,-0.0109, 1980,    51.0,     1.29, -0.026, 0.0032,
    2000,    63.87,    0.1,   0,     0,      2005),
  deltatExt:function(y,jsd){ var dy=(y-1820)/100; return -20+jsd*dy*dy; }, //二次曲线外推
  deltatT:function(y){ //计算世界时与原子时之差,传入年
   if(y>=2005){
     //sd是2005年之后几年（一值到y1年）的速度估计。
     //sjd是y1年之后的加速度估计。瑞士星历表jsd=31,NASA网站jsd=32,skmap的jsd=29
     var y1=2014, sd=0.4, jsd=31;
     if(y<=y1) return 64.7 + (y-2005) *sd; //直线外推
     var v = this.deltatExt(y,jsd);        //二次曲线外推
     var dv= this.deltatExt(y1,jsd) - ( 64.7+(y1-2005)*sd ); //y1年的二次外推与直线外推的差
     if(y<y1+100  ) v -= dv*(y1+100-y)/100;
     return v; 
   }
   var i,d=this.dts;
   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;
  },
  deltatT2:function(t){ //传入儒略日(J2000起算),计算TD-UT(单位:日)
    return this.deltatT(t/365.2425+2000)/86400.0;
  },
  JD:function(y,m,d){ //公历转儒略日
   var n=0, G=0;
   if(y*372+m*31+int2(d)>=588829) G=1; //判断是否为格里高利历日1582*372+10*31+15
   if(m<=2) m+=12, y--;
   if(G) n=int2(y/100), n=2-n+int2(n/4); //加百年闰
   return int2(365.25*(y+4716)+0.01) + int2(30.6001*(m+1))+d+n - 1524.5;
  },
  toJD:function(){ return this.JD( this.Y, this.M, this.D+((this.s/60+this.m)/60+this.h)/24 ); }, //公历转儒略日
  setFromJD:function(jd){ //儒略日数转公历
   jd+=0.5;
   var A=int2(jd), F=jd-A, D;  //取得日数的整数部份A及小数部分F
   if(A>=2299161) D=int2((A-1867216.25)/36524.25),A+=1+D-int2(D/4);
   A     +=1524; //向前移4年零2个月
   this.Y =int2((A-122.1)/365.25);//年
   D      =A-int2(365.25*this.Y); //去除整年日数后余下日数
   this.M =int2(D/30.6001);       //月数
   this.D =D-int2(this.M*30.6001);//去除整月日数后余下日数
   this.Y-=4716; this.M--;
   if(this.M>12) this.M-=12;
   if(this.M<=2) this.Y++;
   //日的小数转为时分秒
   F*=24; this.h=int2(F); F-=this.h;
   F*=60; this.m=int2(F); F-=this.m;
   F*=60; this.s=F;
  },
  toStr:function(){ //日期转为串
   var Y="     "+this.Y,M="0"+this.M, D="0"+this.D;
   var h=this.h,m=this.m,s=int2(this.s+.5);
   if(s>=60) s-=60,m++;
   if(m>=60) m-=60,h++;
   h="0"+h; m="0"+m; s="0"+s;
   Y=Y.substr(Y.length-5,5); M=M.substr(M.length-2,2); D=D.substr(D.length-2,2);
   h=h.substr(h.length-2,2); m=m.substr(m.length-2,2); s=s.substr(s.length-2,2);
   return Y+"-"+M+"-"+D+" "+h+":"+m+":"+s;
  },
  setFromJD_str:function(jd){ this.setFromJD(jd); return this.toStr(); },
  timeStr:function(jd){ //提取jd中的时间(去除日期)
   var h,m,s;
   jd+=0.5; jd = (jd - int2(jd));
   jd*=24; h = int2(jd); jd-=h;
   jd*=60; m = int2(jd); jd-=m;
   jd*=60; s = int2(jd+0.5);
   if(s>=60) s-=60,m++;
   if(m>=60) m-=60,h++;
   h="0"+h; m="0"+m; s="0"+s;
   return h.substr(h.length-2,2)+':'+m.substr(m.length-2,2)+':'+s.substr(s.length-2,2);
  },
  //星期相关
  Weeks : new Array('日','一','二','三','四','五','六','七'),
  getWeek:function(jd){ return int2(jd+1.5)%7; }, //星期计算
  nnweek:function(y,m,n,w){ //求y年m月的第n个星期w的儒略日数
   var jd = JD.JD(y,m,1.5); //月首儒略日
   var w0 = (jd+1)%7;       //月首的星期
   var r  = jd-w0+7*n+w;    //jd-w0+7*n是和n个星期0,起算下本月第一行的星期日(可能落在上一月)。加w后为第n个星期w
   if(w>=w0) r-=7; //第1个星期w可能落在上个月,造成多算1周,所以考虑减1周
   if(n==5){
    m++; if(m>12) m=1, y++;   //下个月
    if(r>=JD.JD(y,m,1.5)) r-=7; //r跑到下个月则减1周
   }
   return r;
  }
};

var ZB={ //坐标类
 llrConv:function(JW,E){ //球面坐标旋转
  //黄道赤道坐标变换,赤到黄E取负
  var sinE =Math.sin(E),    cosE =Math.cos(E);
  var sinJ =Math.sin(JW[0]),cosJ =Math.cos(JW[0]);
  var sinW =Math.sin(JW[1]),cosW =Math.cos(JW[1]), tanW=Math.tan(JW[1]);
  JW[0]=Math.atan2( sinJ*cosE - tanW*sinE, cosJ );
  JW[1]=Math.asin ( cosE*sinW + sinE*cosW*sinJ  );
  JW[0]=rad2mrad(JW[0]);
 },
 llr2xyz:function(J,W,R,z){ //球面转直角坐标
  z[0]=R*Math.cos(W)*Math.cos(J);
  z[1]=R*Math.cos(W)*Math.sin(J);
  z[2]=R*Math.sin(W);
 },
 xyz2llr:function(x,y,z,q){ //直角坐标转球
  q[2] = Math.sqrt(x*x+y*y+z*z);
  q[1] = Math.asin(z/q[2]);
  q[0] = rad2mrad( Math.atan2(y,x) );
 },
 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),
 nutation:function(t){ //章动计算,t是世纪数
  var i,c,a, t2=t*t, B=this.nutB, dL=0,dE=0;
  for(i=0;i<B.length;i+=5){
   c = B[i]+B[i+1]*t+B[i+2]*t2;
   if(i==0) a=-1.742*t; else a=0;
   dL+=(B[i+3]+a)*Math.sin(c);
   dE+= B[i+4]   *Math.cos(c);
  }
  this.dL=dL/100/rad;  //黄经章动
  this.dE=dE/100/rad;  //交角章动
 },
 nutationLon:function(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;
 },
 hcjj:function(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;
 },
 j1_j2:function(J1,W1,J2,W2){ //求角度差
   var dJ=rad2rrad(J1-J2), dW=W1-W2;
   if(Math.abs(dJ)<1/1000 && Math.abs(dW)<1/1000){
     dJ*=Math.cos((W1+W2)/2);
     return Math.sqrt(dJ*dJ+dW*dW);
   }
   return Math.acos( Math.sin(W1)*Math.sin(W2) + Math.cos(W1)*Math.cos(W2)*Math.cos(dJ) );
 },
 gst:function(T,dt){ //传入T是2000年首起算的日数(UT),dt是deltatT(日),精度要求不高时dt可取值为0
  //返回格林尼治恒星时(不含赤经章动及非多项式部分),即格林尼治子午圈的平春风点起算的赤经
  var t=(T+dt)/36525,t2=t*t, t3=t2*t, t4=t3*t;
  return pi2*(0.7790572732640 + 1.00273781191135448*T) //严格说这里的T是UT,下一行的t是力学时(世纪数)
      + (0.014506 + 4612.15739966*t + 1.39667721*t2 - 0.00009344*t3 + 0.00001882*t4)/rad;
 },
 gst2:function(T){ //传入力学时J2000起算日数，返回恒星时
  var dt=JD.deltatT2(T);
  return ZB.gst(T-dt,dt);
 },
 gxc_sunLon:function(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; //黄经光行差
 },
 gxc_sunLat:function(t) { return 0;       }, //黄纬光行差
 gxc_moonLon:function(t){ return -3.4E-6; }, //月球经度光行差,误差0.07"
 gxc_moonLat:function(t){ //月球纬度光行差,误差0.006"
  return 0.063*Math.sin(0.057+8433.4662*t+0.000064*t*t)/rad;
 },
 AR:function(ho){ return -0.0002909/Math.tan( ho+0.002227/(ho+0.07679) ); }, //大气折射,ho是视高度
 AR2:function(h){ return  0.0002967/Math.tan( h +0.003138/( h+0.08919) ); }, //大气折射,h是真高度
 parallax:function(z,H,fa,high){ //视差修正
  //z赤道坐标,fa地理纬度,H时角,high海拔(千米)
  var dw=1; if(z[2]<500) dw=cs_AU;
  z[2]*=dw;
  var r0,x0,y0,z0, f=0.99664719, u=Math.atan(f*Math.tan(fa)), g=z[0]+H;
  r0 = cs_rEar*Math.cos(u)  + high*Math.cos(fa); //站点与地地心向径的赤道投影长度
  z0 = cs_rEar*Math.sin(u)*f+ high*Math.sin(fa); //站点与地地心向径的轴向投影长度
  x0 = r0*Math.cos(g);
  y0 = r0*Math.sin(g);

  this.llr2xyz(z[0],z[1],z[2],z);
  z[0]-=x0, z[1]-=y0, z[2]-=z0;
  this.xyz2llr(z[0],z[1],z[2],z);
  z[2]/=dw;
 },
 line_earth:function(J1,W1,R1,J2,W2,R2){ //求空间两点连线与地球的交点(靠近点1的交点),返回在ZB.le_J,le_W,赤道坐标。R1,R2单位是千米
  var x1=R1*Math.cos(W1)*Math.cos(J1), y1=R1*Math.cos(W1)*Math.sin(J1), z1=R1*Math.sin(W1);
  var x2=R2*Math.cos(W2)*Math.cos(J2), y2=R2*Math.cos(W2)*Math.sin(J2), z2=R2*Math.sin(W2);
  var dx=x2-x1, dy=y2-y1, dz=z2-z1, f=0.99664719, r=cs_rEar; //直线参数及地球参数
  var x,y,z,lh=0;
  if( Math.abs(dx)<Math.abs(dy) ) //必要时仑换
    lh=dx,dx=dy,dy=lh, lh=x1,x1=y1,y1=lh, lh=1;
  var a=dy/dx, b=y1-a*x1, c=dz/dx/f, d=z1/f-c*x1;
  var A=a*a+c*c+1, B=a*b+c*d, C=b*b+d*d-r*r, D=B*B-A*C;
  if(D<0) { this.le_J=this.le_W=100; return; } //返回100表示无解
  D=Math.sqrt(D); if(x1+B/A<0) D = -D;
  x=(-B+D)/A, y=a*x+b, z=(c*x+d)/f;
  this.le_R1 = Math.sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1)+(z-z1)*(z-z1));
  if(lh) lh=x,x=y,y=lh;
  this.le_W = Math.atan( z/Math.sqrt(x*x+y*y) );
  this.le_J = rad2mrad( Math.atan2(y,x) );
 }
};



function XL0_calc(xt,zn,t,n){ //xt星体,zn坐标号,t儒略千年数,n计算项数
  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 = int2(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;
}

var XL={ //星历类
//==========================
//以下是月球黄经周期项及泊松项,精度1角秒,平均误差0.15角秒,近期精度更高数倍
//各坐标均是余弦项,各列单位:角秒,1,1,1e-4,1e-8,1e-8
ML:new Array(
//ML0
new Array(22639.59,0.784758,8328.69142462,1.52292,25.07,-0.124,4586.44,0.187397,7214.0628654,-2.1848,-18.9,0.08,2369.91,2.54295,15542.7542900,-0.6618,6.2,-0.04,769.03,3.14031,16657.382849,3.046,50,-0.25,666.42,1.52767,628.301955,-0.027,0,-0.01,411.60,4.82661,16866.932315,-1.280,-1,0,211.66,4.1150,-1114.628559,-3.708,-44,0.2,205.44,0.2305,6585.76091,-2.158,-19,0.1,191.96,4.8985,23871.44571,0.861,31,-0.2,164.73,2.5861,14914.45233,-0.635,6,0,147.32,5.4553,-7700.38947,-1.550,-25,0.1,124.99,0.4861,7771.37714,-0.33,3,0,109.38,3.8832,8956.99338,1.50,25,-0.1,55.18,5.5703,-1324.17803,0.62,7,0,45.10,0.8990,25195.62374,0.24,24,0,39.53,3.8121,-8538.24089,2.80,26,0,38.43,4.3011,22756.81716,-2.85,-13,0,36.12,5.4959,24986.07427,4.57,75,0,30.77,1.946,14428.12573,-4.37,-38,0,28.40,3.286,7842.36482,-2.21,-19,0,24.36,5.641,16171.05625,-0.69,6,0,18.58,4.414,-557.3143,-1.85,-22,0,17.95,3.585,8399.6791,-0.36,3,0,14.53,4.942,23243.1438,0.89,31,0,14.38,0.971,32200.1371,2.38,56,0,14.25,5.764,-2.3012,1.52,25,0,13.90,0.374,31085.5086,-1.3,12,0,13.19,1.759,-9443.3200,-5.2,-69,0,9.68,3.100,-16029.0809,-3.1,-50,0,9.37,0.302,24080.9952,-3.5,-20,0,8.61,4.158,-1742.9305,-3.7,-44,0,8.45,2.842,16100.0686,1.2,28,0,8.05,2.629,14286.1504,-0.6,6,0,7.63,6.239,17285.6848,3.0,50,0,7.45,1.485,1256.6039,-0.1,0,0,7.37,0.274,5957.4590,-2.1,-19,0,7.06,5.672,33.7570,-0.3,0,0,6.38,4.784,7004.5134,2.1,32,0,5.74,2.657,32409.6866,-1.9,5,0,4.37,4.344,22128.5152,-2.8,-13,0,4.00,3.255,33524.3152,1.8,49,0,3.21,2.244,14985.4400,-2.5,-16,0,2.91,1.71,24499.7477,0.8,31,0,2.73,1.99,13799.8238,-4.3,-38,0,2.57,5.41,-7072.0875,-1.6,-25,0,2.52,3.24,8470.6668,-2.2,-19,0,2.49,4.07,-486.3266,-3.7,-44,0,2.15,5.61,-1952.4800,0.6,7,0,1.98,2.73,39414.200,0.2,37,0,1.93,1.57,33314.766,6.1,100,0,1.87,0.42,30457.207,-1.3,12,0,1.75,2.06,-8886.006,-3.4,-47,0,1.44,2.39,-695.876,0.6,7,0,1.37,3.03,-209.549,4,51,0,1.26,5.94,16728.371,1,28,0,1.22,6.17,6656.749,-4,-41,0,1.19,5.87,6099.434,-6,-63,0,1.18,1.01,31571.835,2,56,0,1.16,3.84,9585.295,1,25,0,1.14,5.64,8364.740,-2,-19,0,1.08,1.23,70.988,-2,-22,0,1.06,3.33,40528.829,4,81,0,0.99,5.01,40738.378,0,30,0,0.95,5.69,-17772.011,-7,-94,0,0.88,0.30,-0.352,0,0,0,0.82,2.99,393.021,0,0,0,0.79,1.84,8326.390,3,50,0,0.75,4.98,22614.842,1,0,0,0.74,2.87,8330.993,0,0,0,0.67,0.74,-24357.772,-5,-75,0,0.64,1.31,8393.126,-2,0,0,0.64,5.89,575.338,0,0,0,0.64,1.12,23385.119,-3,0,0,0.58,5.20,24428.760,3,53,0,0.58,3.51,-9095.555,1,0,0,0.57,6.06,29970.880,-5,0,0,0.56,2.96,0.329,2,0,0,0.56,4.00,-17981.561,-2,0,0,0.56,0.53,7143.075,0,0,0,0.55,2.31,25614.376,5,75,0,0.54,4.23,15752.304,-5,0,0,0.49,3.32,-8294.934,-2,0,0,0.49,1.74,8362.448,1,0,0,0.48,1.80,-10071.622,-5,-69,0,0.45,0.86,15333.205,4,57,0,0.45,2.07,8311.771,-2,0,0,0.43,0.34,23452.693,-3,0,0,0.42,4.94,33733.865,-3,0,0,0.41,1.64,17495.234,-1,0,0,0.40,1.46,23314.131,-1,0,0,0.39,2.13,38299.571,-4,0,0,0.38,2.70,31781.385,-2,0,0,0.37,4.83,6376.211,2,0,0,0.36,3.87,16833.175,-1,0,0,0.36,5.04,15056.428,-4,0,0,0.35,5.16,-8257.704,-3,0,0,0.34,4.23,157.734,0,0,0,0.34,2.67,13657.848,-1,0,0,0.33,5.61,41853.007,3,74,0,0.32,5.89,-39.815,0,0,0,0.31,4.4,21500.213,-3,0,0,0.30,1.3,786.042,0,0,0,0.30,5.3,-24567.322,0,0,0,0.30,1.0,5889.885,-2,0,0,0.29,4.2,-2371.232,-4,0,0,0.29,3.7,21642.189,-7,-57,0,0.29,4.1,32828.439,2,56,0,0.29,3.5,31713.811,-1,0,0,0.29,5.4,-33.781,0,0,0,0.28,6.0,-16.921,-4,0,0,0.28,2.8,38785.898,0,0,0,0.27,5.3,15613.742,-3,0,0,0.26,4.0,25823.926,0,0,0,0.25,0.6,24638.309,-2,0,0,0.25,1.3,6447.199,0,0,0,0.25,0.9,141.975,-4,0,0,0.25,0.3,5329.157,-2,0,0,0.25,0.1,36.048,-4,0,0,0.23,2.3,14357.138,-2,0,0,0.23,5.2,2.630,0,0,0,0.22,5.1,47742.891,2,63,0,0.21,2.1,6638.724,-2,0,0,0.20,4.4,39623.75,-4,0,0,0.19,2.1,588.49,0,0,0,0.19,3.1,-15400.78,-3,-50,0,0.19,5.6,16799.36,-1,0,0,0.18,3.9,1150.68,0,0,0,0.18,1.6,7178.01,2,0,0,0.18,2.6,8328.34,2,0,0,0.18,2.1,8329.04,2,0,0,0.18,3.2,-9652.87,-1,0,0,0.18,1.7,-8815.02,-5,-69,0,0.18,5.7,550.76,0,0,0,0.17,2.1,31295.06,-6,0,0,0.17,1.2,7211.76,-1,0,0,0.16,4.5,14967.42,-1,0,0,0.16,3.6,15540.45,1,0,0,0.16,4.2,522.37,0,0,0,0.16,4.6,15545.06,-2,0,0,0.16,0.5,6428.02,-2,0,0,0.16,2.0,13171.52,-4,0,0,0.16,2.3,7216.36,-4,0,0,0.15,5.6,7935.67,2,0,0,0.15,0.5,29828.90,-1,0,0,0.15,1.2,-0.71,0,0,0,0.15,1.4,23942.43,-1,0,0,0.14,2.8,7753.35,2,0,0,0.14,2.1,7213.71,-2,0,0,0.14,1.4,7214.42,-2,0,0,0.14,4.5,-1185.62,-2,0,0,0.14,3.0,8000.10,-2,0,0,0.13,2.8,14756.71,-1,0,0,0.13,5.0,6821.04,-2,0,0,0.13,6.0,-17214.70,-5,-72,0,0.13,5.3,8721.71,2,0,0,0.13,4.5,46628.26,-2,0,0,0.13,5.9,7149.63,2,0,0,0.12,1.1,49067.07,1,55,0,0.12,2.9,15471.77,1,0,0,0.11,3.9,41643.46,8,125,0,0.11,2.0,8904.03,2,0,0,0.11,3.3,-18.05,-2,0,0,0.10,2.3,-4.93,2,0,0,0.10,2.2,-6.56,-2,0,0,0.10,1.4,1884.91,0,0,0,0.10,5.9,5471.13,-6,-63,0,0.10,1.1,15149.73,-1,0,0,0.10,4.7,15509.00,0,0,0,0.10,5.2,7230.98,2,0,0,0.09,3.4,39900.53,4,0,0,0.09,2.0,25057.06,3,0,0,0.09,1.2,-79.63,0,0,0,0.09,1.6,-26310.25,-4,0,0,0.09,1.0,42062.56,-1,0,0,0.09,6.1,29342.58,-5,0,0,0.09,4.4,15542.40,-1,0,0,0.09,3.8,15543.11,-1,0,0,0.09,4.1,6063.39,-2,0,0,0.09,4.0,52.97,0,0,0,0.08,0.5,47952.44,-3,0,0,0.08,1.6,7632.82,2,0,0,0.08,0.2,14392.08,-1,0,0,0.08,6.2,6028.45,-4,0,0,0.08,0.6,-7909.94,3,0,0,0.08,5.2,-77.55,0,0,0,0.08,2.7,8786.15,-2,0,0,0.08,2.4,9166.54,-3,0,0,0.08,3.7,-25405.17,4,0,0,0.08,5.7,48857.52,5,0,0,0.08,1.9,8315.57,-2,0,0,0.08,5.5,-18191.11,2,0,0,0.08,1.4,-16238.63,1,0,0,0.07,5.1,40110.08,0,0,0,0.07,2.1,64.43,-4,0,0,0.07,2.2,37671.27,-3,0,0,0.07,1.7,16693.43,-1,0,0,0.07,3.3,-26100.70,-8,0,0,0.07,1.1,8329.40,2,0,0,0.07,3.6,8327.98,2,0,0,0.07,2.4,16833.15,-1,0,0,0.07,3.4,24709.30,-3,0,0,0.07,1.7,8346.72,0,0,0,0.07,2.6,22547.27,1,0,0,0.07,3.5,15576.51,-1,0,0,0.07,5.8,33037.99,-2,0,0,0.07,4.6,8322.13,0,0,0,0.07,6.2,17913.99,3,0,0,0.07,1.5,22685.83,-1,0,0,0.06,2.4,7180.31,-2,0,0,0.06,1.1,30943.53,2,0,0,0.06,1.9,8288.88,2,0,0,0.06,4.7,6.03,0,0,0,0.06,2.8,8368.51,2,0,0,0.06,5.7,-2580.78,1,0,0,0.06,3.8,7056.33,-2,0,0,0.06,1.5,8294.91,2,0,0,0.06,0.1,-10281.17,-1,0,0,0.06,3.1,-8362.47,-1,0,0,0.06,4.4,8170.96,2,0,0,0.06,5.8,-13.12,-4,0,0,0.06,6.0,6625.57,-2,0,0,0.06,5.0,-0.51,0,0,0,0.06,2.7,7161.09,-2,0,0,0.06,0.2,7214.06,-2,0,0,0.06,4.0,22199.50,-5,0,0,0.06,5.4,8119.14,6,0,0,0.06,1.1,7542.65,2,0,0,0.06,0.3,8486.43,2,0,0,0.05,4.2,16655.08,5,0,0,0.05,0.7,7267.03,-2,0,0,0.05,3.1,12.62,1,0,0,0.05,3.0,-32896.01,-2,0,0,0.05,3.5,1097.71,0,0,0,0.05,5.4,-6443.79,-2,0,0,0.05,1.4,7789.40,-2,0,0,0.05,5.8,40042.50,0,0,0,0.05,3.6,9114.73,2,0,0,0.05,1.5,8504.48,-2,0,0,0.05,5.2,16659.68,2,0,0,0.05,1.1,7247.82,-2,0,0,0.05,0.2,-1290.42,0,0,0,0.05,4.7,-32686.46,-6,0,0,0.05,3.5,548.68,0,0,0,0.05,2.4,6663.31,-2,0,0,0.05,1.0,1572.08,0,0,0,0.05,2.0,14954.26,-1,0,0,0.05,3.7,6691.69,-2,0,0,0.04,6.2,-235.29,0,0,0,0.04,3.0,32967.00,0,0,0,0.04,3.8,-1671.94,-6,0,0,0.04,5.8,1179.06,0,0,0,0.04,0.1,34152.62,2,0,0,0.04,3.7,6514.77,0,0,0,0.04,5.6,15.73,-2,0,0,0.04,5.8,8351.23,-2,0,0,0.04,0.3,7740.20,2,0,0,0.04,6.1,15385.02,-1,0,0,0.04,6.1,7285.05,-4,0,0,0.04,1.3,32757.45,4,0,0,0.04,4.5,8275.72,2,0,0,0.04,0.2,8381.66,2,0,0,0.04,5.9,-766.86,2,0,0,0.04,1.7,254.43,0,0,0,0.04,0.4,9027.98,0,0,0,0.04,3.0,7777.94,2,0,0,0.04,4.7,33943.07,6,0,0,0.04,3.5,8326.06,2,0,0,0.04,3.7,21013.89,-7,0,0,0.04,5.6,606.98,0,0,0,0.04,1.2,8331.32,2,0,0,0.04,2.8,7211.43,-2,0,0,0.04,0.7,7216.69,-2,0,0,0.04,6.2,25161.87,1,0,0,0.04,4.4,7806.32,2,0,0,0.04,4.2,9179.17,-2,0,0,0.04,4.7,14992.00,-1,0,0,0.04,0.3,67.51,-1,0,0,0.04,3.7,25266.61,-2,0,0,0.04,5.4,16328.80,-1,0,0,0.04,1.4,7174.25,-2,0,0,0.04,5.0,15684.73,-4,0,0,0.03,0.4,-15.42,-2,0,0,0.03,6.1,15020.38,-1,0,0,0.03,6.0,7371.80,-2,0,0,0.03,1.0,-16623.63,-3,0,0,0.03,6.2,9479.37,2,0,0,0.03,3.2,23661.90,5,0,0,0.03,4.1,8311.42,-2,0,0,0.03,2.4,1965.10,0,0,0,0.03,5.2,15489.79,-1,0,0,0.03,5.0,21986.54,1,0,0,0.03,4.1,16691.14,3,0,0,0.03,5.1,47114.59,2,0,0,0.03,4.5,8917.18,2,0,0,0.03,4.2,2.08,0,0,0,0.03,2.3,75.25,2,0,0,0.03,2.1,7253.88,-2,0,0,0.03,3.1,-0.22,2,0,0,0.03,4.4,16640.46,-1,0,0,0.03,6,8328.36,0,0,0,0.03,5,8329.02,3,0,0,0.03,4,16118.09,-1,0,0,0.03,4,16721.82,-1,0,0,0.03,5,-1881.49,-1,0,0,0.03,6,8157.84,-2,0,0,0.03,6,-18400.31,-7,0,0,0.03,3,16.00,-2,0,0,0.03,2,8879.45,2,0,0,0.03,0,8851.06,2,0,0,0.03,1,14704.90,4,0,0,0.03,3,15595.72,-1,0,0,0.03,6,16864.63,0,0,0,0.03,1,16869.23,-3,0,0,0.03,4,-18609.86,-2,0,0,0.03,0,41157.13,4,0,0),
//ML1
new Array(
1.677,4.669,628.30196,-0.03,0,0,0.516,3.372,6585.7609,-2.2,-19,0,0.414,5.728,14914.4523,-0.6,6,0,0.371,3.969,7700.3895,1.5,25,0,0.276,0.742,8956.9934,1.5,25,0,0.246,4.225,-2.3012,1.5,25,0,0.071,0.14,7842.365,-2,-19,0,0.061,2.50,16171.056,-1,0,0,0.045,0.44,8399.679,0,0,0,0.040,5.77,14286.150,-1,0,0,0.037,4.63,1256.604,0,0,0,0.037,3.42,5957.459,-2,0,0,0.036,1.80,23243.144,1,0,0,0.024,0.04,16029.081,3,50,0,0.022,1.02,-1742.931,-4,0,0,0.019,3.1,17285.685,3,50,0,0.017,1.3,0.329,2,0,0,0.014,0.3,8326.39,3,50,0,0.013,4.0,7072.09,2,0,0,0.013,4.4,8330.99,0,0,0,0.013,0.1,8470.67,-2,0,0,0.011,1.2,22128.52,-3,0,0,0.011,2.5,15542.75,-1,0,0,0.008,0.2,7214.06,-2,0,0,0.007,4.9,24499.75,1,0,0,0.007,5.1,13799.82,-4,0,0,0.006,0.9,-486.33,-4,0,0,0.006,0.7,9585.30,1,0,0,0.006,4.1,8328.34,2,0,0,0.006,0.6,8329.04,2,0,0,0.005,2.5,-1952.48,1,0,0,0.005,2.9,-0.71,0,0,0,0.005,3.6,30457.21,-1,0,0,0.004,0.8,-0.35,0,0,0,0.004,1.8,22614.84,1,0,0,0.004,5.5,-695.88,1,0,0,0.003,2.8,16728.37,1,0,0,0.003,6.1,157.73,0,0,0,0.003,2.5,33.76,0,0,0,0.003,4.2,31571.84,2,0,0,0.003,6.0,7211.76,-1,0,0,0.003,2.1,15540.45,1,0,0,0.003,2.7,2.63,0,0,0,0.003,6.2,15545.06,-2,0,0,0.003,1.2,-39.81,0,0,0,0.003,3.8,7216.36,-4,0,0,0.003,4.4,70.99,-2,0,0,0.003,5.8,13657.85,-1,0,0,0.002,5.6,-0.22,2,0,0,0.002,3.0,8311.77,-2,0,0,0.002,0.9,-33.78,0,0,0),
//ML2
new Array(0.0049,4.67,628.302,0,0,0,0.0023,2.67,-2.301,2,0,0,0.0015,3.37,6585.761,-2,0,0,0.0012,5.7,14914.452,-1,0,0,0.0011,4.0,7700.389,2,0,0,0.0008,0.7,8956.99,1,0,0)
),

MB:new Array( //精度1角秒
//MB0
new Array(18461.24,0.057109,8433.4661575,-0.64006,-0.53,-0.003,1010.17,2.41266,16762.157582,0.883,24.5,-0.13,999.69,5.44004,-104.774733,2.163,25.6,-0.12,623.65,0.91505,7109.288132,-0.022,7,0,199.48,1.8153,15647.52902,-2.825,-19,0.1,166.57,4.8427,-1219.40329,-1.545,-18,0.1,117.26,4.1709,23976.22045,-1.30,6,0,61.91,4.7682,25090.84901,2.41,50,0,33.36,3.2706,15437.97956,1.50,32,0,31.76,1.5124,8223.91669,3.69,51,0,29.58,0.958,6480.98618,0,7,0,15.57,2.487,-9548.0947,-3.07,-43,0,15.12,0.243,32304.9119,0.22,31,0,12.09,4.014,7737.5901,0,7,0,8.87,1.858,15019.2271,-2.8,-19,0,8.05,5.381,8399.7091,-0.3,0,0,7.96,4.214,23347.9185,-1.3,6,0,7.43,4.886,-1847.7052,-1.5,-18,0,6.73,3.827,-16133.8556,-0.9,-24,0,6.58,2.673,14323.3510,-2.2,-12,0,6.46,3.156,9061.7681,-0.7,0,0,6.30,0.171,25300.3985,-1.9,0,0,5.63,0.800,733.0767,-2.2,-26,0,5.37,2.114,16204.8433,-1.0,0,0,5.31,5.511,17390.4595,0.9,25,0,5.08,2.255,523.5272,2.1,26,0,4.84,6.183,-7805.1642,0.6,0,0,4.81,5.141,-662.0890,0.3,0,0,3.98,0.841,33419.5404,3.9,75,0,3.67,5.029,22652.0424,-0.7,13,0,3.00,5.93,31190.2833,-3.5,-13,0,2.80,2.18,-16971.7070,3.4,27,0,2.41,3.57,22861.5919,-5.0,-38,0,2.19,3.94,-9757.6442,1.3,8,0,2.15,5.63,23766.6710,3.0,57,0,1.77,3.31,14809.678,1.5,32,0,1.62,2.60,7318.838,-4.3,-44,0,1.58,3.87,16552.608,5.2,76,0,1.52,2.60,40633.603,1.7,56,0,1.52,0.13,-17876.786,-4.6,-68,0,1.51,3.93,8399.685,-0.3,0,0,1.32,4.91,16275.831,-3,-19,0,1.26,0.99,24604.522,-1,6,0,1.19,2.00,39518.975,-2,12,0,1.13,0.29,31676.610,0,31,0,1.09,1.00,5852.684,0,7,0,1.02,2.53,33629.090,0,23,0,0.82,0.09,16066.282,1,0,0,0.80,1.96,-33.787,0,0,0,0.80,5.21,16833.145,-1,0,0,0.79,1.47,-24462.547,-2,0,0,0.79,1.66,-591.101,-2,0,0,0.67,4.47,24533.535,1,0,0,0.65,2.53,-10176.397,-3,0,0,0.64,1.58,25719.151,2,0,0,0.63,0.32,5994.660,-4,0,0,0.63,2.15,8435.767,-2,0,0,0.63,1.11,8431.165,1,0,0,0.60,2.72,13695.049,-2,0,0,0.59,1.21,7666.602,2,0,0,0.47,1.10,30980.734,1,0,0,0.46,0.12,-71.018,2,0,0,0.43,2.79,-8990.780,-1,0,0,0.42,1.45,16728.401,1,0,0,0.41,5.07,22023.740,-1,0,0,0.38,4.26,22719.617,-1,0,0,0.35,2.97,14880.665,0,0,0,0.34,5.97,30561.981,-3,0,0,0.33,1.59,-18086.336,0,0,0,0.33,1.02,8467.223,-1,0,0,0.31,1.9,14390.925,-3,0,0,0.31,4.6,8852.219,4,51,0,0.31,0.6,6551.974,-2,0,0,0.30,4.7,-7595.615,-4,-51,0,0.30,1.9,7143.045,0,0,0,0.29,3.2,-1428.953,3,0,0,0.27,4.9,-2476.007,-1,0,0,0.26,3.2,41748.232,5,100,0,0.25,3.4,-1009.854,-6,-70,0,0.24,1.9,32514.461,-4,0,0,0.24,3.3,32933.214,0,0,0,0.21,3.6,22233.290,-5,0,0,0.21,4.4,47847.666,0,0,0,0.21,3.9,23418.91,-3,0,0,0.17,5.8,14951.65,-2,0,0,0.16,2.0,38890.67,-2,0,0,0.15,1.7,32095.36,5,82,0,0.14,4.3,40843.15,-3,0,0,0.14,2.9,7876.15,-2,0,0,0.14,5.0,48962.29,3,81,0,0.13,4.0,8365.89,0,0,0,0.13,4.1,-26205.48,-6,-94,0,0.13,1.4,-8643.02,5,52,0,0.13,5.7,23138.37,3,57,0,0.12,2.6,40005.30,2,56,0,0.12,4.9,41957.78,1,0,0,0.11,3.8,-15505.55,-1,0,0,0.11,4.9,16904.13,-3,0,0,0.11,1.8,23280.34,-1,0,0,0.11,0.4,-17319.47,-3,0,0,0.11,1.6,37.20,-2,0,0,0.10,1.3,25161.84,1,0,0,0.10,0.8,1361.38,-2,0,0,0.09,0.5,29866.11,-3,0,0,0.09,6.2,24881.30,7,0,0,0.09,4.0,-10385.95,1,0,0,0.09,4.7,70.99,-2,0,0,0.08,0.9,15613.77,-3,0,0,0.08,4.4,21537.41,-4,0,0,0.08,1.9,-8365.95,0,0,0,0.08,0,16728.38,1,0,0,0.08,2.4,-8919.79,-3,0,0,0.08,3.7,-452.54,-4,0,0,0.07,5.4,-32791.24,-4,0,0,0.07,5.8,-1185.65,-2,0,0,0.07,3.5,16759.86,2,0,0,0.07,3.4,14181.38,2,0,0,0.07,4.5,16764.46,-1,0,0,0.07,4.7,8446.09,0,0,0,0.07,5.9,24185.77,-6,0,0,0.06,0.5,32862.23,2,0,0,0.06,2.4,24394.97,3,0,0,0.06,1.8,5785.11,1,0,0,0.06,2.6,6690.54,-4,0,0,0.06,2.2,1151.83,2,0,0,0.06,3.9,34047.84,4,0,0,0.06,1.4,38404.35,-6,0,0,0.06,0.3,31048.31,0,0,0,0.06,3.1,9690.07,-1,0,0,0.06,1.1,30352.43,1,0,0,0.06,6.0,8504.45,-3,0,0,0.06,5.5,18018.76,1,0,0,0.06,0.2,-18505.09,-5,0,0,0.05,0.8,-9129.34,1,0,0,0.05,5.7,7947.14,-4,0,0,0.05,0.4,5366.36,-4,0,0,0.05,4.0,-68.73,-2,0,0,0.05,2.7,31818.59,-4,0,0,0.05,1.0,16798.21,-3,0,0,0.05,5.9,8293.75,0,0,0,0.05,1.5,15090.21,-5,0,0,0.05,3.5,39309.43,2,0,0,0.05,3.2,23942.46,-1,0,0,0.05,3.4,7143.07,0,0,0,0.04,3.8,46733.04,-4,0,0,0.04,5.2,8288.35,0,0,0,0.04,3.4,16795.91,1,0,0,0.04,4.5,-1776.72,-3,0,0),
//MB1
new Array(0.074,4.10,6480.986,0,7,0,0.030,0.87,7737.590,0,0,0,0.022,5.00,15019.227,-3,0,0,0.020,1.1,23347.918,-1,0,0,0.019,1.7,-1847.705,-2,0,0,0.017,5.6,16133.856,1,0,0,0.016,0,9061.768,-1,0,0,0.014,3.9,733.077,-2,0,0,0.013,2.4,17390.46,1,0,0,0.013,5.6,8399.68,0,0,0,0.013,0.9,-523.53,-2,0,0,0.012,3.2,7805.16,-1,0,0,0.011,3.7,8435.77,-2,0,0,0.011,5.9,8431.16,1,0,0,0.005,4.1,5852.68,0,0,0,0.004,0.2,14809.68,2,0,0)
),

MR:new Array( //精度1千米
//MR0
new Array(385000.51,0,0,0,0,0,20905.35,5.497147,8328.6914246,1.52292,25.07,-0.124,3699.11,4.899786,7214.0628654,-2.1848,-18.9,0.08,2955.97,0.97216,15542.7542900,-0.6618,6.2,-0.04,569.93,1.56952,16657.382849,3.046,50,-0.2,246.16,5.6858,-1114.628559,-3.708,-44,0.2,204.59,1.0153,14914.45233,-0.635,6,0,170.73,3.3277,23871.44571,0.861,31,-0.2,152.14,4.9429,6585.76091,-2.158,-19,0.1,129.62,0.7429,-7700.38947,-1.55,-25,0.1,108.74,5.1985,7771.37714,-0.33,3,0,104.76,2.3124,8956.99338,1.50,25,-0.1,79.66,5.3829,-8538.24089,2.80,26,-0.1,48.89,6.2401,628.30196,-0.03,0,0,34.78,2.7303,22756.81716,-2.85,-13,0,30.82,4.071,16171.05625,-0.69,6,0,24.21,1.715,7842.36482,-2.21,-19,0,23.21,3.925,24986.07427,4.57,75,0,21.64,0.375,14428.12573,-4.37,-38,0,16.67,2.014,8399.6791,-0.36,3,0,14.40,3.330,-9443.3200,-5.23,-69,0,12.83,3.371,23243.1438,0.9,31,0,11.65,5.086,31085.5086,-1.3,12,0,10.44,5.683,32200.1371,2.4,56,0,10.32,0.858,-1324.1780,0.6,7,0,10.06,5.729,-1742.9305,-3.7,-44,0,9.88,1.058,14286.1504,-0.6,6,0,8.75,4.786,-9652.8694,-0.9,-18,0,8.38,5.985,-557.3143,-1.9,-22,0,7.00,4.671,-16029.0809,-3.1,-50,0,6.32,1.271,16100.0686,1.2,28,0,5.75,4.668,17285.6848,3.0,50,0,4.95,4.986,5957.4590,-2.1,-19,0,4.42,4.597,-209.5495,4.3,51,0,4.13,3.213,7004.5134,2.1,32,0,3.96,2.773,22128.5152,-2.8,-13,0,3.26,0.673,14985.4400,-2.5,-16,0,3.15,0.11,16866.9323,-1.3,0,0,2.62,0.14,24499.7477,0.8,31,0,2.35,1.67,8470.6668,-2.2,-19,0,2.12,0.70,-7072.0875,-1.6,-25,0,1.90,0.42,13799.824,-4.3,-38,0,1.74,3.63,-8886.006,-3.4,-47,0,1.57,5.13,30457.207,-1.3,12,0,1.42,1.16,39414.200,0.2,37,0,1.42,6.17,23314.131,-1.0,9,0,1.17,2.27,9585.295,1,25,0,1.12,6.28,33314.766,6,100,0,1.07,6.20,1256.604,0,0,0,1.06,4.07,8364.740,-2,-19,0,0.93,4.37,16728.371,1,0,0,0.86,4.60,6656.749,-4,0,0,0.85,2.80,70.988,-2,0,0,0.85,5.73,31571.835,2,56,0,0.80,5.08,-9095.555,1,0,0,0.78,0.97,-17772.011,-7,-94,0,0.77,2.66,15752.304,-5,0,0,0.73,0.27,8326.390,3,50,0,0.68,1.30,8330.993,0,0,0,0.67,1.76,40528.829,4,81,0,0.66,3.41,22614.842,1,0,0,0.66,0.90,-1952.480,1,0,0,0.60,6.03,8393.126,-2,0,0,0.60,5.01,24080.995,-3,0,0,0.58,5.83,23385.119,-3,0,0,0.51,4.30,6099.434,-6,-63,0,0.51,1.83,14218.576,0,0,0,0.50,5.24,7143.075,0,0,0,0.50,3.37,-10071.622,-5,-69,0,0.47,2.43,-17981.561,-2,0,0,0.46,4.89,-8294.934,-2,0,0,0.45,0.17,8362.448,1,0,0,0.42,4.49,29970.880,-5,0,0,0.42,2.31,-24357.772,-5,-75,0,0.41,1.10,13657.848,-1,0,0,0.41,0.50,8311.771,-2,0,0,0.38,3.63,24428.760,3,53,0,0.36,0.74,25614.376,5,75,0,0.34,5.77,-2371.232,-4,0,0,0.33,0.86,9166.543,-3,0,0,0.33,0.44,-8257.704,-3,0,0,0.32,4.83,-10281.171,-1,0,0,0.32,5.76,5889.885,-2,0,0,0.29,0.6,38299.571,-4,0,0,0.28,5.6,15333.205,4,57,0,0.28,2.8,21500.213,-3,0,0,0.26,0.7,14357.138,-2,0,0,0.25,2.2,-7909.939,3,0,0,0.24,1.9,31713.811,-1,0,0,0.24,3.5,15056.428,-4,0,0,0.21,3.8,15613.742,-3,0,0,0.21,2.5,32828.439,2,56,0,0.21,3.3,6376.21,2,0,0,0.20,2.9,14967.42,-1,0,0,0.20,2.0,15540.45,1,0,0,0.20,3.1,15545.06,-2,0,0,0.20,1.2,38785.90,0,0,0,0.20,6.1,6447.20,0,0,0,0.19,6.1,-16238.63,1,0,0,0.18,2.1,21642.19,-7,-57,0,0.17,3.3,-8815.02,-5,-69,0,0.17,1.1,8328.34,2,0,0,0.17,0.5,8329.04,2,0,0,0.17,1.3,14756.71,-1,0,0,0.16,0.1,17495.23,-1,0,0,0.16,0.6,6638.72,-2,0,0,0.16,6.2,22685.83,-1,0,0,0.15,5.0,5329.16,-2,0,0,0.15,4.0,16799.36,-1,0,0,0.14,0,7178.01,2,0,0,0.14,5.6,-486.33,-4,0,0,0.14,3.5,47742.89,2,63,0,0.14,4.1,7935.67,2,0,0,0.14,4.6,-15400.78,-3,-50,0,0.14,4.0,-695.88,1,0,0,0.13,6.0,7211.76,-1,0,0,0.13,5.2,29828.90,-1,0,0,0.13,1.2,7753.35,2,0,0,0.13,0.7,7216.36,-4,0,0,0.12,5.8,15149.73,-1,0,0,0.12,1.5,8000.10,-2,0,0,0.12,3.8,8721.71,2,0,0,0.12,5.2,6428.02,-2,0,0,0.11,2.9,-1185.62,-2,0,0,0.11,2.9,15542.40,-1,0,0,0.11,2.2,15543.11,-1,0,0,0.11,0.5,7213.71,-2,0,0,0.11,6.2,7214.42,-2,0,0,0.11,1.3,15471.77,1,0,0,0.11,2.5,141.98,-4,0,0,0.11,0.5,13171.52,-4,0,0,0.11,6.1,23942.43,-1,0,0,0.11,3.2,15509.00,0,0,0,0.11,0.4,8904.03,2,0,0,0.11,4.9,14392.08,-1,0,0,0.10,2.5,25195.62,0,0,0,0.10,3.5,6821.04,-2,0,0,0.10,4.4,7149.63,2,0,0,0.10,1.3,-17214.70,-5,-72,0,0.10,1.9,15576.51,-1,0,0,0.09,2.9,46628.26,-2,0,0,0.09,6.2,8504.48,-2,0,0,0.08,3.4,-2438.81,-3,0,0,0.08,1.2,8786.15,-2,0,0,0.08,3.6,7230.98,2,0,0,0.07,0.3,8315.57,-2,0,0,0.07,4.5,29342.58,-5,0,0,0.07,2.2,31642.82,1,0,0,0.06,5.8,8329.40,2,0,0,0.06,2.0,8327.98,2,0,0,0.06,0.1,8346.72,0,0,0,0.06,4.9,36.05,-4,0,0,0.06,2.6,6063.39,-2,0,0,0.06,4.3,-766.86,2,0,0,0.06,3.0,8322.13,0,0,0,0.06,0.4,25057.06,3,0,0,0.06,0.3,8288.88,2,0,0,0.06,2.4,41643.46,8,0,0,0.06,1.3,8368.51,2,0,0,0.06,1.8,39900.53,4,0,0,0.06,1.9,13590.27,0,0,0,0.06,0.5,14954.26,-1,0,0,0.06,6.2,8294.91,2,0,0,0.06,4.6,-8362.47,-1,0,0,0.06,2.9,8170.96,2,0,0,0.06,0,7632.82,2,0,0,0.05,0.8,7180.31,-2,0,0,0.05,4.6,6028.45,-4,0,0,0.05,4.6,15385.02,-1,0,0,0.05,0.6,37671.27,-3,0,0,0.05,5.0,8486.43,2,0,0,0.05,4.6,17913.99,3,0,0,0.05,1.6,837.85,-4,0,0,0.05,5.8,7542.65,2,0,0,0.05,2.1,9114.73,2,0,0,0.05,2.2,7056.33,-2,0,0,0.05,4.9,7214.06,-2,0,0,0.05,5.4,-1671.94,-6,0,0,0.05,4.9,-26100.70,-8,0,0,0.05,1.6,-9024.57,-1,0,0,0.05,1.2,7161.09,-2,0,0,0.05,5.8,30943.53,2,0,0,0.05,2.4,22199.50,-5,0,0,0.05,3.2,14992.00,-1,0,0,0.04,4.1,48857.52,5,0,0,0.04,4.4,6625.57,-2,0,0,0.04,6.1,7789.40,-2,0,0,0.04,0.1,16693.43,-1,0,0,0.04,4.5,15020.38,-1,0,0,0.04,4.3,5471.13,-6,0,0,0.04,4.3,575.34,0,0,0,0.04,5.4,7267.03,-2,0,0,0.04,3.8,16328.80,-1,0,0,0.04,2.7,-17424.25,-1,0,0,0.04,3.6,15489.79,-1,0,0,0.04,2.6,16655.08,5,0,0,0.04,4.2,8351.23,-2,0,0,0.04,0.7,-6443.79,-2,0,0,0.04,2.1,16118.09,-1,0,0,0.04,5.9,7247.82,-2,0,0,0.04,4.6,7285.05,-4,0,0,0.04,2.6,9179.17,-2,0,0,0.04,1.4,393.02,0,0,0,0.04,4.9,8381.66,2,0,0,0.04,5.1,23452.69,-3,0,0,0.04,5.1,9027.98,0,0,0,0.04,5.0,7740.20,2,0,0,0.04,3.7,16659.68,2,0,0,0.04,2.9,8275.72,2,0,0,0.04,4.3,40042.50,0,0,0,0.04,1.9,8326.06,2,0,0,0.04,5.9,8331.32,2,0,0,0.04,1.3,15595.72,-1,0,0,0.03,1.4,7777.94,2,0,0,0.03,0.8,6663.31,-2,0,0,0.03,0.5,64.43,-4,0,0,0.03,2.1,6691.69,-2,0,0,0.03,1.9,-8467.25,1,0,0,0.03,2.8,7806.32,2,0,0,0.03,4.7,9479.37,2,0,0,0.03,1.4,418.75,4,0,0),
//MR1
new Array(0.514,4.157,14914.4523,-0.6,6,0,0.382,1.801,6585.7609,-2.2,-19,0,0.327,2.399,7700.3895,1.5,25,0,0.264,5.454,8956.9934,1.5,25,0,0.123,3.10,628.302,0,0,0,0.078,0.93,16171.056,-1,6,0,0.061,4.86,7842.365,-2,0,0,0.050,4.20,14286.150,-1,0,0,0.042,5.16,8399.679,0,0,0,0.032,0.23,23243.144,1,0,0,0.025,2.59,-1742.931,-4,0,0,0.025,1.84,5957.459,-2,0,0,0.018,4.8,16029.081,3,50,0,0.014,1.5,17285.685,3,50,0,0.014,1.0,15542.75,-1,0,0,0.013,5.0,8326.39,3,50,0,0.012,4.8,8470.67,-2,0,0,0.012,2.8,8330.99,0,0,0,0.011,2.4,7072.09,2,0,0,0.010,5.9,22128.52,-3,0,0,0.007,3.3,24499.75,1,0,0,0.006,4.9,7214.06,-2,0,0,0.006,5.4,9585.30,1,0,0,0.005,3.1,1256.60,0,0,0,0.005,2.5,8328.34,2,0,0,0.005,5.4,8329.04,2,0,0,0.005,3.6,13799.82,-4,0,0,0.004,2.0,30457.21,-1,0,0,0.004,0.5,15540.45,1,0,0,0.004,4.6,15545.06,-2,0,0,0.003,0.3,22614.84,1,0,0,0.003,4.2,13657.85,-1,0,0),
//MR2
new Array(0.0015,4.16,14914.452,-1,0,0,0.0011,1.8,6585.761,-2,0,0,0.0009,2.4,7700.389,2,0,0,0.0008,5.5,8956.99,1,0,0)
),

//=====================

//星历函数(日月球面坐标计算)
E_coord:function(t,re,n1,n2,n3){ //返回地球坐标,t为世纪数
  t/=10;
  re[0]= XL0_calc( 0,0, t, n1);
  re[1]= XL0_calc( 0,1, t, n2);
  re[2]= XL0_calc( 0,2, t, n3);
},

E_Lon:function(t,n){ return XL0_calc(0,0, t/10,n); }, //地球经度计算,返回Date分点黄经,传入世纪数、取项数

Mnn:function(ob,t,n){ //计算ML0或ML1或ML2
  var i,j,F,N,v=0,tn=1,c;
  var t2=t*t,t3=t2*t,t4=t3*t,t5=t4*t,tx=t-10;
  if(ob==this.ML){
    v += (3.81034409 + 8399.684730072*t -3.319e-05*t2 + 3.11e-08*t3 - 2.033e-10*t4)*rad; //月球平黄经(弧度)
    v += 5028.792262*t + 1.1124406*t2 + 0.00007699*t3 - 0.000023479*t4 -0.0000000178*t5;  //岁差(角秒)
    if(tx>0) v += -0.866 +1.43*tx +0.054*tx*tx; //对公元3000年至公元5000年的拟合,最大误差小于10角秒
  }
  t2/=1e4,t3/=1e8,t4/=1e8;
  n*=6; if(n<0) n = ob[0].length;
  for(i=0;i<ob.length;i++,tn*=t){
   F=ob[i];
   N = int2( n*F.length/ob[0].length+0.5 );  if(i) N+=6;  if(N >= F.length) N=F.length;
   for(j=0,c=0;j<N;j+=6) c+=F[j]*Math.cos(F[j+1] +t*F[j+2] +t2*F[j+3] +t3*F[j+4] +t4*F[j+5]);
   v += c*tn;
  }
  if(ob!=this.MR) v/=rad;
  return v;
},
M_coord:function(t,re,n1,n2,n3){ //返回月球坐标,n1,n2,n3为各坐标所取的项数
  re[0] = this.Mnn( this.ML, t, n1 );
  re[1] = this.Mnn( this.MB, t, n2 );
  re[2] = this.Mnn( this.MR, t, n3 );
},
M_Lon:function(t,n){ return this.Mnn(this.ML,t,n); }, //月球经度计算,返回Date分点黄经,传入世纪数,n是项数比例

//=========================
E_v:function(t){ //地球速度,t是世纪数,误差小于万分3
 var f=628.307585*t;
 return 628.332 +21 *Math.sin(1.527+f) +0.44 *Math.sin(1.48+f*2) 
         +0.129*Math.sin(5.82+f)*t +0.00055*Math.sin(4.21+f)*t*t;
},
M_v:function(t){ //月球速度计算,传入世经数
  var v = 8399.71 - 914*Math.sin( 0.7848 + 8328.691425*t + 0.0001523*t*t ); //误差小于5%
  v-=179*Math.sin( 2.543  +15542.7543*t )  //误差小于0.3%
    +160*Math.sin( 0.1874 + 7214.0629*t )
    +62 *Math.sin( 3.14   +16657.3828*t )
    +34 *Math.sin( 4.827  +16866.9323*t )
    +22 *Math.sin( 4.9    +23871.4457*t )
    +12 *Math.sin( 2.59   +14914.4523*t )
    +7  *Math.sin( 0.23   + 6585.7609*t )
    +5  *Math.sin( 0.9    +25195.624 *t )
    +5  *Math.sin( 2.32   - 7700.3895*t )
    +5  *Math.sin( 3.88   + 8956.9934*t )
    +5  *Math.sin( 0.49   + 7771.3771*t );
   return v;
},

//=========================
MS_aLon:function(t,Mn,Sn){ //月日视黄经的差值
  return this.M_Lon(t,Mn) + ZB.gxc_moonLon(t) - ( this.E_Lon(t,Sn) + ZB.gxc_sunLon(t) + Math.PI );
},
S_aLon:function(t,n){  //太阳视黄经
 return this.E_Lon(t,n) + ZB.nutationLon(t) + ZB.gxc_sunLon(t) + Math.PI; //注意，这里的章动计算很耗时
},

//=========================

E_Lon_t:function(W){ //已知地球真黄经求时间
  var t,v= 628.3319653318;
  t  = ( W - 1.75347          )/v; v=this.E_v(t);   //v的精度0.03%，详见原文
  t += ( W - this.E_Lon(t,10) )/v; v=this.E_v(t);   //再算一次v有助于提高精度,不算也可以
  t += ( W - this.E_Lon(t,-1) )/v;
  return t;
},
M_Lon_t:function(W){ //已知真月球黄经求时间
  var t,v= 8399.70911033384;
  t  = ( W - 3.81034          )/v;
  t += ( W - this.M_Lon(t,3 ) )/v; v=this.M_v(t);  //v的精度0.5%，详见原文
  t += ( W - this.M_Lon(t,20) )/v;
  t += ( W - this.M_Lon(t,-1) )/v;
  return t;
},
MS_aLon_t:function(W){ //已知月日视黄经差求时间
  var t,v= 7771.37714500204;
  t  = ( W + 1.08472               )/v;
  t += ( W - this.MS_aLon(t, 3, 3) )/v; v=this.M_v(t)-this.E_v(t);  //v的精度0.5%，详见原文
  t += ( W - this.MS_aLon(t,20,10) )/v;
  t += ( W - this.MS_aLon(t,-1,60) )/v;
  return t;
},
S_aLon_t:function(W){ //已知太阳视黄经反求时间
  var t,v= 628.3319653318;
  t  = ( W - 1.75347-Math.PI   )/v; v=this.E_v(t); //v的精度0.03%，详见原文
  t += ( W - this.S_aLon(t,10) )/v; v=this.E_v(t); //再算一次v有助于提高精度,不算也可以
  t += ( W - this.S_aLon(t,-1) )/v;
  return t;
},
/****
MS_aLon_t1:function(W){ //已知月日视黄经差求时间,高速低精度,误差不超过40秒
  var t,v = 7771.37714500204;
  t  = ( W + 1.08472               )/v;
  t += ( W - this.MS_aLon(t, 3, 3) )/v;  v=this.M_v(t)-this.E_v(t);  //v的精度0.5%，详见原文
  t += ( W - this.MS_aLon(t,50,20) )/v;
  return t;
},
S_aLon_t1:function(W){ //已知太阳视黄经反求时间,高速低精度,最大误差不超过50秒,平均误差15秒
  var t,v= 628.3319653318;
  t  = ( W - 1.75347-Math.PI   )/v; v = 628.332 + 21*Math.sin( 1.527+628.307585*t );
  t += ( W - this.S_aLon(t,3) )/v;
  t += ( W - this.S_aLon(t,40))/v;
  return t;
},
****/
MS_aLon_t2:function(W){ //已知月日视黄经差求时间,高速低精度,误差不超过600秒(只验算了几千年)
  var t,v = 7771.37714500204;
  t  = ( W + 1.08472 )/v;
  var L,t2 = t*t;
  t -= ( -0.00003309*t2 + 0.10976*Math.cos( 0.784758 + 8328.6914246*t + 0.000152292*t2 ) + 0.02224 *Math.cos( 0.18740  + 7214.0628654*t - 0.00021848 *t2 ) - 0.03342 *Math.cos( 4.669257 + 628.307585*t ) )/v;
  L = this.M_Lon(t,20) - (4.8950632+ 628.3319653318*t + 0.000005297*t*t + 0.0334166*Math.cos(4.669257+628.307585*t) + 0.0002061*Math.cos(2.67823+628.307585*t)*t + 0.000349*Math.cos(4.6261+1256.61517*t) - 20.5/rad);
  v = 7771.38 - 914*Math.sin( 0.7848 + 8328.691425*t + 0.0001523*t*t ) - 179*Math.sin( 2.543 + 15542.7543*t ) - 160*Math.sin( 0.1874 + 7214.0629*t );
  t += ( W - L )/v;
  return t;
},
S_aLon_t2:function(W){ //已知太阳视黄经反求时间,高速低精度,最大误差不超过600秒
  var t,L,v= 628.3319653318;
  t =  ( W - 1.75347-Math.PI )/v;
  t -= ( 0.000005297*t*t + 0.0334166 * Math.cos( 4.669257 + 628.307585*t) + 0.0002061 * Math.cos( 2.67823  + 628.307585*t)*t )/v;
  t += ( W - this.E_Lon(t,8) - Math.PI + (20.5+17.2*Math.sin(2.1824-33.75705*t))/rad )/v;
  return t;
},
moonIll:function(t){ //月亮被照亮部分的比例
 var t2 = t*t, t3 =t2*t, t4 = t3*t;
 var D,M,m,a, dm=Math.PI/180;
 D = 297.8502042 + 445267.1115168*t - 0.0016300*t2 + t3/545868 - t4/113065000; //日月距角
 M = 357.5291092 +  35999.0502909*t - 0.0001536*t2 + t3/24490000;              //太阳平近点
 m = 134.9634114 + 477198.8676313*t + 0.0089970*t2 + t3/69699 - t4/14712000;   //月亮平近点
 D*=dm, M*=dm, m*=dm;
 a = Math.PI - D + (-6.289*Math.sin(m) +2.100*Math.sin(M) -1.274*Math.sin(D*2-m) -0.658*Math.sin(D*2) -0.214*Math.sin(m*2) -0.110*Math.sin(D))*dm;
 return (1+Math.cos(a))/2;
},
moonRad:function(r,h){ //转入地平纬度及地月质心距离,返回站心视半径(角秒)
 return 358473400/r*(1+Math.sin(h)*cs_rEar/r);
},
shiCha:function(t){ //时差计算(高精度)
  var t2=t*t,t3=t2*t,t4=t3*t,t5=t4*t;
  var L = ( 1753470142 + 628331965331.8*t + 5296.74*t2 + 0.432*t3 - 0.1124*t4 - 0.00009*t5 )/1000000000 + Math.PI -20.5/rad;

  var E,dE,dL,f,z=new Array();
  dL= -17.2*Math.sin(2.1824-33.75705*t)/rad; //黄经章
  dE=   9.2*Math.cos(2.1824-33.75705*t)/rad; //交角章
  E = ZB.hcjj(t)+dE; //真黄赤交角

  //地球坐标
  z[0]=this.E_Lon(t,50)+Math.PI+ZB.gxc_sunLon(t)+dL;
  z[1]=-( 2796*Math.cos(3.1987+8433.46616*t) +1016*Math.cos(5.4225+550.75532*t) +804*Math.cos(3.88  +522.3694*t) )/1000000000;

  ZB.llrConv( z, E ); //z太阳地心赤道坐标
  z[0]-=dL*Math.cos(E);

  L = rad2mrad(L-z[0]);
  if(L>Math.PI) L-=pi2;
  return L/pi2; //单位是周(天)
},
shiCha2:function(t){ //时差计算(低精度),误差约在1秒以内
  var L = ( 1753470142 + 628331965331.8*t + 5296.74*t*t )/1000000000 + Math.PI;
  var z=new Array();
  var E= (84381.4088 -46.836051*t)/rad;
  z[0]=this.E_Lon(t,5)+Math.PI, z[1]=0; //地球坐标
  ZB.llrConv( z, E ); //z太阳地心赤道坐标
  L = rad2mrad(L-z[0]);
  if(L>Math.PI) L-=pi2;
  return L/pi2; //单位是周(天)
}

};





//=========日月升降物件=============

var SZJ={//日月的升中天降,不考虑气温和气压的影响
 L  : 0,  //站点地理经度,向东测量为负
 fa : 0,  //站点地理纬度
 dt : 0,  //TD-UT
 E  : 0.409092614, //黄赤交角
 getH:function(h,w){ //h地平纬度,w赤纬,返回时角
  var c = ( Math.sin(h) - Math.sin(this.fa)*Math.sin(w) ) / Math.cos(this.fa)/Math.cos(w);
  if(Math.abs(c)>1) return Math.PI;
  return Math.acos(c);
 },

 Mcoord:function(jd,H0,z){ //章动同时影响恒星时和天体坐标,所以不计算章动。返回时角及赤经纬
   XL.M_coord( (jd+this.dt)/36525, z, 30,20,8 ); //低精度月亮赤经纬
   ZB.llrConv( z, this.E ); //转为赤道坐标
   z.H = rad2mrad(ZB.gst(jd,this.dt) - this.L - z[0]);   if( z.H>Math.PI ) z.H -= pi2; //得到此刻天体时角
   if(H0) z.H0 = this.getH( 0.7275*cs_rEar/z[2]-34*60/rad, z[1] ); //升起对应的时角
 },
 Mt : function(jd){ //月亮到中升降时刻计算,传入jd含义与St()函数相同
  this.dt = JD.deltatT2(jd);
  this.E  = ZB.hcjj(jd/36525);
  jd -= mod2(0.1726222 + 0.966136808032357*jd - 0.0366*this.dt - this.L/pi2, 1); //查找最靠近当日中午的月上中天,mod2的第1参数为本地时角近似值

  var r = new Array(), sv = pi2*0.966;
  r.z = r.s = r.j = r.c = r.h = jd;
  this.Mcoord(jd,1,r); //月亮坐标
  r.s += (-r.H0 - r.H )/sv;
  r.j += ( r.H0 - r.H )/sv;
  r.z += (    0 - r.H )/sv;
  this.Mcoord(r.s,1,r);  r.s += ( -r.H0 - r.H )/sv;
  this.Mcoord(r.j,1,r);  r.j += ( +r.H0 - r.H )/sv;
  this.Mcoord(r.z,0,r);  r.z += (     0 - r.H )/sv;
  return r;
 },

 Scoord:function(jd,H0,H1,z){ //章动同时影响恒星时和天体坐标,所以不计算章动。返回时角及赤经纬
   z[0] = XL.E_Lon( (jd+this.dt)/36525, 5 ) + Math.PI - 20.5/rad;  //太阳坐标(修正了光行差)
   z[1] = 0; z[2]=1;
   ZB.llrConv( z, this.E ); //转为赤道坐标
   z.H = rad2rrad(ZB.gst(jd,this.dt) - this.L - z[0]); //得到此刻天体时角
   if(H0) z.H0 = this.getH(-50*60/rad,z[1]);  //地平以下50分
   if(H1) z.H1 = this.getH(-Math.PI/30,z[1]); //地平以下6度
 },
 St : function(jd){ //太阳到中升降时刻计算,传入jd是当地中午12点时间对应的2000年首起算的格林尼治时间UT
  this.dt = JD.deltatT2(jd);
  this.E  = ZB.hcjj(jd/36525);
  jd -= mod2(jd - this.L/pi2, 1); //查找最靠近当日中午的日上中天,mod2的第1参数为本地时角近似值

  var r = new Array(), sv = pi2;
  r.z = r.s = r.j = r.c = r.h = jd;
  this.Scoord(jd,1,1,r); //太阳坐标
  r.s += (-r.H0 - r.H )/sv; //升起
  r.j += ( r.H0 - r.H )/sv; //降落
  r.c += (-r.H1 - r.H )/sv; //民用晨
  r.h += ( r.H1 - r.H )/sv; //民用昏
  r.z += (    0 - r.H )/sv; //中天
  this.Scoord(r.s,1,0,r);  r.s += ( -r.H0 - r.H )/sv;
  this.Scoord(r.j,1,0,r);  r.j += ( +r.H0 - r.H )/sv;
  this.Scoord(r.c,0,1,r);  r.c += ( -r.H1 - r.H )/sv;
  this.Scoord(r.h,0,1,r);  r.h += ( +r.H1 - r.H )/sv;
  this.Scoord(r.z,0,0,r);  r.z += (     0 - r.H )/sv;
  return r;
 },

 rts:new Array(),//多天的升中降
 calcRTS:function(jd,n,Jdl,Wdl,sq){ //多天升中降计算,jd是当地起始略日(中午时刻),sq是时区
  var i,c,r;
  if(!this.rts.length) { for(var i=0;i<31;i++) this.rts[i] = new Array(); }
  this.L = Jdl, this.fa = Wdl, sq/=24; //设置站点参数
  for(i=0;i<n;i++){ r=this.rts[i];  r.Ms=r.Mz=r.Mj=""; }
  for(i=-1;i<=n;i++){
   if(i>=0&&i<n){ //太阳
    r = SZJ.St(jd+i+sq);
    this.rts[i].s = JD.timeStr(r.s-sq); //升
    this.rts[i].z = JD.timeStr(r.z-sq); //中
    this.rts[i].j = JD.timeStr(r.j-sq); //降
    this.rts[i].c = JD.timeStr(r.c-sq); //晨
    this.rts[i].h = JD.timeStr(r.h-sq); //昏
    this.rts[i].ch = JD.timeStr(r.h-r.c-0.5); //光照时间,timeStr()内部+0.5,所以这里补上-0.5
    this.rts[i].sj = JD.timeStr(r.j-r.s-0.5); //昼长
   }
   r = SZJ.Mt(jd+i+sq); //月亮
   c=int2(r.s-sq+0.5)-jd;  if(c>=0&&c<n) this.rts[c].Ms = JD.timeStr(r.s-sq);
   c=int2(r.z-sq+0.5)-jd;  if(c>=0&&c<n) this.rts[c].Mz = JD.timeStr(r.z-sq);
   c=int2(r.j-sq+0.5)-jd;  if(c>=0&&c<n) this.rts[c].Mj = JD.timeStr(r.j-sq);
  }
  this.rts.dn = n;
 }
};


function xingX0(xt,T,z){ //xt星体,T儒略千年数,TD
 z[0]=XL0_calc(xt,0, T,-1);
 z[1]=XL0_calc(xt,1, T,-1);
 z[2]=XL0_calc(xt,2, T,-1);
}
function xingX(xt,jd,L,fa){ //行星计算,jd力学时
 //基本参数计算

 var T=jd/36525;
 ZB.nutation(T);
 var dL = ZB.dL, dE = ZB.dE; //章动
 var E = ZB.hcjj(T) + dE; //真黄赤交角
 var gstPing = ZB.gst2(jd); //平恒星时
 var gst= gstPing + dL*Math.cos(E); //真恒星时(不考虑非多项式部分)
 T/=10;

 var z=new Array(),a=new Array(),i,j,s='';
 xingX0(0, T,a); //地球
 xingX0(xt,T,z); //行星
 z[0]=rad2mrad(z[0]);
 s += '黄经一 ' +rad2str(z[0],1) +' 黄纬一 ' +rad2str(z[1],0) +' 向径一 ' +z[2].toFixed(8)+'\r\n';

 //地心黄道
 ZB.llr2xyz(a[0],a[1],a[2],a); //地球
 ZB.llr2xyz(z[0],z[1],z[2],z); //行星
 z[0]-=a[0]; z[1]-=a[1]; z[2]-=a[2];
 ZB.xyz2llr(z[0],z[1],z[2],z);

 //光行时
 var rb = z[2];
 T -= rb*cs_AU/cs_GS/86400/365250;

 //重算坐标
 xingX0(0, T,a);
 xingX0(xt,T,z);
 ZB.llr2xyz(a[0],a[1],a[2],a); //地球
 ZB.llr2xyz(z[0],z[1],z[2],z); //行星
 z[0]-=a[0]; z[1]-=a[1]; z[2]-=a[2];


 ZB.xyz2llr(z[0],z[1],z[2],z);
 z[0]+=dL; //补章动
 z[0]=rad2mrad(z[0]);


 s += '视黄经 ' +rad2str(z[0],1) +' 视黄纬 ' +rad2str(z[1],0) +' 地心距 ' +rb.toFixed(8)+'\r\n';
 ZB.llrConv(z,E); //转到赤道坐标
 s += '视赤经 ' +rad2str(z[0],1) +' 视赤纬 ' +rad2str(z[1],0) +' 地心距 ' +rb.toFixed(8)+'\r\n';

 var sj = rad2rrad(gst - L - z[0]); //得到天体时角
 ZB.parallax(z, sj,fa, 0); //视差修正
 s += '站赤经 ' +rad2str(z[0],1) +' 站赤纬 ' +rad2str(z[1],0) +' 视距离 ' +z[2].toFixed(8)+'\r\n';

 z[0] += Math.PI/2-gst+L;  //修正了视差的赤道坐标
 ZB.llrConv( z, Math.PI/2-fa ); //转到时角坐标转到地平坐标
 z[0] = rad2mrad( Math.PI/2-z[0] );

 if(z[1]>0) z[1] += ZB.AR2(z[1]); //大气折射修正
 s += '方位角 ' +rad2str(z[0],0) +' 高度角 ' +rad2str(z[1],0)+'\r\n';
 s += '恒星时 ' +rad2str(rad2mrad(gstPing),1) +'(平) ' +rad2str(rad2mrad(gst),1)+'(真)\r\n';


 return s;
}


//========太阳月亮计算类=============

function sun_moon(){
 this.calc=function(T,L,fa,high){ //sun_moon类的成员函数。参数：T是力学时,站点经纬L,fa,海拔high(千米)
  //基本参数计算
  this.T=T, this.L=L, this.fa=fa;
  this.dt = JD.deltatT2(T); //TD-UT
  this.jd = T - this.dt;    //UT
  T/=36525; ZB.nutation(T);
  this.dL = ZB.dL;   //黄经章
  this.dE = ZB.dE;   //交角章动
  this.E  = ZB.hcjj(T) + this.dE; //真黄赤交角
  this.gst= ZB.gst(this.jd,this.dt) + this.dL*Math.cos(this.E); //真恒星时(不考虑非多项式部分)
  var z=new Array();

  //=======月亮========
  //月亮黄道坐标
  XL.M_coord(T,z,-1,-1,-1); //月球坐标
  z[0]  = rad2mrad( z[0]+ZB.gxc_moonLon(T)+this.dL );  z[1] += ZB.gxc_moonLat(T);  //补上月球光行差及章动
  this.mHJ = z[0]; this.mHW = z[1]; this.mR  = z[2]; //月球视黄经,视黄纬,地月质心距

  //月球赤道坐标
  ZB.llrConv( z, this.E ); //转为赤道坐标
  this.mCJ = z[0]; this.mCW = z[1]; //月球视赤经,月球赤纬

  //月亮时角计算
  this.mShiJ = rad2mrad(this.gst - L - z[0]); //得到此刻天体时角
  if( this.mShiJ>Math.PI ) this.mShiJ -= pi2;

  //修正了视差的赤道坐标
  ZB.parallax(z, this.mShiJ,fa, high); //视差修正
  this.mCJ2 = z[0], this.mCW2 = z[1], this.mR2=z[2];

  //月亮时角坐标
  z[0] += Math.PI/2-this.gst+L;  //转到相对于地平赤道分点的赤道坐标(时角坐标)

  //月亮地平坐标
  ZB.llrConv (z, Math.PI/2-fa );    //转到地平坐标(只改经纬度)
  z[0] = rad2mrad( Math.PI/2-z[0] );
  this.mDJ = z[0]; this.mDW = z[1]; //方位角,高度角
  if(z[1]>0) z[1] += ZB.AR2(z[1]); //大气折射修正
  this.mPJ = z[0]; this.mPW = z[1]; //方位角,高度角

  //=======太阳========
  //太阳黄道坐标
  XL.E_coord(T,z,-1,-1,-1);   //地球坐标
  z[0]  = rad2mrad(z[0]+Math.PI+ZB.gxc_sunLon(T)+this.dL);  //补上太阳光行差及章动
  z[1]  =-z[1] + ZB.gxc_sunLat(T); //z数组为太阳地心黄道视坐标
  this.sHJ = z[0]; this.sHW = z[1]; this.sR  = z[2]; //太阳视黄经,视黄纬,日地质心距

  //太阳赤道坐标
  ZB.llrConv( z, this.E ); //转为赤道坐标
  this.sCJ = z[0]; this.sCW = z[1]; //太阳视赤经,视赤纬

  //太阳时角计算
  this.sShiJ = rad2mrad(this.gst - L - z[0]); //得到此刻天体时角
  if( this.sShiJ>Math.PI ) this.sShiJ -= pi2;

  //修正了视差的赤道坐标
  ZB.parallax(z,this.sShiJ,fa,high); //视差修正
  this.sCJ2=z[0], this.sCW2=z[1], this.sR2=z[2];

  //太阳时角坐标
  z[0] += Math.PI/2-this.gst+L;  //转到相对于地平赤道分点的赤道坐标

  //太阳地平坐标
  ZB.llrConv( z, Math.PI/2-fa );
  z[0] = rad2mrad( Math.PI/2-z[0] );
  //z[1] -= 8.794/rad/z[2]*Math.cos(z[1]); //直接在地平坐标中视差修正(这里把地球看为球形,精度比ZB.parallax()稍差一些)
  this.sDJ = z[0]; this.sDW = z[1]; //方位角,高度角

  if(z[1]>0) z[1] += ZB.AR2(z[1]); //大气折射修正
  this.sPJ = z[0]; this.sPW = z[1]; //方位角,高度角

  //=======其它========
  //时差计算
  t=T/10; var t2=t*t,t3=t2*t,t4=t3*t,t5=t4*t;
  var Lon = ( 1753470142 + 6283319653318*t + 529674*t2 + 432*t3 - 1124*t4 - 9*t5 )/1000000000 + Math.PI - 20.5/rad; //修正了光行差的太阳平黄经
  Lon = rad2mrad( Lon - (this.sCJ-this.dL*Math.cos(this.E)) ); //(修正了光行差的平黄经)-(不含dL*cos(E)的视赤经)
  if(Lon>Math.PI) Lon-=pi2; //得到时差,单位是弧度
  this.sc  = Lon/pi2;   //时差(单位:日)

  //真太阳与平太阳
  this.pty = this.jd-L/pi2;  //平太阳时
  this.zty = this.jd-L/pi2+this.sc; //真太阳时

  //视半径
  //this.mRad = XL.moonRad(this.mR,this.mDW);  //月亮视半径(角秒)
  this.mRad = 358473400/this.mR2; //月亮视半径(角秒)
  this.sRad = 959.63/this.sR2; //太阳视半径(角秒)
  this.e_mRad = 358473400/this.mR; //月亮地心视半径(角秒)
  this.eShadow = (cs_rEarA/this.mR*rad-(959.63-8.794)/this.sR )*51/50; //地本影在月球向径处的半径(角秒),式中51/50是大气厚度补偿
  this.eShadow2= (cs_rEarA/this.mR*rad+(959.63+8.794)/this.sR )*51/50; //地半影在月球向径处的半径(角秒),式中51/50是大气厚度补偿
  this.mIll = XL.moonIll(T); //月亮被照面比例

  //中心食计算
  if( Math.abs(rad2rrad(this.mCJ-this.sCJ))<50/180*Math.PI ){
   ZB.line_earth( this.mCJ,this.mCW,this.mR, this.sCJ,this.sCW,this.sR*cs_AU );
   this.zx_J = rad2rrad(this.gst-ZB.le_J);
   this.zx_W = ZB.le_W; //无解返回值是100
  } else this.zx_J=this.zx_W=100;
 };
 this.toHTML=function(fs){
  var s = '<table width="100%" cellspacing=1 cellpadding=0 bgcolor="#FFC0C0">';

  s += '<tr><td bgcolor=white align=center>';
  s += '平太阳 ' + JD.timeStr(msc.pty) + ' 真太阳 <font color=red>' + JD.timeStr(msc.zty) + '</font><br>';
  s += '时差 ' + m2fm(msc.sc*86400,2,1) + " 月亮被照亮 " + (msc.mIll*100).toFixed(2)+'% ';
  s += '</td></tr>';

  s += '<tr><td bgcolor=white><center><pre style="margin-top: 0; margin-bottom: 0"><font color=blue><b>表一       月亮            太阳</b></font>\r\n';
  s += '视黄经 ' + rad2str(msc.mHJ,0) +'  '+ rad2str(msc.sHJ,0) + '\r\n';
  s += '视黄纬 ' + rad2str(msc.mHW,0) +'  '+ rad2str(msc.sHW,0) + '\r\n';
  s += '视赤经 ' + rad2str(msc.mCJ,1) +'  '+ rad2str(msc.sCJ,1) + '\r\n';
  s += '视赤纬 ' + rad2str(msc.mCW,0) +'  '+ rad2str(msc.sCW,0) + '\r\n';
  s += '距离     ' + msc.mR.toFixed(2)  +'千米     '+ msc.sR.toFixed(8)+'AU'+'\r\n';
  s += '</pre></center></td></tr>';

  s += '<tr><td bgcolor=white><center><pre style="margin-top: 0; margin-bottom: 0"><font color=blue><b>表二       月亮            太阳</b></font>\r\n';
  s += '方位角 ' + rad2str(msc.mPJ,0) +'  '+ rad2str(msc.sPJ,0) + '\r\n';
  s += '高度角 ' + rad2str(msc.mPW,0) +'  '+ rad2str(msc.sPW,0) + '\r\n';
  s += '时角   ' + rad2str(msc.mShiJ,0)+'  '+rad2str(msc.sShiJ,0)+'\r\n';
  s += '视半径(观测点) ' + m2fm(msc.mRad,2,0) +'     '+ m2fm(msc.sRad,2,0)+'\r\n';
  s += '</pre></center></td></tr>';

  if(fs){
   s += '<tr><td bgcolor=white align=center>';
   s += '力学时 ' +JD.setFromJD_str(msc.T+J2000);
   s += ' ΔT=' + (msc.dt*86400).toFixed(1) +'秒<br>';
   s += '黄经章 '+(msc.dL/pi2*360*3600).toFixed(2) +'" ';
   s += '交角章 '+(msc.dE/pi2*360*3600).toFixed(2) +'" ';
   s += 'ε='+trim(rad2str(msc.E,0));
   s += '</td></tr>';
  }
  s += '</table>';
  return s;
 };
}


//====================================
var ysPL={ //月食快速计算器
 lineT:function(G, v,u, r, n){//已知t1时刻星体位置、速度，求x*x+y*y=r*r时,t的值
  var b=G.y*v-G.x*u, A=u*u+v*v, B=u*b, C=b*b-r*r*v*v, D=B*B-A*C;
  if(D<0) return 0;
  D=Math.sqrt(D); if(!n) D=-D;
  return G.t+((-B+D)/A-G.x)/v;
 },
 lecXY:function(jd,re){//日月黄经纬差转为日面中心直角坐标(用于月食)
  var T=jd/36525, zm=new Array(), zs=new Array();

  //=======太阳月亮黄道坐标========
  XL.E_coord(T,zs,-1,-1,-1);   //地球坐标
  zs[0]  = rad2mrad(zs[0]+Math.PI+ZB.gxc_sunLon(T));  zs[1]  =-zs[1] + ZB.gxc_sunLat(T); //补上太阳光行差
  XL.M_coord(T,zm,-1,-1,-1); //月球坐标
  zm[0]  = rad2mrad( zm[0]+ZB.gxc_moonLon(T) );  zm[1] += ZB.gxc_moonLat(T);  //补上月球光行差就可以了

  //=======视半径=======
  re.e_mRad = 358473400/zm[2]; //月亮地心视半径(角秒)
  re.eShadow = (cs_rEarA/zm[2]*rad-(959.63-8.794)/zs[2] )*51/50; //地本影在月球向径处的半径(角秒),式中51/50是大气厚度补偿
  re.eShadow2= (cs_rEarA/zm[2]*rad+(959.63+8.794)/zs[2] )*51/50; //地半影在月球向径处的半径(角秒),式中51/50是大气厚度补偿

  re.x = rad2rrad(zm[0]+Math.PI-zs[0]) * Math.cos((zm[1]-zs[1])/2);
  re.y = zm[1]+zs[1];
  re.mr= re.e_mRad/rad,  re.er=re.eShadow/rad, re.Er=re.eShadow2/rad;
  re.t = jd;
 },
 lecMax:function(jd){ //月食的食甚计算(jd为近朔的力学时,误差几天不要紧)
  this.lT=new Array();
  for(var i=0;i<7;i++) this.lT[i]=0; //分别是:食甚,初亏,复圆,半影食始,半影食终,食既,生光
  this.sf=0;
  this.LX='';

  jd = XL.MS_aLon_t2( Math.floor((jd-4)/29.5306)*Math.PI*2 +Math.PI)*36525; //低精度的朔(误差10分钟),与食甚相差10分钟左右

  var g=new Object(), G=new Object(), u,v;

  //求极值(平均误差数秒)
  u = -18461 * Math.sin(0.057109+0.23089571958*jd)*0.23090/rad; //月日黄纬速度差
  v = (XL.M_v(jd/36525)-XL.E_v(jd/36525))/36525; //月日黄经速度差
  this.lecXY(jd,G);
  jd -= (G.y*u+G.x*v)/(u*u+v*v); //极值时间

  //精密求极值
  var dt=60/86400;
  this.lecXY(jd,G); this.lecXY(jd+dt,g); //精密差分得速度,再求食甚
  u = (g.y-G.y)/dt;
  v = (g.x-G.x)/dt;
  dt= -(G.y*u+G.x*v)/(u*u+v*v); jd += dt; //极值时间

  //求直线到影子中心的最小值
  var x=G.x+dt*v, y=G.y+dt*u, rmin=Math.sqrt(x*x+y*y);
  //注意,以上计算得到了极值及最小距rmin,但没有再次计算极值时刻的半径,对以下的判断造成一定的风险,必要的话可以再算一次。不过必要性不很大，因为第一次极值计算已经很准确了,误差只有几秒
  //求月球与影子的位置关系
  if(rmin<=G.mr+G.er){ //食计算
   this.lT[0] = jd; //食甚
   this.LX = '偏';
   this.sf=(G.mr+G.er-rmin)/G.mr/2; //食分

   this.lT[1] = this.lineT(G,v,u, G.mr+G.er, 0); //初亏
   this.lecXY(this.lT[1],g);
   this.lT[1] = this.lineT(g,v,u, g.mr+g.er, 0); //初亏再算一次

   this.lT[2] = this.lineT(G,v,u, G.mr+G.er, 1); //复圆
   this.lecXY(this.lT[2],g);
   this.lT[2] = this.lineT(g,v,u, g.mr+g.er, 1); //复圆再算一次
  }
  if(rmin<=G.mr+G.Er){ //半影食计算
   this.lT[3] = this.lineT(G,v,u, G.mr+G.Er, 0); //半影食始
   this.lecXY(this.lT[3],g);
   this.lT[3] = this.lineT(g,v,u, g.mr+g.Er, 0); //半影食始再算一次

   this.lT[4] = this.lineT(G,v,u, G.mr+G.Er, 1); //半影食终
   this.lecXY(this.lT[4],g);
   this.lT[4] = this.lineT(g,v,u, g.mr+g.Er, 1); //半影食终再算一次
  }
  if(rmin<=G.er-G.mr){ //全食计算
   this.LX = '全';
   this.lT[5] = this.lineT(G,v,u, G.er-G.mr, 0); //食既
   this.lecXY(this.lT[5],g);
   this.lT[5] = this.lineT(g,v,u, g.er-g.mr, 0); //食既再算一次

   this.lT[6] = this.lineT(G,v,u, G.er-G.mr, 1); //生光
   this.lecXY(this.lT[6],g);
   this.lT[6] = this.lineT(g,v,u, g.er-g.mr, 1); //生光再算一次
  }
 }
};

//====================================

var rsPL={ //日食批量快速计算器
 nasa_r:0, //为1表示采用NASA的视径比
 Zs:new Array(), Zm:new Array(), Zjd:0, Zdt:1/24, Zn:5,  //日月赤道坐标插值表
 sT:new Array(), //地方日食时间表
 MScoord_init:function(jd) { //准备根数表
  var kn1=Math.floor((jd+8)/29.5306);
  var kn2=Math.floor((this.Zjd+8)/29.5306);
  if(this.Zjd && kn1==kn2) return;

  this.Zjd = jd = XL.MS_aLon_t2( Math.floor((jd+8)/29.5306)*Math.PI*2 )*36525; //低精度的朔(误差10分钟),与食甚的误差1到2小时

  this.Zs.length=0, this.Zm.length=0;
  var i,z=new Array();
  var E,T, a=this.Zs, b=this.Zm;
  for(i=-this.Zn;i<=this.Zn;i++){ //插值点范围不要超过360度(约1个月)
   T=(this.Zjd+i*this.Zdt)/36525;
   ZB.nutation(T);
   E = ZB.hcjj(T) + ZB.dE; //真黄赤交角

   XL.E_coord(T,z,-1,-1,-1);   //地球坐标
   z[0] = rad2mrad(z[0]+Math.PI+ZB.gxc_sunLon(T)+ZB.dL);  z[1] = -z[1] + ZB.gxc_sunLat(T); //补上太阳光行差及章动
   ZB.llrConv( z, E ); //转为赤道坐标
   a[a.length]=z[0], a[a.length]=z[1], a[a.length]=z[2]; //太阳视经,月球赤纬

   XL.M_coord(T,z,-1,-1,-1); //月球坐标
   z[0] = rad2mrad( z[0]+ZB.gxc_moonLon(T)+ZB.dL );  z[1] += ZB.gxc_moonLat(T);  //补上月球光行差及章动
   ZB.llrConv( z, E ); //转为赤道坐标
   b[b.length]=z[0], b[b.length]=z[1], b[b.length]=z[2];
  }
 },
 MScoord:function(jd,z,xt){//日月坐标快速计算(贝赛尔插值法)，xt='sun'时计算太阳
  var i,B, t,p,n;
  if(xt=='sun') B=this.Zs; else B=this.Zm; //日月选择
  t=(jd-this.Zjd)/this.Zdt; //相对于总中心的距离
  p=Math.floor(t+0.5), n=t-p, p=3*(p+this.Zn); //p插值中心,n为插值因子,p再转为插值中心在数据中的位置
  if(p<=0 || p>=B.length) return 'err';
  for(i=0; i<3; i++,p++)
   z[i] = B[p] + ( B[p+3]-B[p-3] + (B[p+3]+B[p-3]-B[p]*2)*n ) * n/2;
  z[0]=rad2mrad(z[0]);
  return 'ok';
 },
 secXY:function(jd,L,fa,high,re){ //日月xy坐标计算。参数：jd是力学时,站点经纬L,fa,海拔high(千米)
  //基本参数计算
  var deltat = JD.deltatT2(jd); //TD-UT
  ZB.nutation(jd/36525);
  var gst= ZB.gst(jd-deltat,deltat) + ZB.dL*Math.cos(ZB.hcjj(jd/36525) + ZB.dE); //真恒星时(不考虑非多项式部分)

  var z=new Array();
  //=======月亮========
  this.MScoord(jd,z,'moon'); re.mCJ=z[0]; re.mCW=z[1]; re.mR=z[2]; //月亮视赤经,月球赤纬
  var mShiJ = rad2rrad(gst - L - z[0]); //得到此刻月亮时角
  ZB.parallax(z, mShiJ,fa, high); re.mCJ2=z[0], re.mCW2=z[1], re.mR2=z[2]; //修正了视差的赤道坐标

  //=======太阳========
  this.MScoord(jd,z,'sun'); re.sCJ=z[0]; re.sCW=z[1]; re.sR=z[2]; //太阳视赤经,月球赤纬
  var sShiJ = rad2rrad(gst - L - z[0]); //得到此刻太阳时角
  ZB.parallax(z,sShiJ,fa,high); re.sCJ2=z[0], re.sCW2=z[1], re.sR2=z[2]; //修正了视差的赤道坐标

  //=======视半径========
  re.mr = 358473400/re.mR2/rad;
  re.sr = 959.63/re.sR2/rad;
  if(this.nasa_r) re.mr*=0.99925;
  //=======日月赤经纬差转为日面中心直角坐标(用于日食)==============
  re.x = rad2rrad(re.mCJ2-re.sCJ2) * Math.cos((re.mCW2+re.sCW2)/2);
  re.y = re.mCW2-re.sCW2;
  re.t = jd;
 },
 lineT:function(G, v,u, r, n){//已知t1时刻星体位置、速度，求x*x+y*y=r*r时,t的值
  var b=G.y*v-G.x*u, A=u*u+v*v, B=u*b, C=b*b-r*r*v*v, D=B*B-A*C;
  if(D<0) return 0;
  D=Math.sqrt(D); if(!n) D=-D;
  return G.t+((-B+D)/A-G.x)/v;
 },
 secMax:function(jd,L,fa,high){ //日食的食甚计算(jd为近朔的力学时,误差几天不要紧)
  var i;
  for(i=0;i<5;i++) this.sT[i]=0; //分别是:食甚,初亏,复圆,食既,生光
  this.LX=''; //类型
  this.sf=0;  //食分
  this.b1=1;  //月日半径比(食甚时刻)
  this.dur = 0; //持续时间

  this.MScoord_init(jd);
  jd=this.Zjd; //食甚初始估值为插值表中心时刻(粗朔)

  var G=new Object(), g=new Object();
  this.secXY(jd,L,fa,high,G);
  jd -= G.x/0.2128; //与食甚的误差在20分钟以内

  var i,u,v,dt=60/86400,dt2;
  for(i=0;i<2;i++){
   if( this.secXY(jd,L,fa,high,G)   =='err') return;
   if( this.secXY(jd+dt,L,fa,high,g)=='err') return;
   u = (g.y-G.y)/dt;
   v = (g.x-G.x)/dt;
   dt2 = -(G.y*u+G.x*v)/(u*u+v*v);
   jd += dt2; //极值时间
  }

  //求直线到太阳中心的最小值
  var x=G.x+dt2*v, y=G.y+dt2*u, rmin=Math.sqrt(x*x+y*y);

  if(rmin<=G.mr+G.sr){ //食计算
   this.sT[1] = jd; //食甚
   this.LX='偏';
   this.sf=(G.mr+G.sr-rmin)/G.sr/2; //食分
   this.b1=G.mr/G.sr;

   this.sT[0] = this.lineT(G,v,u, G.mr+G.sr, 0); //初亏
   for(i=0;i<2;i++) { //初亏再算2次
    this.secXY(this.sT[0],L,fa,high,g);
    this.sT[0] = this.lineT(g,v,u, g.mr+g.sr, 0);
   }
   this.sT[2] = this.lineT(G,v,u, G.mr+G.sr, 1); //复圆
   for(i=0;i<2;i++) { //复圆再算2次
    this.secXY(this.sT[2],L,fa,high,g);
    this.sT[2] = this.lineT(g,v,u, g.mr+g.sr, 1);
   }
  }
  if(rmin<=G.mr-G.sr){ //全食计算
   this.LX='全';
   this.sT[3] = this.lineT(G,v,u, G.mr-G.sr, 0); //食既
   this.secXY(this.sT[3],L,fa,high,g);
   this.sT[3] = this.lineT(g,v,u, g.mr-g.sr, 0); //食既再算1次

   this.sT[4] = this.lineT(G,v,u, G.mr-G.sr, 1); //生光
   this.secXY(this.sT[4],L,fa,high,g);
   this.sT[4] = this.lineT(g,v,u, g.mr-g.sr, 1); //生光再算1次
   this.dur = this.sT[4]-this.sT[3];
  }
  if(rmin<=G.sr-G.mr){ //环食计算
   this.LX='环';
   this.sT[3] = this.lineT(G,v,u, G.sr-G.mr, 0); //食既
   this.secXY(this.sT[3],L,fa,high,g);
   this.sT[3] = this.lineT(g,v,u, g.sr-g.mr, 0); //食既再算1次

   this.sT[4] = this.lineT(G,v,u, G.sr-G.mr, 1); //生光
   this.secXY(this.sT[4],L,fa,high,g);
   this.sT[4] = this.lineT(g,v,u, g.sr-g.mr, 1); //生光再算1次
   this.dur = this.sT[4]-this.sT[3];
  }
 },

 //以下涉及南北界计算
 A:new Array(), B:new Array(), //本半影锥顶点坐标
 P : {S:new Array(), M:new Array(), g:0},//t1时刻的日月坐标,g为恒星时
 Q : {S:new Array(), M:new Array(), g:0},//t2时刻的日月坐标
 V : new Array(), //食界表
 Vc: '', Vb: '', //食中心类型,本影南北距离

 zb0:function(jd){
  //基本参数计算
  var deltat = JD.deltatT2(jd); //TD-UT
  var E=ZB.hcjj(jd/36525);
  ZB.nutation(jd/36525);

  this.P.g = ZB.gst(jd-deltat, deltat) + ZB.dL*Math.cos(E+ZB.dE); //真恒星时(不考虑非多项式部分)
  this.MScoord(jd,this.P.S, 'sun');
  this.MScoord(jd,this.P.M, 'moon');

  var t2=jd+60/86400;
  this.Q.g = ZB.gst(t2-deltat,deltat) + ZB.dL*Math.cos(E+ZB.dE);
  this.MScoord(t2,this.Q.S, 'sun');
  this.MScoord(t2,this.Q.M, 'moon');

  //转为直角坐标
  var z1=new Array(), z2=new Array();
  ZB.llr2xyz(this.P.S[0],this.P.S[1],this.P.S[2]*cs_AU, z1);
  ZB.llr2xyz(this.P.M[0],this.P.M[1],this.P.M[2], z2);

  var k=959.63/358473400*cs_AU, x,y,z; //k为日月半径比
  //本影锥顶点坐标计算
  x = (z1[0]-z2[0])/(1-k)+z2[0];
  y = (z1[1]-z2[1])/(1-k)+z2[1];
  z = (z1[2]-z2[2])/(1-k)+z2[2];
  ZB.xyz2llr(x,y,z,this.A);
  //半影锥顶点坐标计算
  x = (z1[0]-z2[0])/(1+k)+z2[0];
  y = (z1[1]-z2[1])/(1+k)+z2[1];
  z = (z1[2]-z2[2])/(1+k)+z2[2];
  ZB.xyz2llr(x,y,z,this.B);
 },

 zbXY:function(p,L,fa){
  var s=new Array(p.S[0],p.S[1],p.S[2]);
  var m=new Array(p.M[0],p.M[1],p.M[2]);
  ZB.parallax(s, p.g-L-p.S[0],fa, 0); //修正了视差的赤道坐标
  ZB.parallax(m, p.g-L-p.M[0],fa, 0); //修正了视差的赤道坐标
  //=======视半径========
  p.mr = 358473400/m[2]/rad;
  p.sr = 959.63/s[2]/rad;
  //=======日月赤经纬差转为日面中心直角坐标(用于日食)==============
  p.x = rad2rrad(m[0]-s[0]) * Math.cos((m[1]+s[1])/2);
  p.y = m[1]-s[1];
 },
 p2p:function(L,fa,re,fAB,f){ //f取+-1
  var p=this.P, q=this.Q;
  this.zbXY(this.P,L,fa);
  this.zbXY(this.Q,L,fa);

  var u=q.y-p.y, v=q.x-p.x, a=Math.sqrt(u*u+v*v),r=959.63/p.S[2]/rad;

  var W=p.S[1]+f*r*v/a, J=p.S[0]-f*r*u/a/Math.cos((W+p.S[1])/2), R=p.S[2]*cs_AU;

  var A = fAB ? this.A : this.B;

  ZB.line_earth( J,W,R, A[0],A[1],A[2] );
  re.J = rad2rrad(p.g-ZB.le_J);
  re.W = ZB.le_W;
 },
 pp0:function(re){ //食中心点计算
  var p=this.P;
  ZB.line_earth( p.M[0],p.M[1],p.M[2], p.S[0],p.S[1],p.S[2]*cs_AU );
  re.J = rad2rrad(p.g-ZB.le_J);
  re.W = ZB.le_W; //无解返回值是100
  
  if(re.W==100) { re.c = ''; return; }
  re.c='全';
  this.zbXY(p,re.J,re.W);
  if(p.sr>p.mr) re.c='环';
 },
 nbj:function(jd){ //南北界计算
  this.MScoord_init(jd);
  var i, G=new Object(), V=this.V;
  for(i=0;i<10;i++) V[i]=100; this.Vc='',this.Vb=''; //返回初始化,纬度值为100表示无角,经度100也是无解,但在以下程序中经度会被转为-PI到+PI
  if( Math.abs(jd-this.Zjd)>this.Zdt*this.Zn ) return; //时刻值无效

  this.zb0(jd);
  this.pp0(G); V[0]=G.J, V[1]=G.W, this.Vc=G.c; //食中心

  G.J=G.W=0; for(i=0;i<2;i++) this.p2p(G.J,G.W,G,1, 1); V[2]=G.J, V[3]=G.W; //本影北界,环食为南界(本影区之内,变差u,v基本不变,所以计算两次足够)
  G.J=G.W=0; for(i=0;i<2;i++) this.p2p(G.J,G.W,G,1,-1); V[4]=G.J, V[5]=G.W; //本影南界,环食为北界
  G.J=G.W=0; for(i=0;i<3;i++) this.p2p(G.J,G.W,G,0,-1); V[6]=G.J, V[7]=G.W; //半影北界
  G.J=G.W=0; for(i=0;i<3;i++) this.p2p(G.J,G.W,G,0, 1); V[8]=G.J, V[9]=G.W; //半影南界

  if(V[3]!=100&&V[5]!=100){ //粗算本影南北距离
    var x=(V[2]-V[4])*Math.cos((V[3]+V[5])/2), y=V[3]-V[5];
    this.Vb = (cs_rEarA*Math.sqrt(x*x+y*y)).toFixed(0)+'千米';
  }
  //Cal_zdzb.innerHTML=(V[8]*180/Math.PI).toFixed(5)+' '+(V[9]*180/Math.PI).toFixed(5);
 }
};

