?? lunar.js
字號(hào):
public中定義的成員可以直接使用
*************************/
var SSQ={ //實(shí)朔實(shí)氣計(jì)算器
//private成員定義
SB:'', //朔修正表
QB:'', //氣修正表
suoKB : new Array( //朔直線擬合參數(shù)
1457698.231017,29.53067166, // -721-12-17 h=0.00032 古歷·春秋
1546082.512234,29.53085106, // -479-12-11 h=0.00053 古歷·戰(zhàn)國(guó)
1640640.735300,29.53060000, // -221-10-31 h=0.01010 古歷·秦漢
1642472.151543,29.53085439, // -216-11-04 h=0.00040 古歷·秦漢
1683430.509300,29.53086148, // -104-12-25 h=0.00313 漢書(shū)·律歷志(太初歷)平氣平朔
1752148.041079,29.53085097, // 85-02-13 h=0.00049 后漢書(shū)·律歷志(四分歷)
1807665.420323,29.53059851, // 237-02-12 h=0.00033 晉書(shū)·律歷志(景初歷)
1883618.114100,29.53060000, // 445-01-24 h=0.00030 宋書(shū)·律歷志(何承天元嘉歷)
1907360.704700,29.53060000, // 510-01-26 h=0.00030 宋書(shū)·律歷志(祖沖之大明歷)
1936596.224900,29.53060000, // 590-02-10 h=0.01010 隨書(shū)·律歷志(開(kāi)皇歷)
1939135.675300,29.53060000, // 597-01-24 h=0.00890 隨書(shū)·律歷志(大業(yè)歷)
1947168.00// 619-01-21
),
qiKB : new Array( //氣直線擬合參數(shù)
1640650.479938,15.21842500, // -221-11-09 h=0.01709 古歷·秦漢
1642476.703182,15.21874996, // -216-11-09 h=0.01557 古歷·秦漢
1683430.515601,15.218750011, // -104-12-25 h=0.01560 漢書(shū)·律歷志(太初歷)平氣平朔 回歸年=365.25000
1752157.640664,15.218749978, // 85-02-23 h=0.01559 后漢書(shū)·律歷志(四分歷) 回歸年=365.25000
1807675.003759,15.218620279, // 237-02-22 h=0.00010 晉書(shū)·律歷志(景初歷) 回歸年=365.24689
1883627.765182,15.218612292, // 445-02-03 h=0.00026 宋書(shū)·律歷志(何承天元嘉歷) 回歸年=365.24670
1907369.128100,15.218449176, // 510-02-03 h=0.00027 宋書(shū)·律歷志(祖沖之大明歷) 回歸年=365.24278
1936603.140413,15.218425000, // 590-02-17 h=0.00149 隨書(shū)·律歷志(開(kāi)皇歷) 回歸年=365.24220
1939145.524180,15.218466998, // 597-02-03 h=0.00121 隨書(shū)·律歷志(大業(yè)歷) 回歸年=365.24321
1947180.798300,15.218524844, // 619-02-03 h=0.00052 新唐書(shū)·歷志(戊寅元?dú)v)平氣定朔 回歸年=365.24460
1964362.041824,15.218533526, // 666-02-17 h=0.00059 新唐書(shū)·歷志(麟德歷) 回歸年=365.24480
1987372.340971,15.218513908, // 729-02-16 h=0.00096 新唐書(shū)·歷志(大衍歷,至德歷) 回歸年=365.24433
1999653.819126,15.218530782, // 762-10-03 h=0.00093 新唐書(shū)·歷志(五紀(jì)歷) 回歸年=365.24474
2007445.469786,15.218535181, // 784-02-01 h=0.00059 新唐書(shū)·歷志(正元?dú)v,觀象歷) 回歸年=365.24484
2021324.917146,15.218526248, // 822-02-01 h=0.00022 新唐書(shū)·歷志(宣明歷) 回歸年=365.24463
2047257.232342,15.218519654, // 893-01-31 h=0.00015 新唐書(shū)·歷志(崇玄歷) 回歸年=365.24447
2070282.898213,15.218425000, // 956-02-16 h=0.00149 舊五代·歷志(欽天歷) 回歸年=365.24220
2073204.872850,15.218515221, // 964-02-16 h=0.00166 宋史·律歷志(應(yīng)天歷) 回歸年=365.24437
2080144.500926,15.218530782, // 983-02-16 h=0.00093 宋史·律歷志(乾元?dú)v) 回歸年=365.24474
2086703.688963,15.218523776, // 1001-01-31 h=0.00067 宋史·律歷志(儀天歷,崇天歷) 回歸年=365.24457
2110033.182763,15.218425000, // 1064-12-15 h=0.00669 宋史·律歷志(明天歷) 回歸年=365.24220
2111190.300888,15.218425000, // 1068-02-15 h=0.00149 宋史·律歷志(崇天歷) 回歸年=365.24220
2113731.271005,15.218515671, // 1075-01-30 h=0.00038 李銳補(bǔ)修(奉元?dú)v) 回歸年=365.24438
2120670.840263,15.218425000, // 1094-01-30 h=0.00149 宋史·律歷志 回歸年=365.24220
2123973.309063,15.218425000, // 1103-02-14 h=0.00669 李銳補(bǔ)修(占天歷) 回歸年=365.24220
2125068.997336,15.218477932, // 1106-02-14 h=0.00056 宋史·律歷志(紀(jì)元?dú)v) 回歸年=365.24347
2136026.312633,15.218472436, // 1136-02-14 h=0.00088 宋史·律歷志(統(tǒng)元?dú)v,乾道歷,淳熙歷) 回歸年=365.24334
2156099.495538,15.218425000, // 1191-01-29 h=0.00149 宋史·律歷志(會(huì)元?dú)v) 回歸年=365.24220
2159021.324663,15.218425000, // 1199-01-29 h=0.00149 宋史·律歷志(統(tǒng)天歷) 回歸年=365.24220
2162308.575254,15.218461742, // 1208-01-30 h=0.00146 宋史·律歷志(開(kāi)禧歷) 回歸年=365.24308
2178485.706538,15.218425000, // 1252-05-15 h=0.04606 淳祐歷 回歸年=365.24220
2178759.662849,15.218445786, // 1253-02-13 h=0.00231 會(huì)天歷 回歸年=365.24270
2185334.020800,15.218425000, // 1271-02-13 h=0.00520 宋史·律歷志(成天歷) 回歸年=365.24220
2187525.481425,15.218425000, // 1277-02-12 h=0.00520 本天歷 回歸年=365.24220
2188621.191481,15.218437484, // 1280-02-13 h=0.00013 元史·歷志(郭守敬授時(shí)歷) 回歸年=365.24250
2321919.49// 1645-02-04
),
so_low:function(W){ //低精度定朔計(jì)算,在2000年至600,誤差在2小時(shí)以內(nèi)(仍比古代日歷精準(zhǔn)很多)
var v = 7771.37714500204;
var t = ( W + 1.08472 )/v, L;
t -= ( -0.0000331*t*t
+ 0.10976 *Math.cos( 0.785 + 8328.6914*t)
+ 0.02224 *Math.cos( 0.187 + 7214.0629*t)
- 0.03342 *Math.cos( 4.669 + 628.3076*t ) )/v
+ (32*(t+1.8)*(t+1.8)-20)/86400/36525;
return t*36525 + 8/24;
},
qi_low:function(W){ //最大誤差小于30分鐘,平均5分
var t,L,v= 628.3319653318;
t = ( W - 4.895062166 )/v; //第一次估算,誤差2天以內(nèi)
t -= ( 53*t*t + 334116*Math.cos( 4.67+628.307585*t) + 2061*Math.cos( 2.678+628.3076*t)*t )/v/10000000; //第二次估算,誤差2小時(shí)以內(nèi)
L = 48950621.66 + 6283319653.318*t + 53*t*t //平黃經(jīng)
+334166 * Math.cos( 4.669257+ 628.307585*t) //地球橢圓軌道級(jí)數(shù)展開(kāi)
+3489 * Math.cos( 4.6261 + 1256.61517*t ) //地球橢圓軌道級(jí)數(shù)展開(kāi)
+2060.6 * Math.cos( 2.67823 + 628.307585*t ) * t //一次泊松項(xiàng)
- 994 - 834*Math.sin(2.1824-33.75705*t); //光行差與章動(dòng)修正
t -= (L/10000000 -W )/628.332 + (32*(t+1.8)*(t+1.8)-20)/86400/36525;
return t*36525 + 8/24;
},
qi_high:function(W){ //較高精度氣
var t = XL.S_aLon_t2(W)*36525;
t = t - JD.deltatT2(t)+8/24;
var v = ( (t+0.5) %1 ) * 86400;
if(v<600 || v >86400-600) t = XL.S_aLon_t(W)*36525 - JD.deltatT2(t)+8/24;
return t;
},
so_high:function(W){ //較高精度朔
var t = XL.MS_aLon_t2(W)*36525;
t = t - JD.deltatT2(t)+8/24;
var v = ( (t+0.5) %1 ) * 86400;
if(v<600 || v >86400-600) t = XL.MS_aLon_t(W)*36525 - JD.deltatT2(t)+8/24;
return t;
},
jieya:function(s){ //氣朔解壓縮
var o="0000000000",o2=o+o;
s=s.replace(/J/g,'00');
s=s.replace(/I/g,'000');
s=s.replace(/H/g,'0000');
s=s.replace(/G/g,'00000');
s=s.replace(/t/g,'02');
s=s.replace(/s/g,'002');
s=s.replace(/r/g,'0002');
s=s.replace(/q/g,'00002');
s=s.replace(/p/g,'000002');
s=s.replace(/o/g,'0000002');
s=s.replace(/n/g,'00000002');
s=s.replace(/m/g,'000000002');
s=s.replace(/l/g,'0000000002');
s=s.replace(/k/g,'01');
s=s.replace(/j/g,'0101');
s=s.replace(/i/g,'001');
s=s.replace(/h/g,'001001');
s=s.replace(/g/g,'0001');
s=s.replace(/f/g,'00001');
s=s.replace(/e/g,'000001');
s=s.replace(/d/g,'0000001');
s=s.replace(/c/g,'00000001');
s=s.replace(/b/g,'000000001');
s=s.replace(/a/g,'0000000001');
s=s.replace(/A/g,o2+o2+o2);
s=s.replace(/B/g,o2+o2+o);
s=s.replace(/C/g,o2+o2);
s=s.replace(/D/g,o2+o);
s=s.replace(/E/g,o2);
s=s.replace(/F/g,o);
return s;
},
init:function(){ //初使用化
var suoS,qiS;
// 619-01-21開(kāi)始16598個(gè)朔日修正表 d0=1947168
suoS ="EqoFscDcrFpmEsF2DfFideFelFpFfFfFiaipqti1ksttikptikqckstekqttgkqttgkqteksttikptikq2fjstgjqttjkqttgkqt";
suoS+="ekstfkptikq2tijstgjiFkirFsAeACoFsiDaDiADc1AFbBfgdfikijFifegF1FhaikgFag1E2btaieeibggiffdeigFfqDfaiBkF";
suoS+="1kEaikhkigeidhhdiegcFfakF1ggkidbiaedksaFffckekidhhdhdikcikiakicjF1deedFhFccgicdekgiFbiaikcfi1kbFibef";
suoS+="gEgFdcFkFeFkdcfkF1kfkcickEiFkDacFiEfbiaejcFfffkhkdgkaiei1ehigikhdFikfckF1dhhdikcfgjikhfjicjicgiehdik";
suoS+="cikggcifgiejF1jkieFhegikggcikFegiegkfjebhigikggcikdgkaFkijcfkcikfkcifikiggkaeeigefkcdfcfkhkdgkegieid";
suoS+="hijcFfakhfgeidieidiegikhfkfckfcjbdehdikggikgkfkicjicjF1dbidikFiggcifgiejkiegkigcdiegfggcikdbgfgefjF1";
suoS+="kfegikggcikdgFkeeijcfkcikfkekcikdgkabhkFikaffcfkhkdgkegbiaekfkiakicjhfgqdq2fkiakgkfkhfkfcjiekgFebicg";
suoS+="gbedF1jikejbbbiakgbgkacgiejkijjgigfiakggfggcibFifjefjF1kfekdgjcibFeFkijcfkfhkfkeaieigekgbhkfikidfcje";
suoS+="aibgekgdkiffiffkiakF1jhbakgdki1dj1ikfkicjicjieeFkgdkicggkighdF1jfgkgfgbdkicggfggkidFkiekgijkeigfiski";
suoS+="ggfaidheigF1jekijcikickiggkidhhdbgcfkFikikhkigeidieFikggikhkffaffijhidhhakgdkhkijF1kiakF1kfheakgdkif";
suoS+="iggkigicjiejkieedikgdfcggkigieeiejfgkgkigbgikicggkiaideeijkefjeijikhkiggkiaidheigcikaikffikijgkiahi1";
suoS+="hhdikgjfifaakekighie1hiaikggikhkffakicjhiahaikggikhkijF1kfejfeFhidikggiffiggkigicjiekgieeigikggiffig";
suoS+="gkidheigkgfjkeigiegikifiggkidhedeijcfkFikikhkiggkidhh1ehigcikaffkhkiggkidhh1hhigikekfiFkFikcidhh1hit";
suoS+="cikggikhkfkicjicghiediaikggikhkijbjfejfeFhaikggifikiggkigiejkikgkgieeigikggiffiggkigieeigekijcijikgg";
suoS+="ifikiggkideedeijkefkfckikhkiggkidhh1ehijcikaffkhkiggkidhh1hhigikhkikFikfckcidhh1hiaikgjikhfjicjicgie";
suoS+="hdikcikggifikigiejfejkieFhegikggifikiggfghigkfjeijkhigikggifikiggkigieeijcijcikfksikifikiggkidehdeij";
suoS+="cfdckikhkiggkhghh1ehijikifffffkhsFngErD1pAfBoDd1BlEtFqA2AqoEpDqElAEsEeB2BmADlDkqBtC1FnEpDqnEmFsFsAFn";
suoS+="llBbFmDsDiCtDmAB2BmtCgpEplCpAEiBiEoFqFtEqsDcCnFtADnFlEgdkEgmEtEsCtDmADqFtAFrAtEcCqAE1BoFqC1F1DrFtBmF";
suoS+="tAC2ACnFaoCgADcADcCcFfoFtDlAFgmFqBq2bpEoAEmkqnEeCtAE1bAEqgDfFfCrgEcBrACfAAABqAAB1AAClEnFeCtCgAADqDoB";
suoS+="mtAAACbFiAAADsEtBqAB2FsDqpFqEmFsCeDtFlCeDtoEpClEqAAFrAFoCgFmFsFqEnAEcCqFeCtFtEnAEeFtAAEkFnErAABbFkAD";
suoS+="nAAeCtFeAfBoAEpFtAABtFqAApDcCGJ";
//1645-02-03開(kāi)始7582個(gè)節(jié)氣修正表
qiS ="EmcFs22AFsckF2tsDtFqEtF1posFdFgiFseFtmelpsEfhkF2anmelpFlF1ikrotcnEqEq2FfqmcDsrFor22FgFrcgDscFs22FgEe";
qiS+="FtE2sfFs22sCoEsaF2tsD1FpeE2eFsssEciFsFnmelpFcFhkF2tcnEqEpFgkrotcnEqrEtFermcDsrE222FgBmcmr22DaEfnaF22";
qiS+="2sD1FpeForeF2tssEfiFpEoeFssD1iFstEqFppDgFstcnEqEpFg11FscnEqrAoAF2ClAEsDmDtCtBaDlAFbAEpAAAAAD2FgBiBqo";
qiS+="BbnBaBoAAAAAAAEgDqAdBqAFrBaBoACdAAf1AACgAAAeBbCamDgEifAE2AABa1C1BgFdiAAACoCeE1ADiEifDaAEqAAFe1AcFbcA";
qiS+="AAAAF1iFaAAACpACmFmAAAAAAAACrDaAAADG0";
this.SB = this.jieya(suoS); //定朔修正表解壓
this.QB = this.jieya(qiS); //定氣修正表解壓
},
//public公有成員定義
calc:function(jd,qs){ //jd應(yīng)靠近所要取得的氣朔日,qs='氣'時(shí),算節(jié)氣的儒略日
jd += 2451545;
var i,D,n;
var B=this.suoKB,pc=14; if(qs=='氣') B=this.qiKB,pc=7;
var f1=B[0]-pc, f2=B[B.length-1]-pc, f3=2436935;
if( jd<f1 || jd>=f3 ){ //平氣朔表中首個(gè)之前,使用現(xiàn)代天文算法。1960.1.1以后,使用現(xiàn)代天文算法 (這一部分調(diào)用了qi_high和so_high,所以需星歷表支持)
if(qs=='氣') return Math.floor( this.qi_high ( Math.floor((jd+pc-2451259)/365.2422*24) * Math.PI/12 ) +0.5 ); //2451259是1999.3.21,太陽(yáng)視黃經(jīng)為0,春分.定氣計(jì)算
else return Math.floor( this.so_high ( Math.floor((jd+pc-2451551)/29.5306) * Math.PI*2 ) +0.5 ); //2451551是2000.1.7的那個(gè)朔日,黃經(jīng)差為0.定朔計(jì)算
}
if( jd>=f1 && jd<f2 ) { //平氣或平朔
for(i=0;i<B.length;i+=2) if(jd+pc<B[i+2]) break;
D = B[i] + B[i+1] * Math.floor( (jd+pc-B[i])/B[i+1] );
D = Math.floor(D+0.5);
if(D==1683460) D++; //如果使用太初歷計(jì)算-103年1月24日的朔日,結(jié)果得到的是23日,這里修正為24日(實(shí)歷)。修正后仍不影響-103的無(wú)中置閏。如果使用秦漢歷,得到的是24日,本行D不會(huì)被執(zhí)行。
return D-2451545;
}
if( jd>=f2 && jd<f3){ //定氣或定朔
if(qs=='氣'){
D = Math.floor( this.qi_low( Math.floor((jd+pc-2451259)/365.2422*24) * Math.PI/12 ) +0.5 ); //2451259是1999.3.21,太陽(yáng)視黃經(jīng)為0,春分.定氣計(jì)算
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -