📄 eph.js
字号:
0.24,3.3,32933.21,0,0,0,0.21,3.6,22233.29,-5,0,0,
0.21,4.4,47847.67,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),
new Array(//MB1
0.074,4.10,6480.986,0,7,0,0.030,0.9,7737.590,0,7,0,
0.022,5.0,15019.227,-3,-19,0,0.020,1.1,23347.918,-1,6,0,
0.019,1.7,-1847.705,-2,-18,0,0.017,5.6,16133.856,1,24,0,
0.016,0,9061.768,-1,0,0,0.014,3.9,733.077,-2,-26,0,
0.013,2.4,17390.460,1,25,0,0.013,5.6,8399.685,0,0,0,
0.013,0.9,-523.527,-2,-26,0,0.012,3.2,7805.164,-1,0,0,
0.011,3.7,8435.767,-2,0,0,0.011,5.9,8431.165,1,0,0)
),
MR:new Array( //精度3千米
new Array(//MR0
385000.5,0,0,0,0,0,
20905.4,5.497147,8328.6914246,1.52292,25.07,-0.1236,3699.1,4.89979,7214.062865,-2.1848,-18.9,0.083,
2956.0,0.97216,15542.754290,-0.6618,6.2,-0.041,569.9,1.5695,16657.382849,3.046,50,-0.25,
246.2,5.6858,-1114.62856,-3.708,-44,0.21,204.6,1.0153,14914.45233,-0.635,6,-0.04,
170.7,3.3277,23871.44571,0.86,31,-0.2,152.1,4.943,6585.76091,-2.16,-19,0.1,
129.6,0.743,-7700.38947,-1.55,-25,0.1,108.7,5.198,7771.37714,-0.33,3,0,
104.8,2.312,8956.99338,1.50,25,-0.1,79.7,5.383,-8538.24089,2.80,26,-0.1,
48.9,6.240,628.3020,-0.03,0,0,34.8,2.730,22756.8172,-2.85,-13,0,
30.8,4.071,16171.0562,-0.69,6,0,24.2,1.715,7842.3648,-2.21,-19,0.1,
23.2,3.925,24986.0743,4.57,75,-0.4,21.6,0.375,14428.1257,-4.37,-38,0.2,
16.7,2.014,8399.6791,-0.4,3,0,14.4,3.33,-9443.3200,-5.2,-69,0,
12.8,3.37,23243.1438,0.9,31,0,11.6,5.09,31085.5086,-1.3,12,0,
10.4,5.68,32200.1371,2.4,56,0,10.3,0.86,-1324.1780,0.6,7,0,
10.1,5.73,-1742.9305,-3.7,-44,0,9.9,1.06,14286.1504,-0.6,6,0,
8.8,4.79,-9652.8694,-0.9,-18,0,8.4,5.98,-557.3143,-1.9,-22,0,
7.0,4.67,-16029.0809,-3.1,-50,0,6.3,1.27,16100.0686,1.2,28,0,
5.8,4.67,17285.6848,3.0,50,0,5.0,4.99,5957.459,-2.1,-19,0,
4.4,4.60,-209.549,4.3,51,0,4.1,3.21,7004.513,2.1,32,0,
4.0,2.77,22128.515,-2.8,-13,0,3.3,0.67,14985.440,-2.5,-16,0,
3.1,0.11,16866.932,-1.3,0,0,2.6,0.14,24499.748,0.8,31,0,
2.4,1.67,8470.667,-2.2,-19,0,2.1,0.70,-7072.088,-1.6,-25,0,
1.9,0.42,13799.824,-4.3,-38,0,1.7,3.63,-8886.006,-3,-47,0,
1.6,5.1,30457.207,-1,12,0,1.4,1.2,39414.200,0,37,0,
1.4,6.2,23314.131,-1,9,0,1.2,2.3,9585.295,1,25,0,
1.1,6.3,33314.766,6,100,0,1.1,6.2,1256.604,0,0,0,
1.1,4.1,8364.740,-2,-19,0,0.9,4.4,16728.371,1,28,0,
0.9,4.6,6656.749,-4,-41,0,0.9,2.8,70.988,-2,-22,0,
0.8,5.7,31571.835,2,56,0,0.8,5.1,-9095.555,1,0,0,
0.8,1.0,-17772.011,-7,-94,0,0.8,2.7,15752.304,-5,-45,0,
0.7,0.3,8326.390,3,50,0,0.7,1.3,8330.993,0,0,0,
0.7,1.8,40528.829,4,81,0,0.7,3.4,22614.842,1,31,0,
0.7,0.9,-1952.480,1,7,0,0.6,6.0,8393.126,-2,-19,0,
0.6,5.0,24080.995,-3,-20,0,0.6,5.8,23385.119,-3,0,0,
0.5,4.3,6099.43,-6,-63,0,0.5,1.8,14218.58,0,0,0,
0.5,5.2,7143.08,0,0,0,0.5,3.4,-10071.62,-5,-69,0,
0.5,2.4,-17981.56,-2,0,0,0.5,4.9,-8294.93,-2,0,0,
0.5,0.2,8362.45,1,0,0,0.4,4.5,29970.88,-5,0,0,
0.4,2.3,-24357.77,-5,-75,0,0.4,1.1,13657.85,-1,0,0,
0.4,0.5,8311.77,-2,0,0,0.4,3.6,24428.76,3,53,0,
0.4,0.7,25614.38,5,75,0,0.3,5.8,-2371.23,-4,0,0,
0.3,0.9,9166.54,-3,0,0,0.3,0.4,-8257.70,-3,0,0,
0.3,4.8,-10281.17,-1,0,0,0.3,5.8,5889.88,-2,0,0,
0.3,0.6,38299.57,-4,0,0,0.3,5.6,15333.20,4,57,0,
0.3,2.8,21500.21,-3,0,0,0.3,0.7,14357.14,-2,0,0),
new Array(//MR1
0.514,4.16,14914.4523,-0.6,6,0,0.382,1.80,6585.7609,-2.2,-19,0,
0.327,2.40,7700.3895,1.5,25,0,0.264,5.45,8956.9934,1.5,25,0,
0.123,3.10,628.302,0,0,0,0.078,0.93,16171.056,-0.7,6,0,
0.061,4.86,7842.365,-2.2,-19,0,0.050,4.2,14286.150,-1,6,0,
0.042,5.2,8399.679,0,0,0,0.032,0.2,23243.144,1,31,0,
0.025,2.6,-1742.931,-4,-44,0,0.025,1.8,5957.459,-2,-19,0,
0.018,4.8,16029.081,3,50,0,0.014,1.5,17285.68,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),
new Array(//MR2
0.0015,4.2,14914.452,-1,6,0,0.0011,1.8,6585.761,-2,-19,0,
0.0009,2.4,7700.389,2,25,0,0.0008,5.5,8956.993,1,25,0)
),
//=====================
//星历函数(日月球面坐标计算)
Enn:function(ob,t,n){ //计算E_L0或E_L1或E_L2等
var i,j,F,N,v=0,tn=1,c;
if(ob==this.EL){
var t2=t*t, t3=t2*t, t4=t3*t, t5=t4*t; //千年数的各次方
v += 1753469512 + 6283319653318*t + 529674*t2 + 432*t3 - 1124*t4 - 9*t5 + 630 * Math.cos(6+3*t); //地球平黄经(已拟合DE406)
}
n*=3; 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+=3; if(N >= F.length) N=F.length;
for(j=0,c=0;j<N;j+=3) c+=F[j]*Math.cos(F[j+1] +t*F[j+2]);
v += c*tn;
}
return v/1000000000;
},
E_coord:function(t,re,n1,n2,n3){ //返回地球坐标,t为世纪数
t/=10;
re[0]= this.Enn( this.EL, t, n1);
re[1]= this.Enn( this.EB, t, n2);
re[2]= this.Enn( this.ER, t, n3);
},
E_Lon:function(t,n){ return this.Enn(this.EL,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)*6378.14/r);
},
shiCha:function(t){ //时差计算(高精度)
var t2=t*t,t3=t2*t,t4=t3*t,t5=t4*t;
var L = ( 1753469512 + 628331965331.8*t + 5296.74*t2 + 0.432*t3 - 0.1124*t4 - 0.00009*t5 + 630 * Math.cos(6+0.3*t) )/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 = ( 1753469512 + 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太阳地心赤道坐标
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -