sxcalendar/resource/index.html

7083 lines
569 KiB
HTML
Raw Normal View History

2024-03-08 11:32:52 +08:00
<html>
<head>
<title>寿星天文历5.10Plus</title>
<META content="寿星天文历;万年历;农历;农历计算;算法;天文算法;伊斯兰历;回历;节气;交节时刻" name=keywords>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<style>
td {
font-family: 宋体;
font-size: 12px;
line-height: 150%
}
.bd0 {
border: 0px
}
.bd1 {
border: 1px solid #888888
}
.bd2 {
border: 2px solid #000000
}
.dTop {
border-top: 1px solid #000000
}
.dBot {
border-bottom: 1px solid #000000
}
.dRig {
border-right: 1px solid #888888
}
.dLef {
border-left: 1px solid #888888
}
.dRB {
border-right: 1 solid #000000;
border-bottom: 1 solid #000000
}
.dRT {
border-right: 1 solid #000000;
border-top: 1 solid #000000
}
.dBot2 {
border-bottom: 1px solid #C0C0C0
}
.dTop2 {
border-top: 1px solid #C0C0C0
}
</style>
<script>
var cs_rEar = 6378.1366;
var cs_rEarA = 0.99834 * cs_rEar;
var cs_ba = 0.99664719;
var cs_ba2 = cs_ba * cs_ba;
var cs_AU = 1.49597870691e8;
var cs_sinP = cs_rEar / cs_AU;
var cs_PI = Math.asin(cs_sinP);
var cs_GS = 299792.458;
var cs_Agx = cs_AU / cs_GS / 86400 / 36525;
var cs_xxHH = new Array(116, 584, 780, 399, 378, 370, 367, 367);
/** 行星名称 */
var xxName = new Array('地球', '水星', '金星', '火星', '木星', '土星', '天王星', '海王星', '冥王星');
/** 每弧度的角秒数 */
var rad = 180 * 3600 / Math.PI;
var radd = 180 / Math.PI;
var pi2 = Math.PI * 2;
var pi_2 = Math.PI / 2;
var J2000 = 2451545;
var cs_k = 0.2725076;
var cs_k2 = 0.2722810;
var cs_k0 = 109.1222;
var cs_sMoon = cs_k * cs_rEar * 1.0000036 * rad;
var cs_sMoon2 = cs_k2 * cs_rEar * 1.0000036 * rad;
var cs_sSun = 959.64;
/** 世界时TD-原子时UT1计算表 */
var dt_at = new Array(-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, 64.7, 0.21, 0, 0, 2012, 66.8, 0.22, 0, 0, 2018, 69.0, 0.36, 0, 0, 2028, 72.6);
GJ2_machin = {
add: function(a, b, n) {
for(var i = n - 1, f = 0; i >= 0; i--) {
a[i] += b[i] + f;
if(a[i] >= 10000000000)
a[i] -= 10000000000, f = 1;
else
f = 0;
}
},
sub0: function(a, b, r, n) {
for(var i = n - 1, f = 0; i >= 0; i--) {
r[i] = a[i] - b[i] - f;
if(r[i] < 0)
r[i] += 10000000000, f = 1;
else
f = 0;
}
},
div: function(a, b, n) {
for(var i = 0, f = 0, c; i < n; i++) {
c = a[i] + f * 10000000000;
a[i] = Math.floor((c + 0.1) / b);
f = c % b;
}
},
dao: function(a, f, b, n) {
a[0] = Math.floor(f / b);
f = f % b;
for(var i = 1, c; i < n; i++) {
c = f * 10000000000;
a[i] = Math.floor((c + 0.1) / b);
f = c % b;
}
},
set: function(a, v, n) {
for(var i = 0; i < n; i++)
a[i] = 0;
a[0] = v;
a.length = n;
},
a: new Array(),
b: new Array(),
c: new Array(),
arctg: function(k, v, zf, N) {
var i = Math.round(N * 23.1 / Math.log(k * k)),
n = i,
n2;
var a = this.a,
b = this.b,
c = this.c;
for(; i >= 0; i--) {
n2 = Math.round((n - i) * N / n) + 1;
if(n2 > N)
n2 = N;
this.dao(c, v, 2 * i + 1, n2);
this.div(b, k * k, n2);
this.sub0(c, b, b, n2);
}
this.div(b, k, N);
if(zf > 0)
this.add(a, b, N);
else
this.sub0(a, b, a, N);
},
pi: function() {
var N = GJ2_N.value - 0;
N = floor(N / 10 + 1.5);
var a = this.a,
b = this.b;
this.set(a, 0, N);
this.set(b, 0, N);
this.arctg(5, 16, 1, N);
this.arctg(239, 4, -1, N);
a[0] = '<br>';
for(var i = 1; i < N; i++) {
a[i] = String(10000000000 + a[i]).substr(1, 10);
if(i % 10 == 0)
a[i] += '<br>';
else
a[i] += ' ';
}
GJ2_out.innerHTML = '基于Machin公式,并做百亿进制优化,速度较快。<br>' + '计算公式:Machin PI=16arctg(1/5)-4arctg(1/239)<br>' + '最后5位可能有错:<font color=red>PI=3.' + a.join('') + '</font>';
}
};
var storageL = {
existStorage: function() {
return window.Storage && window.localStorage && window.localStorageinstanceofStorage;
},
setItem: function(name, value, t) {
if(!this.existStorage())
this.setCookie(name, value, t);
try {
localStorage.setItem(name, value);
} catch(e) {
console.error('localStorage.setItem错误,', e.message);
}
},
getItem: function(name) {
var value;
if(!this.existStorage())
return this.getCookie(name);
try {
value = localStorage.getItem(name);
} catch(e) {
console.error('localStorage.getItem错误,', e.message)
} finally {
return value;
}
},
setCookie: function(name, value, t) {
if(typeof(Worker) !== "undefined") {
localStorage.setItem(name, value);
} else {
var Days = 700;
var exp = new Date();
exp.setTime(exp.getTime() + Days * 86400 * 1000);
document.cookie = name + "=" + escape(value) + ";expires=" + exp.toGMTString();
}
},
getCookie: function(name) {
if(typeof(Worker) !== "undefined") {
var dt = localStorage.getItem(name);
return dt;
} else {
var start,
end,
s = document.cookie;
start = s.indexOf(name + '=');
if(start == -1)
return '';
start += name.length + 1;
end = s.indexOf(';', start);
if(end == -1)
end = s.length;
return unescape(s.substring(start, end));
}
}
};
/** JulianDate儒略日 */
var JD = {
JD: function(y, m, d) {
var n = 0,
G = 0;
if(y * 372 + m * 31 + int2(d) >= 588829)
G = 1;
if(m <= 2)
m += 12, y--;
if(G)
n = int2(y / 100), n = 2 - n + int2(n / 4);
return int2(365.25 * (y + 4716)) + int2(30.6001 * (m + 1)) + d + n - 1524.5;
},
DD: function(jd) {
var r = new Object();
var D = int2(jd + 0.5),
F = jd + 0.5 - D,
c;
if(D >= 2299161)
c = int2((D - 1867216.25) / 36524.25), D += 1 + c - int2(c / 4);
D += 1524;
r.Y = int2((D - 122.1) / 365.25);
D -= int2(365.25 * r.Y);
r.M = int2(D / 30.601);
D -= int2(30.601 * r.M);
r.D = D;
if(r.M > 13)
r.M -= 13, r.Y -= 4715;
else
r.M -= 1, r.Y -= 4716;
F *= 24;
r.h = int2(F);
F -= r.h;
F *= 60;
r.m = int2(F);
F -= r.m;
F *= 60;
r.s = F;
return r;
},
DD2str: function(r) {
var Y = " " + r.Y,
M = "0" + r.M,
D = "0" + r.D;
var h = r.h,
m = r.m,
s = int2(r.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;
},
JD2str: function(jd) {
var r = this.DD(jd);
return this.DD2str(r);
},
Y: 2000,
M: 1,
D: 1,
h: 12,
m: 0,
s: 0,
toJD: function() {
return this.JD(this.Y, this.M, this.D + ((this.s / 60 + this.m) / 60 + this.h) / 24);
},
setFromJD: function(jd) {
var r = this.DD(jd);
this.Y = r.Y,
this.M = r.M,
this.D = r.D,
this.m = r.m,
this.h = r.h,
this.s = r.s;
},
timeStr: function(jd) {
var h,
m,
s;
jd += 0.5;
jd = (jd - int2(jd));
s = int2(jd * 86400 + 0.5);
h = int2(s / 3600);
s -= h * 3600;
m = int2(s / 60);
s -= m * 60;
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 + 7000000) % 7;
},
nnweek: function(y, m, n, w) {
var jd = JD.JD(y, m, 1.5);
var w0 = (jd + 1 + 7000000) % 7;
var r = jd - w0 + 7 * n + w;
if(w >= w0)
r -= 7;
if(n == 5) {
m++;
if(m > 12)
m = 1, y++;
if(r >= JD.JD(y, m, 1.5))
r -= 7;
}
return r;
}
};
var preceTab_IAU1976 = new Array(0, 5038.7784, -1.07259, -0.001147, 84381.448, 0, +0.05127, -0.007726, 0, +4.1976, +0.19447, -0.000179, 0, -46.8150, +0.05059, +0.000344, 84381.448, -46.8150, -0.00059, +0.001813, 0, +10.5526, -2.38064, -0.001125, 0, 47.0028, -0.03301, +0.000057, 629554.886, -869.8192, +0.03666, -0.001504, 0, 5029.0966, +1.11113, +0.000006, 0, 2004.3109, -0.42665, -0.041833, 0, 2306.2181, +0.30188, +0.017998, 0, 2306.2181, +1.09468, +0.018203);
var preceTab_IAU2000 = new Array(0, 5038.478750, -1.07259, -0.001147, 0, 0, 84381.448, -0.025240, +0.05127, -0.007726, 0, 0, 0, +4.1976, +0.19447, -0.000179, 0, 0, 0, -46.8150, +0.05059, +0.000344, 0, 0, 84381.448, -46.84024, -0.00059, +0.001813, 0, 0, 0, +10.5526, -2.38064, -0.001125, 0, 0, 0, 47.0028, -0.03301, +0.000057, 0, 0, 629554.886, -869.8192, +0.03666, -0.001504, 0, 0, 0, 5028.79695, +1.11113, +0.000006, 0, 0, 0, 2004.1917476, -0.4269353, -0.0418251, -0.0000601, -0.0000001, +2.5976176, 2306.0809506, +0.3019015, +0.0179663, -0.0000327, -0.0000002, -2.5976176, 2306.0803226, +1.0947790, +0.0182273, +0.0000470, -0.0000003);
var preceTab_P03 = new Array(0, 5038.481507, -1.0790069, -0.00114045, +0.000132851, -9.51e-8, 84381.406000, -0.025754, +0.0512623, -0.00772503, -4.67e-7, +3.337e-7, 0, 4.199094, +0.1939873, -0.00022466, -9.12e-7, +1.20e-8, 0, -46.811015, +0.0510283, +0.00052413, -6.46e-7, -1.72e-8, 84381.406000, -46.836769, -0.0001831, +0.00200340, -5.76e-7, -4.34e-8, 0, 10.556403, -2.3814292, -0.00121197, +0.000170663, -5.60e-8, 0, 46.998973, -0.0334926, -0.00012559, +1.13e-7, -2.2e-9, 629546.7936, -867.95758, +0.157992, -0.0005371, -0.00004797, +7.2e-8, 0, 5028.796195, +1.1054348, +0.00007964, -0.000023857, +3.83e-8, 0, 2004.191903, -0.4294934, -0.04182264, -7.089e-6, -1.274e-7, 2.650545, 2306.083227, +0.2988499, +0.01801828, -5.971e-6, -3.173e-7, -2.650545, 2306.077181, +1.0927348, +0.01826837, -0.000028596, -2.904e-7);
var nuTab = new Array(0, 0, 0, 0, 1, -172064161, -174666, 33386, 92052331, 9086, 15377, 0, 0, 2, -2, 2, -13170906, -1675, -13696, 5730336, -3015, -4587, 0, 0, 2, 0, 2, -2276413, -234, 2796, 978459, -485, 1374, 0, 0, 0, 0, 2, 2074554, 207, -698, -897492, 470, -291, 0, 1, 0, 0, 0, 1475877, -3633, 11817, 73871, -184, -1924, 0, 1, 2, -2, 2, -516821, 1226, -524, 224386, -677, -174, 1, 0, 0, 0, 0, 711159, 73, -872, -6750, 0, 358, 0, 0, 2, 0, 1, -387298, -367, 380, 200728, 18, 318, 1, 0, 2, 0, 2, -301461, -36, 816, 129025, -63, 367, 0, -1, 2, -2, 2, 215829, -494, 111, -95929, 299, 132, 0, 0, 2, -2, 1, 128227, 137, 181, -68982, -9, 39, -1, 0, 2, 0, 2, 123457, 11, 19, -53311, 32, -4, -1, 0, 0, 2, 0, 156994, 10, -168, -1235, 0, 82, 1, 0, 0, 0, 1, 63110, 63, 27, -33228, 0, -9, -1, 0, 0, 0, 1, -57976, -63, -189, 31429, 0, -75, -1, 0, 2, 2, 2, -59641, -11, 149, 25543, -11, 66, 1, 0, 2, 0, 1, -51613, -42, 129, 26366, 0, 78, -2, 0, 2, 0, 1, 45893, 50, 31, -24236, -10, 20, 0, 0, 0, 2, 0, 63384, 11, -150, -1220, 0, 29, 0, 0, 2, 2, 2, -38571, -1, 158, 16452, -11, 68, 0, -2, 2, -2, 2, 32481, 0, 0, -13870, 0, 0, -2, 0, 0, 2, 0, -47722, 0, -18, 477, 0, -25, 2, 0, 2, 0, 2, -31046, -1, 131, 13238, -11, 59, 1, 0, 2, -2, 2, 28593, 0, -1, -12338, 10, -3, -1, 0, 2, 0, 1, 20441, 21, 10, -10758, 0, -3, 2, 0, 0, 0, 0, 29243, 0, -74, -609, 0, 13, 0, 0, 2, 0, 0, 25887, 0, -66, -550, 0, 11, 0, 1, 0, 0, 1, -14053, -25, 79, 8551, -2, -45, -1, 0, 0, 2, 1, 15164, 10, 11, -8001, 0, -1, 0, 2, 2, -2, 2, -15794, 72, -16, 6850, -42, -5, 0, 0, -2, 2, 0, 21783, 0, 13, -167, 0, 13, 1, 0, 0, -2, 1, -12873, -10, -37, 6953, 0, -14, 0, -1, 0, 0, 1, -12654, 11, 63, 6415, 0, 26, -1, 0, 2, 2, 1, -10204, 0, 25, 5222, 0, 15, 0, 2, 0, 0, 0, 16707, -85, -10, 168, -1, 10, 1, 0, 2, 2, 2, -7691, 0, 44, 3268, 0, 19, -2, 0, 2, 0, 0, -11024, 0, -14, 104, 0, 2, 0, 1, 2, 0, 2, 7566, -21, -11, -3250, 0, -5, 0, 0, 2, 2, 1, -6637, -11, 25, 3353, 0, 14, 0, -1, 2, 0, 2, -7141, 21, 8, 3070, 0, 4, 0, 0, 0, 2, 1, -6302, -11, 2, 3272, 0, 4, 1, 0, 2, -2, 1, 5800, 10, 2, -3045, 0, -1, 2, 0, 2, -2, 2, 6443, 0, -7, -2768, 0, -4, -2, 0, 0, 2, 1, -5774, -11, -15, 3041, 0, -5, 2, 0, 2, 0, 1, -5350, 0, 21, 2695, 0, 12, 0, -1, 2, -2, 1, -4752, -11, -3, 2719, 0, -3, 0, 0, 0, -2, 1, -4940, -11, -21, 2720, 0, -9, -1, -1, 0, 2, 0, 7350, 0, -8, -51, 0, 4, 2, 0, 0, -2, 1, 4065, 0, 6, -2206, 0, 1, 1, 0, 0, 2, 0, 6579, 0, -24, -199, 0, 2, 0, 1, 2, -2, 1, 3579, 0, 5, -1900, 0, 1, 1, -1, 0, 0, 0, 4725, 0, -6, -41, 0, 3, -2, 0, 2, 0, 2, -3075, 0, -2, 1313, 0, -1, 3, 0, 2, 0, 2, -2904, 0, 15, 1233, 0, 7, 0, -1, 0, 2, 0, 4348, 0, -10, -81, 0, 2, 1, -1, 2, 0, 2, -2878, 0, 8, 1232, 0, 4, 0, 0, 0, 1, 0, -4230, 0, 5, -20, 0, -2, -1, -1, 2, 2, 2, -2819, 0, 7, 1207, 0, 3, -1, 0, 2, 0, 0, -4056, 0, 5, 40, 0, -2, 0, -1, 2, 2, 2, -2647, 0, 11, 1129, 0, 5, -2, 0, 0, 0, 1, -2294, 0, -10, 1266, 0, -4, 1, 1, 2, 0, 2, 2481, 0, -7, -1062, 0, -3, 2, 0, 0, 0, 1, 2179, 0, -2, -1129, 0, -2, -1, 1, 0, 1, 0, 3276, 0, 1, -9, 0, 0, 1, 1, 0, 0, 0, -3389, 0, 5, 35, 0, -2, 1, 0, 2, 0, 0, 3339, 0, -13, -107, 0, 1, -1, 0, 2, -2, 1, -1987, 0, -6, 1073, 0, -2, 1, 0, 0, 0, 2, -1981, 0, 0, 854, 0, 0, -1, 0, 0, 1, 0, 4026, 0, -353, -553, 0, -139, 0, 0, 2, 1, 2, 1660, 0, -5, -710, 0, -2, -1, 0, 2, 4, 2, -1521, 0, 9, 647, 0, 4, -1, 1, 0, 1, 1, 1314, 0, 0, -700, 0, 0, 0, -2, 2, -2, 1, -1283, 0, 0, 672, 0, 0, 1, 0, 2, 2, 1, -1331, 0, 8, 663, 0, 4, -2, 0, 2, 2, 2, 1383, 0, -2, -594, 0, -2, -1, 0, 0, 0, 2, 1405, 0, 4, -610, 0, 2, 1, 1, 2, -2, 2, 1290, 0, 0, -556, 0, 0);
/** 中精度章动计算表 */
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);
/** 八行星星历数据表,及数据表的计算 */
var XL0 = new Array(new Array(10000000000, 20, 578, 920, 1100, 1124, 1136, 1148, 1217, 1226, 1229, 1229, 1229, 1229, 1937, 2363, 2618, 2633, 2660, 2666, 17534704567, 0.00000000000, 0.00000000000, 334165646, 4.669256804, 6283.075849991, 3489428, 4.6261024, 12566.1517000, 349706, 2.744118, 5753.384885, 341757, 2.828866, 3.523118, 313590, 3.627670, 77713.771468, 267622, 4.418084, 7860.419392, 234269, 6.135162, 3930.209696, 132429, 0.742464, 11506.769770, 127317, 2.037097, 529.690965, 119917, 1.109629, 1577.343542, 99025, 5.23268, 5884.92685, 90186, 2.04505, 26.29832, 85722, 3.50849, 398.14900, 77979, 1.17883, 5223.69392, 75314, 2.53339, 5507.55324, 50526, 4.58293, 18849.22755, 49238, 4.20507, 775.52261, 35666, 2.91954, 0.06731, 31709, 5.84902, 11790.62909, 28413, 1.89869, 796.29801, 27104, 0.31489, 10977.07880, 24281, 0.34481, 5486.77784, 20616, 4.80647, 2544.31442, 20539, 1.86948, 5573.14280, 20226, 2.45768, 6069.77675, 15552, 0.83306, 213.29910, 13221, 3.41118, 2942.46342, 12618, 1.08303, 20.77540, 11513, 0.64545, 0.98032, 10285, 0.63600, 4694.00295, 10190, 0.97569, 15720.83878, 10172, 4.26680, 7.11355, 9921, 6.2099, 2146.1654, 9761, 0.6810, 155.4204, 8580, 5.9832, 161000.6857, 8513, 1.2987, 6275.9623, 8471, 3.6708, 71430.6956, 7964, 1.8079, 17260.1547, 7876, 3.0370, 12036.4607, 7465, 1.7551, 5088.6288, 7387, 3.5032, 3154.6871, 7355, 4.6793, 801.8209, 6963, 0.8330, 9437.7629, 6245, 3.9776, 8827.3903, 6115, 1.8184, 7084.8968, 5696, 2.7843, 6286.5990, 5612, 4.3869, 14143.4952, 5558, 3.4701, 6279.5527, 5199, 0.1891, 12139.5535, 5161, 1.3328, 1748.0164, 5115, 0.2831, 5856.4777, 4900, 0.4874, 1194.4470, 4104, 5.3682, 8429.2413, 4094, 2.3985, 19651.0485, 3920, 6.1683, 10447.3878, 3677, 6.0413, 10213.2855, 3660, 2.5696, 1059.3819, 3595, 1.7088, 2352.8662, 3557, 1.7760, 6812.7668, 3329, 0.5931, 17789.8456, 3041, 0.4429, 83996.8473, 3005, 2.7398, 1349.8674, 2535, 3.1647, 4690.4798, 2474, 0.2148, 3.5904, 2366, 0.4847, 8031.0923, 2357, 2.0653, 3340.6124, 2282, 5.2220, 4705.7323, 2189, 5.5559, 553.5694, 2142, 1.4256, 16730.4637, 2109, 4.1483, 951.7184, 2030, 0.3713, 283.8593, 1992, 5.2221, 12168.0027, 1986, 5.7747, 6309.3742, 1912, 3.8222, 23581.2582, 1889, 5.3863, 149854.4001, 1790, 2.2149, 13367.9726, 1748, 4.5605, 135.0651, 1622, 5.9884, 11769.8537, 1508, 4.1957, 6256.7775, 1442, 4.1932, 242.7286, 1435, 3.7236, 38.0277, 1397, 4.4014, 6681.2249, 1362, 1.8893, 7632.9433, 1250, 1.1305, 5.5229, 1205, 2.6223, 955.5997, 1200, 1.0035, 632.7837, 1129, 0.1774, 4164.3120, 1083, 0.3273, 103.0928, 1052, 0.9387, 11926.2544, 1050, 5.3591, 1592.5960, 1033, 6.1998, 6438.4962, 1001, 6.0291, 5746.2713, 980, 0.999, 11371.705, 980, 5.244, 27511.468, 938, 2.624, 5760.498, 923, 0.483, 522.577, 922, 4.571, 4292.331, 905, 5.337, 6386.169, 862, 4.165, 7058.598, 841, 3.299, 7234.794, 836, 4.539, 25132.303, 813, 6.112, 4732.031, 812, 6.271, 426.598, 801, 5.821, 28.449, 787, 0.996, 5643.179, 776, 2.957, 23013.540, 769, 3.121, 7238.676, 758, 3.974, 11499.656, 735, 4.386, 316.392, 731, 0.607, 11513.883, 719, 3.998, 74.782, 706, 0.323, 263.084, 676, 5.911, 90955.552, 663, 3.665, 17298.182, 653, 5.791, 18073.705, 630, 4.717, 6836.645, 615, 1.458, 233141.314, 612, 1.075, 19804.827, 596, 3.321, 6283.009, 596, 2.876, 6283.143, 555, 2.452, 12352.853, 541, 5.392, 419.485, 531, 0.382, 31441.678, 519, 4.065, 6208.294, 513, 2.361, 10973.556, 494, 5.737, 9917.697, 450, 3.272, 11015.106, 449, 3.653, 206.186, 447, 2.064, 7079.374, 435, 4.423, 5216.580, 421, 1.906, 245.832, 413, 0.921, 3738.761, 402, 0.840, 20.355, 387, 1.826, 11856.219, 379, 2.344, 3.881, 374, 2.954, 3128.389, 370, 5.031, 536.805, 365, 1.018, 16200.773, 365, 1.083, 88860.057, 352, 5.978, 3894.182, 352, 2.056, 244287.600, 351, 3.713, 6290.189, 340, 1.106, 14712.317, 339, 0.978, 8635.942, 339, 3.202, 5120.601, 333, 0.837, 6496.375, 325, 3.479, 6133.513, 316, 5.089, 21228.392, 316, 1.328, 10873.986, 309, 3.646, 10.637, 303, 1.802, 35371.887, 296, 3.397, 9225.539, 288, 6.026, 154717.610, 281, 2.585, 14314.168, 262, 3.856, 266.607, 262, 2.579, 22483.849, 257, 1.561, 23543.231, 255, 3.949, 1990.745, 251, 3.7
var XL0Pluto = new Array(new Array(3670347369, 254266726, 33423175, 451726393, 508545104, 35472192, 84376237, 762832697, 1315590, 44486864, 210752393, 27599981, 40933408, 207755164, 6168337, 19050728, 1017104358, 3249687, 14459892, 266376252, 17851506, 9031454, 274585346, 5087385, 6554000, 522183295, 4050313, 6102463, 527798297, 31298161, 5934799, 235178975, 21074845, 4572990, 1271382113, 5137558, 3982588, 814160370, 15439300, 3716251, 480061483, 5182267, 3687493, 303024336, 20475757, 3613380, 223750052, 25529763, 3526913, 817565750, 1361514, 2830938, 488394805, 30934902, 2660160, 308916374, 9405225, 2364561, 475438751, 17615841, 2254502, 535061113, 21872888, 1899854, 749461283, 88900, 1871795, 777395028, 31727482, 1558618, 30189105, 6137438, 1509389, 713274081, 9031015, 1324105, 194208507, 25689952, 1245892, 32747384, 28566478, 1209727, 1525654203, 6787921, 1163275, 708077853, 21057150, 1155503, 290066741, 8791815, 1039711, 119669067, 30291052, 854194, 1004780056, 4601575, 852775, 317260479, 790571, 826952, 545502775, 15458302, 734703, 1029985337, 33557684, 658988, 127555821, 27753187, 629821, 465509264, 24733991, 526712, 388855124, 13859947, 513490, 788617188, 23806972, 508504, 724367273, 3730023, 495552, 5296915421, 12437857, 466082, 799663728, 17369454, 461769, 39197826, 19575585, 392423, 2031609976, 10958129, 384996, 380283753, 18479682, 383668, 15755335, 10477382, 361802, 184437224, 32250746, 355241, 556263379, 8309980, 351617, 735545369, 852436, 329998, 1779927509, 8590564, 320525, 2034205768, 32876335, 284625, 828556267, 13831416, 271807, 2132978353, 13978299, 258922, 1257847792, 4073980, 252741, 454824044, 32573229, 221397, 1285658757, 66458, 184105, 326318176, 28881856, 156462, 110312447, 125060, 152236, 50699235, 9159202, 144258, 565164798, 246535, 135974, 634999990, 14499445, 128851, 1513256735, 6034954, 118273, 152604788, 31876533, 112254, 996349240, 12857615, 102507, 631525416, 24617867, 100384, 396751429, 1597716, 99529, 144500970, 34455393, 93241, 167046390, 29320722, 92821, 1539302037, 288341, 90244, 444397678, 4194283, 79448, 622542072, 30539278, 62321, 838122416, 6698517, 57057, 694635401, 5424872, 53495, 101198791, 5512272, 53055, 1039298462, 26169865, 51675, 63505889, 645935, 49765, 1249270801, 10580653, 45188, 985724537, 13346278, 41294, 1767399707, 8039571, 39977, 574845986, 30078339, 38492, 363679436, 24514164, 36883, 346241178, 33551568, 35004, 889717498, 23166337, 33909, 1294680530, 26183309, 33066, 1793564454, 1964270, 28434, 430653466, 6519845, 27448, 1506386376, 13501678, 25318, 2288459373, 12093013, 24250, 414416901, 7290394, 23751, 881645279, 1398422, 21743, 1239314363, 13969644, 20901, 611578209, 877266, 19300, 900003205, 22097997, 19024, 643200234, 14044632, 17639, 658357828, 1548988, 15685, 1548452229, 25563089, 14703, 80132610, 34603828, 14089, 2020918264, 10712799, 12128, 594022404, 33826308, 11542, 851102446, 3450259, 11225, 10593517488, 14780703, 10677, 1306106438, 18939814, 9731, 2047579983, 1923259, 9633, 674514843, 392489, 8870, 1495409766, 17082296, 8459, 1060549232, 29015118, 8394, 4264995999, 9485590, 8192, 1143798703, 22079985, 7649, 1049816228, 21240239, 7206, 2542717740, 14387460, 6619, 975008199, 25504230, 6584, 1759143661, 14127292, 5922, 1802685061, 27335915, 5307, 867633840, 4747248, 5117, 1559452781, 18038947, 4738, 911160446, 15030317, 4703, 1228405854, 19794711, 4327, 2274341644, 8796168, 4222, 2303501344, 5833665, 3919, 967347334, 7973000, 3714, 921954285, 12027115, 3626, 1397985312, 26032090, 3383, 1132055729, 34320308, 3090, 1316562606, 8644794, 2664, 1155619373, 25354050, 2597, 2060867014, 28994646, 2399, 2135425184, 25675938, 2391, 2012255805, 16810382, 2068, 1392553808, 6294884, 2027, 2796950957, 16185633, 2011, 2199849507, 13164123, 2009, 933464235, 6446146, 1937, 1567813517, 6055882, 1845, 1076163159, 1422686, 1802, 2311193720, 30359052, 1770, 1747388447, 16357270, 1749, 1812706257, 19324361, 1717, 2489240697, 5631799, 1704, 2485988933, 18527793, 1608, 5229816866, 13052190, 1563, 1118184209, 604802, 1561, 5363993402, 29658824, 1528, 1404714801, 20736114, 1
/** 月亮行星数据 */
var XL1 = new Array(new Array(new Array(22639.586, 0.78475822, 8328.691424623, 1.5229241, 25.0719, -0.123598, 4586.438, 0.1873974, 7214.06286536, -2.184756, -18.860, 0.08280, 2369.914, 2.5429520, 15542.75428998, -0.661832, 6.212, -0.04080, 769.026, 3.140313, 16657.38284925, 3.04585, 50.144, -0.2472, 666.418, 1.527671, 628.30195521, -0.02664, 0.062, -0.0054, 411.596, 4.826607, 16866.9323150, -1.28012, -1.07, -0.0059, 211.656, 4.115028, -1114.6285593, -3.70768, -43.93, 0.2064, 205.436, 0.230523, 6585.7609101, -2.15812, -18.92, 0.0882, 191.956, 4.898507, 23871.4457146, 0.86109, 31.28, -0.164, 164.729, 2.586078, 14914.4523348, -0.6352, 6.15, -0.035, 147.321, 5.45530, -7700.3894694, -1.5496, -25.01, 0.118, 124.988, 0.48608, 7771.3771450, -0.3309, 3.11, -0.020, 109.380, 3.88323, 8956.9933798, 1.4963, 25.13, -0.129, 55.177, 5.57033, -1324.1780250, 0.6183, 7.3, -0.035, 45.100, 0.89898, 25195.623740, 0.2428, 24.0, -0.129, 39.533, 3.81213, -8538.240890, 2.8030, 26.1, -0.118, 38.430, 4.30115, 22756.817155, -2.8466, -12.6, 0.042, 36.124, 5.49587, 24986.074274, 4.5688, 75.2, -0.371, 30.773, 1.94559, 14428.125731, -4.3695, -37.7, 0.166, 28.397, 3.28586, 7842.364821, -2.2114, -18.8, 0.077, 24.358, 5.64142, 16171.056245, -0.6885, 6.3, -0.046, 18.585, 4.41371, -557.314280, -1.8538, -22.0, 0.10, 17.954, 3.58454, 8399.679100, -0.3576, 3.2, -0.03, 14.530, 4.9416, 23243.143759, 0.888, 31.2, -0.16, 14.380, 0.9709, 32200.137139, 2.384, 56.4, -0.29, 14.251, 5.7641, -2.301200, 1.523, 25.1, -0.12, 13.899, 0.3735, 31085.508580, -1.324, 12.4, -0.08, 13.194, 1.7595, -9443.319984, -5.231, -69.0, 0.33, 9.679, 3.0997, -16029.080894, -3.072, -50.1, 0.24, 9.366, 0.3016, 24080.995180, -3.465, -19.9, 0.08, 8.606, 4.1582, -1742.930514, -3.681, -44.0, 0.21, 8.453, 2.8416, 16100.068570, 1.192, 28.2, -0.14, 8.050, 2.6292, 14286.150380, -0.609, 6.1, -0.03, 7.630, 6.2388, 17285.684804, 3.019, 50.2, -0.25, 7.447, 1.4845, 1256.603910, -0.053, 0.1, -0.01, 7.371, 0.2736, 5957.458955, -2.131, -19.0, 0.09, 7.063, 5.6715, 33.757047, -0.308, -3.6, 0.02, 6.383, 4.7843, 7004.513400, 2.141, 32.4, -0.16, 5.742, 2.6572, 32409.686605, -1.942, 5, -0.05, 4.374, 4.3443, 22128.51520, -2.820, -13, 0.05, 3.998, 3.2545, 33524.31516, 1.766, 49, -0.25, 3.210, 2.2443, 14985.44001, -2.516, -16, 0.06, 2.915, 1.7138, 24499.74767, 0.834, 31, -0.17, 2.732, 1.9887, 13799.82378, -4.343, -38, 0.17, 2.568, 5.4122, -7072.08751, -1.576, -25, 0.11, 2.521, 3.2427, 8470.66678, -2.238, -19, 0.07, 2.489, 4.0719, -486.32660, -3.734, -44, 0.20, 2.146, 5.6135, -1952.47998, 0.645, 7, -0.03, 1.978, 2.7291, 39414.20000, 0.199, 37, -0.21, 1.934, 1.5682, 33314.76570, 6.092, 100, -0.5, 1.871, 0.4166, 30457.20662, -1.297, 12, -0.1, 1.753, 2.0582, -8886.00570, -3.38, -47, 0.2, 1.437, 2.386, -695.87607, 0.59, 7, 0, 1.373, 3.026, -209.54947, 4.33, 51, -0.2, 1.262, 5.940, 16728.37052, 1.17, 28, -0.1, 1.224, 6.172, 6656.74859, -4.04, -41, 0.2, 1.187, 5.873, 6099.43431, -5.89, -63, 0.3, 1.177, 1.014, 31571.83518, 2.41, 56, -0.3, 1.162, 3.840, 9585.29534, 1.47, 25, -0.1, 1.143, 5.639, 8364.73984, -2.18, -19, 0.1, 1.078, 1.229, 70.98768, -1.88, -22, 0.1, 1.059, 3.326, 40528.82856, 3.91, 81, -0.4, 0.990, 5.013, 40738.37803, -0.42, 30, -0.2, 0.948, 5.687, -17772.01141, -6.75, -94, 0.5, 0.876, 0.298, -0.35232, 0, 0, 0, 0.822, 2.994, 393.02097, 0, 0, 0, 0.788, 1.836, 8326.39022, 3.05, 50, -0.2, 0.752, 4.985, 22614.84180, 0.91, 31, -0.2, 0.740, 2.875, 8330.99262, 0, 0, 0, 0.669, 0.744, -24357.77232, -4.60, -75, 0.4, 0.644, 1.314, 8393.12577, -2.18, -19, 0.1, 0.639, 5.888, 575.33849, 0, 0, 0, 0.635, 1.116, 23385.11911, -2.87, -13, 0, 0.584, 5.197, 24428.75999, 2.71, 53, -0.3, 0.583, 3.513, -9095.55517, 0.95, 4, 0, 0.572, 6.059, 29970.88002, -5.03, -32, 0.1, 0.565, 2.960, 0.32863, 1.52, 25, -0.1, 0.561, 4.001, -17981.56087, -2.43, -43, 0.2, 0.557, 0.529, 7143.07519, -0.30, 3, 0, 0.546, 2.311, 25614.37623, 4.54, 75, -0.4, 0.536, 4.229, 15752.30376, -4.99, -45, 0.2, 0.493, 3.316, -8294.9344, -1.83, -29, 0.1, 0.491, 1.744, 8362.4485, 1.21, 21, -0.1, 0.478, 1.803, -10071.6219, -5.20, -69, 0.3, 0.454, 0.857, 15333.2048, 3.66,
/** 行星星历修正表 */
var XL0_xzb = new Array(-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);
/** 星历 */
var XL = {
E_Lon: function(t, n) {
return XL0_calc(0, 0, t, n);
},
M_Lon: function(t, n) {
return XL1_calc(0, t, n);
},
E_v: function(t) {
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);
v -= 179 * Math.sin(2.543 + 15542.7543 * t) + 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) + gxc_moonLon(t) - (this.E_Lon(t, Sn) + gxc_sunLon(t) + Math.PI);
},
S_aLon: function(t, n) {
return this.E_Lon(t, n) + nutationLon2(t) + 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);
t += (W - this.E_Lon(t, 10)) / v;
v = this.E_v(t);
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);
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);
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);
t += (W - this.S_aLon(t, 10)) / v;
v = this.E_v(t);
t += (W - this.S_aLon(t, -1)) / v;
return t;
},
MS_aLon_t2: function(W) {
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) {
var t,
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) * dm;
M = (357.5291092 + 35999.0502909 * t - 0.0001536 * t2 + t3 / 24490000) * dm;
m = (134.9634114 + 477198.8676313 * t + 0.0089970 * t2 + t3 / 69699 - t4 / 14712000) * 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 cs_sMoon / r * (1 + Math.sin(h) * cs_rEar / r);
},
moonMinR: function(t, min) {
var a = 27.55454988 / 36525,
b;
if(min)
b = -10.3302 / 36525;
else
b = 3.4471 / 36525;
t = b + a * int2((t - b) / a + 0.5);
var r1,
r2,
r3,
dt;
dt = 2 / 36525;
r1 = XL1_calc(2, t - dt, 10);
r2 = XL1_calc(2, t, 10);
r3 = XL1_calc(2, t + dt, 10);
t += (r1 - r3) / (r1 + r3 - 2 * r2) * dt / 2;
dt = 0.5 / 36525;
r1 = XL1_calc(2, t - dt, 20);
r2 = XL1_calc(2, t, 20);
r3 = XL1_calc(2, t + dt, 20);
t += (r1 - r3) / (r1 + r3 - 2 * r2) * dt / 2;
dt = 1200 / 86400 / 36525;
r1 = XL1_calc(2, t - dt, -1);
r2 = XL1_calc(2, t, -1);
r3 = XL1_calc(2, t + dt, -1);
t += (r1 - r3) / (r1 + r3 - 2 * r2) * dt / 2;
r2 += (r1 - r3) / (r1 + r3 - 2 * r2) * (r3 - r1) / 8;
var re = new Array(t, r2);
return re;
},
moonNode: function(t, asc) {
var a = 27.21222082 / 36525,
b;
if(asc)
b = 21 / 36525;
else
b = 35 / 36525;
t = b + a * int2((t - b) / a + 0.5);
var w,
v,
w2,
dt;
dt = 0.5 / 36525;
w = XL1_calc(1, t, 10);
w2 = XL1_calc(1, t + dt, 10);
v = (w2 - w) / dt;
t -= w / v;
dt = 0.05 / 36525;
w = XL1_calc(1, t, 40);
w2 = XL1_calc(1, t + dt, 40);
v = (w2 - w) / dt;
t -= w / v;
w = XL1_calc(1, t, -1);
t -= w / v;
var re = new Array(t, XL1_calc(0, t, -1));
return re;
},
earthMinR: function(t, min) {
var a = 365.25963586 / 36525,
b;
if(min)
b = 1.7 / 36525;
else
b = 184.5 / 36525;
t = b + a * int2((t - b) / a + 0.5);
var r1,
r2,
r3,
dt;
dt = 3 / 36525;
r1 = XL0_calc(0, 2, t - dt, 10);
r2 = XL0_calc(0, 2, t, 10);
r3 = XL0_calc(0, 2, t + dt, 10);
t += (r1 - r3) / (r1 + r3 - 2 * r2) * dt / 2;
dt = 0.2 / 36525;
r1 = XL0_calc(0, 2, t - dt, 80);
r2 = XL0_calc(0, 2, t, 80);
r3 = XL0_calc(0, 2, t + dt, 80);
t += (r1 - r3) / (r1 + r3 - 2 * r2) * dt / 2;
dt = 0.01 / 36525;
r1 = XL0_calc(0, 2, t - dt, -1);
r2 = XL0_calc(0, 2, t, -1);
r3 = XL0_calc(0, 2, t + dt, -1);
t += (r1 - r3) / (r1 + r3 - 2 * r2) * dt / 2;
r2 += (r1 - r3) / (r1 + r3 - 2 * r2) * (r3 - r1) / 8;
var re = new Array(t, r2);
return re;
}
};
var ditu0 = '1e7,2,212,58,180,121,180,128,143,150,129,130,129,99,147,92,171,74,170,42,150,122,104,175,102,230,118,223,124,192,125,215,138,405,92,413,99,411,126,445,117,422,100,590,65,639,76,606,88,724,88,741,101,818,93,942,111,1010,111,1064,126,1045,134,1003,130,1003,146,918,159,896,189,881,189,879,170,926,146,922,142,861,159,793,160,767,176,776,181,793,180,793,213,758,253,740,255,720,270,731,299,714,297,713,282,702,273,689,273,688,263,667,274,673,283,689,283,676,296,689,325,678,353,642,373,604,373,596,387,619,422,598,435,569,417,564,440,594,475,586,479,551,441,554,415,531,400,519,371,459,401,453,433,437,441,390,359,335,353,278,328,273,336,299,361,317,354,340,375,259,420,206,339,187,334,240,427,291,431,269,470,220,511,228,566,163,663,108,672,72,575,85,524,41,453,2,454,2,290,65,286,67,308,193,320,208,292,163,291,158,273,203,260,231,267,234,253,208,229,175,229,161,260,129,282,86,232,74,238,99,265,94,275,54,246,2,272,2,212,' + '1e7,67,54,115,46,154,50,155,54,119,58,100,71,67,54,1e7,300,96,321,77,385,68,388,71,315,91,327,101,317,105,300,96,1e7,522,45,547,44,592,58,573,62,550,60,522,45,1e7,775,75,780,82,808,83,818,74,806,72,775,75,' + '1e7,809,180,799,188,800,232,811,230,809,180,1e7,802,238,790,256,788,284,748,295,738,310,744,317,754,302,791,301,797,269,816,244,802,238,' + '1e7,686,354,681,357,677,365,683,371,686,354,1e7,544,460,583,487,602,515,640,527,597,528,544,460,1e7,662,452,619,482,638,507,646,507,672,484,665,469,673,460,662,452,1e7,680,480,671,513,684,514,703,479,680,480,1e7,747,492,750,504,808,532,846,537,820,507,776,494,747,492,' + '1e7,771,548,708,560,641,604,659,675,746,653,790,690,842,689,865,666,868,628,802,541,796,576,767,564,771,548,1e7,973,672,981,693,941,736,952,742,1003,693,973,672,1e7,282,550,257,571,254,619,268,619,289,564,282,550,' + '1e7,1092,112,1117,120,1119,126,1091,124,1082,130,1118,134,1091,146,1135,163,1105,176,1107,178,1140,169,1172,151,1255,160,1316,204,1322,278,1425,388,1517,419,1550,449,1579,450,1560,516,1587,566,1620,582,1593,744,1614,786,1644,785,1621,773,1643,745,1634,739,1771,605,1815,536,1815,519,1629,429,1557,442,1543,405,1522,404,1526,377,1486,392,1464,371,1477,332,1546,326,1559,351,1559,320,1618,256,1672,238,1639,204,1685,203,1699,192,1657,162,1582,146,1574,200,1502,169,1483,153,1573,108,1607,115,1607,126,1582,134,1644,145,1667,119,1559,96,1558,75,1666,31,1593,27,1334,68,1329,109,1259,112,1142,101,1092,112,' + '1e7,1680,39,1617,62,1634,77,1684,75,1734,110,1721,121,1744,151,1774,156,1788,131,1890,101,1864,88,1897,88,1906,54,1947,36,1927,36,1862,49,1892,37,1831,41,1836,33,1900,28,1833,22,1750,39,1680,39,1e7,1889,122,1884,136,1914,138,1933,130,1889,122,' + '1e7,1969,175,1959,182,1958,198,1979,192,1980,179,1969,175,1e7,1987,162,1980,172,1995,182,1976,203,2010,201,2010,180,1996,173,2002,166,1987,162,1e7,2010,208,1989,215,2001,222,2001,247,1961,249,1962,287,1999,285,2010,273,2010,208,1e7,2010,297,1980,297,1918,361,1916,415,1943,452,1970,466,2010,456,2010,297';
var ditu1 = '' + '#796,276,BaebBCeFfDgBhcaDFDFBFbcFeEfFeEgCgbgdeebgcecaBDbEbCaFcFBGBGbGcaaEaFbGcGbGbGdGcFdFdFcGcFcGcGdGeFcFdGcGbHcFeGeEgBfdbgfdgcBecfgcceahBgcgdfbhDebeagBgcgeefBdffcgcbffefdfefeeeeeefddBcdBgbfdfeceCgfegcdafCdddDdbecdbfCfdcfDgcDfCecdGaFdGcFfEdEdBeEaFeEeDcFcGBGBGCFcFfBecdCeegddcdfddcDdGcGbFbHcFbGcEdEcGBFBFdEBGCFaGaFCGBGaHcCcfdDcFcbeFcFfEcGbGaFdGbEbFeEbFeEfEfCfEfDeDgbafCfDfDfBgagbgCgEfEdEeGdDfHbEeCgBgDdBgFcDdBgbfdfbgdhbfbgaeechaBGbDhafCeEeBdGbCbFebdDaEfbfDfDCEaGaFdBeefdfddeceedfbgceefdedbfbfcfCgagCgCgBfFeDfEeGeEeEeCgEeEfBfcfdefdcgeacceeececdbcafBcCdddCBEaGcDeCdfEefcfdgbfcfaedecdCdcbfcBbCcaddeBaeeBfaebfbeeedfbddccddBcdcfBcecdcbbccbdaaeafbbbdBceaCCcefdbfefddcCddaeafcacbBfFBgcCdFeGCFceaedgdddFeGeFccbgDfDcbFcgBEeDfFdBgDfCgGdFdBfefecbedaecdcccgcfcgaafEbFaFcFcHBEDEEHbBfbdFcEaFbDfcffbeBecfeefhceeeehbfBdEEEFECDdaaCcaCDFDgadcddgdhcfchaeCfBeEDFcCFDBDeBcDcBbdgBdBdDaCaCdEFcDCbDcacFcDDDCECCaBbFbCdBecdcdDBddCbbBdeCBcfafBEcfbfddfBeagafDgEfEfEeFeDebceehcfegddeageffeebCdeBfcefbCeccEhahBhdhdgeeffffefffegfefefefefgfgecgbfagafbgcfefdeDeafCcfcGeHeFeKaCCDGacCaJCacBdceFEFDagCeKaHdieheieheeegeheieheffjegflclbmakaeBibkBhBdcfcickDibiEFBEDkbjajdjaibJcCefeiehejfeelclbhCkdEGBFgaDFjeieiegaccbffembcCHEDGaECFLCKDFFIEIEEFHFIDKCICaGFEHFDFBHaGbGdGbGbGdGbGbGdFdbfeheegbeafhajbaeafgfjdjaafCgegibhbCgEddgCeHBDgfffeedbffdkagahegBBFhekdlclBgFfbhejehddejchclcldldnbmDecBfEfDfEgKbEeKbjahBnBld4191:fBfaegdhaEFeFoamafFkDkDjDfdebEcjeDfgajbbaidfdLeKeMcPbaCbFCBGcCeDgGdLcJeIbKfNd4188,eQcPdPbRaKaQcLBBEgFJEJdNdaembKdHDNDQbPcQBNBGaPdefIfQdSbSBSBQbEdOeRblcJeScNENECdhdiBHcSBiduBScTcVaMbICMEnBFFEDIdPBQaPDRbHfHFFGKBLdIfbdHajeBgEfOeSbTcQBbGLaQCPdRbedVbUaTBaCDfIBQdIaMDpBRCSDSBFameqdoemfrdoeffagHbDfTcYaQCKbbfOaIbkfWcTEOFDFYBjEUaHaLBBabeVCPBbDUCTCRDTCCBMCcBMDealbaChENDTBVBUBbFcGnDjFmEFFeGEdLdieFdQbNeScEcPChChDPcHFlEnCFaSbKdBgcfFfJdhFbGPEIEjGgFGFBGbGqboaoDeGFFgEeBOccgEfKeQCEGeGIEFGKEHEPbLcnagfheiecggfLeagagbfbgIfcfhgbfTcUaHDEGGFNEHGgEBefECGDFebfahFkEGGIcKeOdOdOeRbOBGeMeJBiFmCgGbELDICcfJbPCDCPaJEKaFbcegdIaODDEIcMDMELDJDEFPBJeBemdceLeQbHaiFCGBGfEEGGBIdLBLEKEDEgGFBJBLbFcLdEFjEiCFFMcIfKcCfDffeHfJdGdIehBkDmBnDpBoCoblehfBfGfJeKbMeMeOdObHbGaMccbBdIaLBOcHcpbedKcNdGECbdcGdHBBEGCbfIDHFDcgfdcDcFDHBCBEBDCHFEcOcaEFaEbDBDFBcFaKBleFbLCKEKEiBFDGDEeFbCbEEKadEfaPCLDialcocpbaBJBGCLDfBFDCDLEHEGEBFFFGFKBiBFCIEGFcCgBlcHDHCFdIbJaaDkBIaIaeBDCLCgDKbJEICDEcFEEiBECBEBDcGcGjbFEdGjEjBkbieifjcBfgDeEbGeFeFeFgFBECCgFBEkbgccfgbkBefegcfbgbgfdjcebeddfCfGfHbFdBgeeafefheifgbjehfeeafhghdnamBgEBEIDHFIEIDFEKbbEDFcGdGCGBGhDiEjClcmcmclcmbcBjEkCIaKCGCGDLcLaJaJCIEbFgEfBBFbGJDGeHeIBFFEFBGbGcFDELaBDcBIDdcBaHCGdDdMBHCFDHCIBHCGdCaacCdGCJCICGBbdacIaEcDeBcBdgCgDbfDbIbfedfeBEdCgdfBdIDIDJDdEBaEBaGbFdBcFcEBDcDeEJBCDDcKaaFHcKBEEdEHCbdDeDDCGFFDCDBcDJBIDIDaGHEJCBEJaHcHccFcGEBIBGdHCJaDEfCDChBhDgCfDeDcFiDbFCBgEaDFeaGaEBGCGHDIbIaHaJaIbIaJaHcHaEEHCBFeCBGcGbHCGBGDFDGcEcaaDdDaHCGibhaibgDdFeEgafegcibiahbgbefgcddeffecdEfbgffefddgdibhegeceEgdfhdhahBhChBgdfeibgegdiDhDdGbFfDhEfEfFgDhBgEeDgBdEgCcGdFCFCEaFfeeefecfFdBfefgCgCfDBgGeGdIdHccfHbHbHeFeCgFfGeGeBgbdbfgbicBFdGfedadBcDcFeFgEgChDgDGbhChEhDfFcDaGBFaDgEdFeEcFbCeCeChbgBgBBDHcHcFCBEfFaFdaeBcFdeeEaeCgbcdBcdDcdbgCbeDdeacEccCeGdFdECgCCBFcCccddbbCCfEfBfecdDeECceacabceBGdbegchaeBhBgCbBEEebgefehbhBhChBHaGCbCIaFcCDGcGCFEaGhcBCcFbDbDEBCdBEcCfBdEaEdCDBfBhaGDDBhaaBedfDcBfDgafacffchCgDfEhbgafdgegCgbfdBFBECGcFaFCFCFDFDFCFBGDFEFHCFaGBGdFcHcGCGCFDGCGcHbFbGcGbHcHBEdFcHbGbEdEeGcHaGCHCFEDFcGaFFFGCGdGdGdHbHbHcEfCgGcHdGbHaHaHdGbBcEdCbGbCggdefcfDfEeffcfGCDbCeHaHDHBGBGdFCGbGCHCGcHaHBGbHDHaHBGCGEGCFBFDFDHCHbDcHBGaHaFeDeFCDGCGEFEFGDHCGDEFDECFEFBGcFaGDFEFFEGDFEGDHBFDCGDFFEFDCGCGBFFEFECDbBDFCFCFFEBFBGbBcadFcCbFCGBBeFcGaGBGDGBGBFCGEFFDeCeFcFdEBBEaaFdDDCgDaCdBbBfbfbDBDEfaDCdDdbBFdacBbFfDfDbDdFaEcDaDcDeDDBdCgCfDeEfDfDeDfEeEfDfDgCfCgcfcgdgbgbgagbgBgBgBgDfefcgbfdgcgaeegcgbgagbgagBfCeFeEaDcFeEgBgbgbgbecbadCeEeDeBaEdFCGaGCFDFdDBDBEfCGbaDCGDDBBcFdGdEdFfEeEeEeEeFdEdFbFdFfbECCCdGdFcFcFcGCEBFcGdFdFaFaHCFDFFDDECFCGaFDGBGDEbGBGaGbGcGfEdFcFdFdGcFeFdFdFcGBFaFaGdFbGaGbGdFbFcFdFfFfEdEcGcGdFdFdGeFbGDECDdEdFBFcbdDhBdEgbgdgbhafdhbhBgbhCfchaeehBfcgdfdgefeeffefeefefdfdfeffdfecgbfcgbgagDabfgdgdgcgcfddfBcaecgBgBfBeCfBgEebgbbfeefgce
var ditu2 = '' + '#796,277,abdcdegBgBgcfBecBfDgDeEdbhGbBfefdfgBfahbeedfhedfcfhdcfeebfafgdfdgdbegdfCgBfDdCca#945,352,aaECEFBFaFgCgDfEhBfDgCfagbgDeEfBfDhagafCgadfCgcfBb#1037,318,aaaCfDhBgcgCgbgbba#1040,253,BaafBgBgBdCgbeGdBffdecFcEedfbdeDcbeEebcFcFhBhahBhBCEDFEBFDaGcDcCdededCbGcFaGaGCBCEbE#1080,257,badadeBgddbgafgCeedfcfbfdfafedgefdgacaafab#1150,117,aacedfefdgBfCgDfbgDfEeEfbgddbgceDbCgEeEfBgCddcbgceebgbeeecebfadFaFgbcEaFBGCGcEfefdfBeBeefcgCdFfEaGbGeEeEaFaFBGFBGbHaGaFDDFEDcFcGbGcE#1168,238,aaceddeedc#1168,75,abcbgBdEaFebfBdfab#1219,121,abebdfhafCBfCffbddgcfcbgbfCgBgbdFCFaEbCEEBFbCc#1255,171,abaeBfCeBdEeEdCfFeEfDeCfGcFdCeddgbbeDdBcEeFBGaEebfEbDfDd#1524,494,aaab#1471,440,bafbeehcibcd#1361,582,aaHbIaIdIBJDFEIBKBICIaJcJbFfIbHeJbJaJCJBIcHeBgFdJcJcJcHcGFEEaGeEEFIDIcIaIaIcDfKaHdGaICHCEEJBDEHCHBFCCB#1018,573,abEdCeGCHaGcFfGdGfIaICJaFeGcFEFdEfEgFfFfGfIeGefeIBIDGDHDGbHBfeFbJbCaDcFCHcdfEfHbJcIaFCGDJBKCIBGDKaKCIBHBIbFCbEdBcDhDJaHCdFHDCDgDhCcFHDIaGCJcFeHaGCIcFCHEIdEBDbFeHeJBGdGCGcFBEDIDFDHCcGFEFfGbDFEFcFEFdDcFfCjBeFfFGBgEca#566,489,aBDEGDGcFeGcHdBeHcGbHCEdHdHcIBHcHcFC#446,550,aabdfeibfdafbdDdgeEcHdHcHaFeIaIaIbCfDfJaDfadFfIBIBHaCfDfibicCeIcEeDgDeafGeJaFcJcDeEeafGeeeCeCgge#322,704,bbfejejfifhegfDgKdBeafCgEdafeeFgGfdfhgIeKfbfjekejbBb#338,805,BbfeJeMdOCGFCGIEOdMBJeLbKBBGJBOaCGNaHFcGIFGFHDBGFFCFbGMaIECGaGcGaGhEGEdGEGGDaGFBEB#282,767,abEebfDgDedgJeOdJfEb#88,511,BbceIbbfFegdEfbeDeGaeefedefdbgefaeJbHcHcHcHeDaEdHdGeGcab#37,495,BaGBHbGdGcHCHcHbHbDdBb#u496,BaCb#86:434,BaafeeBeafbfEffcafdfafgeEeEcIBGaEdED#719,294,abbfbffdgdfcBfDcBhDdGdFeCfFfcffedfCfHbCfagCgbfCdBgedcfbgcfBfBgHBFeGdFeGbHcHcEdHaFCIaGDEEHB#567,349,aaDeEfCeCfbfDfFdGeFcBfEdCeafdeedBfcdGbEeEdBfCfCfDdaeBgBeddfbeEgEhagcgdgegDaEDDfEeB#874,435,BaFbHCDdGCGDGDGbagbgDdEeGECEFCGDDCGaGDFdGbHbIbFDHBCFDFGDHCCDFEFbGbFd#870,432,aBFBIaIaHCEDFCaEdGCFFEbFGDHbaEdEGDEDCFaGFDEbEbGDaDGBFBEFBGBEHCHBIaGBHaHBHbHdGb#828,469,abgBgbfcebdeGbHcCfDEGBEeEbgefdDb#879,377,BaEcDeGbGdBfBgbfgeCeDdGdGbbffegbbcab#859,460,BaGBIaEaFcGaFbGaIBBfecgafBdcGceeDeFEHbCFECCBbaBCBDHBHBbEgCaEeFEFDFaC#936,493,BaFcGdIcIaIbIBIbGBHdHaGCaGIbHdIaGCBEFCGEGCGDFDIcIaHbBgGdbeBgEdFfGaJaIaIBIaFfEfCb#684,532,BaGCJCIBHCaGaGaGaHaGaGaG#776,436,aaaeCeGcHdGdHdGeGdGeDfDfFfGaIaDfacDfIcGdGaeEGcEEGCCFCEJbHaFfFeHdIBHDDD#541,489,aBaEdFHbGdHBHBIBGcGdHBGa#543,454,aabeCeGcBdCeDeDeBcBb#538,453,abBeFeFcFB#523,462,abEdIbDfcfDd#523,433,BbFCDdHaHbGDEbIBIaHDHCIaHdHDGbFCaEFEDa#327,490,BaGaGaHDeEDEEE#307,487,BaBDGCHbGcGBIBGBHCGCGBCEEFDDFC#166,629,aabFBGdEdFBFeEBGGbFCIDHCGBeEbFhEgECDFECEbEGbHaHDHcFDEdIbFaEbcBCBIaCa#74,577,abadBfBfDecdBfecfddeBcdfDe#173,593,baechDgCcFedhBdDhBgEfBgCeaiahbiDiCBfdfhegeBeEfagEedeefCfDgEfJaKaLaKbBa#122,547,aBCDCDGaEbCFFcEeEFHBEa#266,634,BbceHdKcGb#311,650,CaGdJdHcJBKbLaJDCB#319,671,BaIaHeIcKBBB#371,608,BaIaFFCFHcHbHaHbFaHcKbJbKBGDEB#263,573,aBCEFDHcJaGFIBHCFCJbGdBfab#220,578,BBGCFEIBGBIaIcFCHCFc#198,567,aaaFbFHBaEDEEDJBHCIbJbIcEdIBHBGaHdaf#112,549,aaBaaaababaaaa#160,532,baDdaece#188,547,badDbBbBCbFCEDEECEGcHBGa#328,655,BaFDIBEEbEHCEEbFHbGDJaFB#658,292,BBEBCBaGaDDCCGCGDDHbGbHbGbFeEfDfBc#619,194,abCeDgCfDgCg#644,265,aBdEcFCGCGCGDEHCGCGCGCGCGCHCGBHaGBGBGDFEEFDFGBEdHaGbHbGBGaGbCFBFDC#565,333,BaGaEeGcHaHbHaHcFeGeFdFeGeGdGdGdGdHbEb#408,343,bBfahBfeeeibdfBeEfDehchbgcfeCdCgCd#494,433,aBEEHCBGaGBGDHHDHDHDGEGDHDFDHCGeFBaGBFaGDGBGCFaB#407,344,abBfDfCgCe#409,386,bafbfeceecBgFbaa#416,381,abafab#564,348,abFbHbEEDGCB#71:630,BbFbHcHCBeeddd' + '#220,536,aBcEdDDFGdHaIbHaGBEBdFdEfFgEeEaC#267,560,aBGCEEEFFFFDHCIbHDICIcGdFd#333,510,BaGcGcIaIBGEIbIaIbHbCeaeGaGbCdDdGeEgCb#346,527,abFcJCDgahDgEgEgIdICICHbJaJbGcFd#245,477,BaEdagBgFeFbEFbE#268,482,abafFeafefHcafbfce#215,497,baaeefcccfBgBe#812:128:bacFdFdFbFDFBGdFDFDFbEBGcFdCDFEEaEEEEFCB#637:299:aaBEaGEEECDEFbHBGBHbHbCcdebfeedfFeHbIbHcFeHeEeEfFfDfEecgcgbgdfcffdhbgbhbgBgCfEbD#680:399:abCebhdeagBgcecgafce' + '#26:409,aafDaFbFbGbFfFBEGBHaHBCEHBBFaEHCGBCGGDHBGCHaFDGDFEaHaGaHaGBGHaIaHaIaHaBGaGaHaGBFHaEEBGaGbGECGaHaHaHaHaGaDFaC#450,210,BaDFFBEDFCCFaFCGCGBFbHBFCFBHGBDFEFBGBFFaCFBGBGaGDFGbEFeEgCdFfEgEaGdGfabGBDHaHaFDEEFDFbHCEBFbGbEBFdEeFeFCFBGbEfFeCgGdEeCgFeFdBgFdHbCfFbagbgDfEfBgEeagDfDcDdfeChfeafdecgfcgbbfagagahagahagaggagc
ditu1 = dituJM(ditu1, pi2 / 4200, Math.PI / 2100);
ditu2 = dituJM(ditu2, pi2 / 4200, Math.PI / 2100);
ditu0 = ditu0.split(",");
for(var i = 0; i < ditu0.length; i++){
ditu0[i] -= 0;
}
var touY = {
MollY: new Array(),
MollCZ: function(W) {
var i,
N = 100,
B = this.MollY,
f = 1;
if(W < 0)
W = -W, f = -1;
if(W > pi_2 - 1E-10)
return f;
if(!B.length) {
for(i = 0; i < N; i++) {
var y0 = 0,
y = i / 100,
c = pi_2 * sin(y * pi_2);
while(abs(y - y0) > 1E-12) {
y0 = y;
y += (c - asin(y)) / sqrt(1 - y * y);
y /= 2;
}
B[i] = y;
}
B[N] = 1;
}
var n = W / pi_2 * N,
k = int2(n + 0.5);
if(!k)
k = 1;
if(k >= N)
k = N - 1;
n -= k;
var y2 = B[k],
a = y2 - B[k - 1],
b = B[k + 1] - y2;
return f * (y2 + n * (a + b + n * (b - a)) / 2);
},
toxy0: function(J, W, a) {
J -= this.J0 + pi_2;
var x = Math.cos(W) * Math.cos(J),
y = Math.cos(W) * Math.sin(J),
z = Math.sin(W);
a.x = x;
a.y = this.cosE0 * y + this.sinE0 * z;
a.z = -this.sinE0 * y + this.cosE0 * z;
},
toxy1: function(J, W, a) {
J -= this.J0;
var cosJ = Math.cos(J),
sinJ = Math.sin(J);
var cosW = Math.cos(W),
sinW = Math.sin(W);
var L = Math.atan2(this.sinE0 * sinW - this.cosE0 * cosW * cosJ, sinJ * cosW);
var B = Math.acos(this.cosE0 * sinW + this.sinE0 * cosW * cosJ);
a.x = a.y = 0,
a.z = -1;
if(B > Math.PI - 0.1)
return;
B = B / Math.PI;
a.x = B * cos(L),
a.y = B * sin(L),
a.z = 1;
},
toxy2: function(J, W, a) {
J -= this.J0;
var cosJ = Math.cos(J),
sinJ = Math.sin(J);
var cosW = Math.cos(W),
sinW = Math.sin(W);
var L = Math.atan2(this.sinE0 * sinW - this.cosE0 * cosW * cosJ, sinJ * cosW);
var B = Math.acos(this.cosE0 * sinW + this.sinE0 * cosW * cosJ);
a.x = a.y = 0,
a.z = -1;
if(B > Math.PI - 0.1)
return;
B = Math.sin(B / 2);
a.x = B * cos(L),
a.y = B * sin(L),
a.z = 1;
},
toxy3: function(J, W, a) {
J -= this.J0;
var cosJ = Math.cos(J),
sinJ = Math.sin(J);
var cosW = Math.cos(W),
sinW = Math.sin(W);
var L = Math.atan2(this.sinE0 * sinW - this.cosE0 * cosW * cosJ, sinJ * cosW);
var B = Math.acos(this.cosE0 * sinW + this.sinE0 * cosW * cosJ);
a.x = a.y = 0,
a.z = -1;
if(B > Math.PI - 1)
return;
B = Math.tan(B / 2);
a.x = B * Math.cos(L),
a.y = B * Math.sin(L),
a.z = 1;
},
toxy4: function(J, W, a) {
W = rad2rrad(W);
J = rad2rrad(J - this.J0);
a.y = this.MollCZ(W);
a.x = Math.sqrt(1 - a.y * a.y) * J * 2 / Math.PI;
a.z = 1;
},
toxy5: function(J, W, a) {
a.x = rad2rrad(J - this.J0) / Math.PI;
a.y = rad2rrad(W) / Math.PI;
a.z = 1;
},
toxy6: function(J, W, a) {
if(abs(W) > 1.5) {
a.x = a.y = 0,
a.z = -1;
return;
}
var f = 1;
if(W < 0)
f = -1;
a.x = rad2rrad(J - this.J0) / Math.PI;
a.y = Math.log(tan(pi2 / 8 + abs(W) / 2)) / Math.PI * f;
a.z = 1;
},
toxy7: function(J, W, a) {
J = rad2rrad(J - this.J0);
var C = Math.cos(W);
var v = Math.tan(W);
if(abs(W) > 0.002) {
var s = C * J * v,
l = 1 / v;
a.x = l * Math.sin(s);
a.y = W + l - l * Math.cos(s);
} else
a.x = J, a.y = W + J * J * v / 2;
a.x /= Math.PI,
a.y /= Math.PI,
a.z = 1;
},
toxy8: function(J, W, a) {
J = rad2rrad(J - this.J0);
var C = Math.cos(W * 2 / 3);
var v = Math.sin(W * 2 / 3) / 5.3;
J *= (1 - abs(J) / 11 / Math.PI) * 1.1;
W = (W + 0.014830286 * W * W * W) * 1.2;
if(Math.abs(W) > 0.002) {
var s = C * J * v,
l = 1 / v;
a.x = l * Math.sin(s);
a.y = W + l - l * Math.cos(s);
} else
a.x = J, a.y = W + J * J * v / 2;
a.x /= Math.PI,
a.y /= Math.PI,
a.z = 1;
},
toxy: function(J, W, a) {
a.x = J,
a.y = W,
a.z = 1;
},
setlx: function(lx, J0, W0, jb) {
this.tylx = lx,
this.J0 = J0,
this.W0 = W0;
this.cosE0 = sin(W0),
this.sinE0 = cos(W0);
if(lx == 0)
this.toxy = this.toxy0;
if(lx == 1)
this.toxy = this.toxy1;
if(lx == 2)
this.toxy = this.toxy2;
if(lx == 3)
this.toxy = this.toxy3;
if(lx == 4)
this.toxy = this.toxy4;
if(lx == 5)
this.toxy = this.toxy5;
if(lx == 6)
this.toxy = this.toxy6;
if(lx == 7)
this.toxy = this.toxy7;
if(lx == 8)
this.toxy = this.toxy8;
this.x1 = jb[0] - jb[2],
this.x2 = jb[0] + jb[2];
this.y1 = jb[1] - jb[3],
this.y2 = jb[1] + jb[3];
},
lineArr: function(d) {
var p = new Array(),
k = 0;
var i,
h,
G = new Object();
var lx,
ly,
dd = 0;
if(d[0] != 1e7)
h = 1;
for(i = 0; i < d.length; i++) {
if(d[i] == 1e7) {
h = 1,
dd = 0;
continue;
}
this.toxy(d[i], d[i + 1], G);
i++;
if(G.x < this.x1 || G.x > this.x2 || G.y < this.y1 || G.y > this.y2)
G.z = -1;
if(G.z < 0) {
if(dd % 2 == 1)
dd = 2;
continue;
}
if(dd % 2 == 0)
dd++, h = 1;
if(this.tylx == 4) {
if(abs(lx - G.x) > 1 / 3)
h = 1;
}
if(this.tylx == 5 || this.tylx == 6) {
if(abs(lx - G.x) > 1 / 3 || abs(ly - G.y) > 1 / 3)
h = 1;
}
if(this.tylx == 7 || this.tylx == 8 || this.tylx == 9) {
var cy = abs(ly - G.y),
cx = abs(lx - G.x);
if(cx > 1 / 3 || abs(G.y) > 1 / 2 && lx * G.x < 0)
h = 1;
}
if(h)
p[k++] = 1e7, h = 0;
p[k++] = G.x,
p[k++] = G.y;
lx = G.x,
ly = G.y;
}
return p;
}
};
var evTab = new Array(1, 1, 0, 0, 0, 0, -1719914, -25, 25, 1578089, 10, 684185, 2, 1, 0, 0, 0, 0, 6434, 28007, 25697, -5904, 11141, -2559, 1, 3, 0, 0, 0, 0, 715, 0, 6, -657, -15, -282, 1, 7, 0, 0, 0, 0, 715, 0, 0, -656, 0, -285, 3, 1, 0, 0, 0, 0, 486, -236, -216, -446, -94, -193, 1, 4, 0, 0, 0, 0, 159, 0, 2, -147, -6, -61, 1, 10, 0, 0, 0, 0, 0, 0, 0, 26, 0, -59, 1, 7, 1, 9, 0, 0, 39, 0, 0, -36, 0, -16, 2, 3, 0, 0, 0, 0, 33, -10, -9, -30, -5, -13, 2, 1, -1, 3, 0, 0, 31, 1, 1, -28, 0, -12, 3, 1, -8, 2, 3, 3, 8, -28, 25, 8, 11, 3, 5, 1, -8, 2, 3, 3, 8, -28, -25, -8, -11, -3, 2, 0, -1, 1, 0, 0, 21, 0, 0, -19, 0, -8, 1, 0, 0, 0, 0, 0, -19, 0, 0, 17, 0, 8, 1, 5, 0, 0, 0, 0, 17, 0, 0, -16, 0, -7, 1, 1, -2, 3, 0, 0, 16, 0, 0, 15, 1, 7, 1, 6, 0, 0, 0, 0, 16, 0, 1, -15, -3, -6, 1, 1, 1, 3, 0, 0, 11, -1, -1, -10, -1, -5, 2, 0, -2, 1, 0, 0, 0, -11, -10, 0, -4, 0, 1, 1, -1, 3, 0, 0, -11, -2, -2, 9, -1, 4, 4, 1, 0, 0, 0, 0, -7, -8, -8, 6, -3, 3, 3, 1, -2, 3, 0, 0, -10, 0, 0, 9, 0, 4, 1, 0, -2, 1, 0, 0, -9, 0, 0, -9, 0, -4, 2, 0, -3, 1, 0, 0, -9, 0, 0, -8, 0, -4, 2, 4, 0, 0, 0, 0, 0, -9, -8, 0, -3, 0, 2, 0, -4, 1, 0, 0, 0, -9, 8, 0, 3, 0, 3, 1, -2, 2, 0, 0, 8, 0, 0, -8, 0, -3, 1, 7, 2, 8, -1, 9, 8, 0, 0, -7, 0, -3, 8, 0, -12, 1, 0, 0, -4, -7, -6, 4, -3, 2, 8, 0, -14, 1, 0, 0, -4, -7, 6, -4, 3, -2, 2, 2, 0, 0, 0, 0, -6, -5, -4, 5, -2, 2, 3, 0, -4, 1, 0, 0, -1, -1, -2, -7, 1, -4, 2, 1, -2, 3, 0, 0, 4, -6, -5, -4, -2, -2, 3, 0, -3, 1, 0, 0, 0, -7, -6, 0, -3, 0, 2, 1, -2, 2, 0, 0, 5, -5, -4, -5, -2, -2, 1, 7, -2, 8, 0, 0, 5, 0, 0, -5, 0, -2, 1, 1, 0, 0, 0, 0, -2, 0, -13, 156, 32, -358, 2, 1, 0, 0, 0, 0, 141, -107, -95, -130, -48, -55, 3, 1, 0, 0, 0, 0, -5, -4, -4, 5, 0, 0);
var epTab = new Array(999829, 1.753486, 6283.07585, 999892, 0.182659, 6283.07585, 8353, 1.710345, 12566.1517, 24427, 3.141593, 0, 5611, 0, 0, 8353, 0.139529, 12566.1517, 105, 1.667226, 18849.22755, 105, 0.096417, 18849.22755, 31, 0.668752, 83996.8473181, 31, 5.381141, 83996.8473181, 26, 0.583102, 529.6909651, 26, 5.30104, 529.6909651, 21, 1.092352, 1577.3435424, 21, 2.662535, 1577.3435424, 17, 0.495402, 6279.5527316, 17, 5.207804, 6279.5527316, 17, 6.153155, 6286.5989683, 17, 4.582329, 6286.5989683, 14, 3.472728, 2352.8661538, 14, 1.900682, 2352.8661538, 11, 3.689848, 5223.6939198, 11, 5.273134, 5223.6939198, 9, 6.073899, 12036.4607349, 9, 4.503012, 12036.4607349, 9, 3.17572, 10213.2855462, 9, 1.605633, 10213.2855462, 6, 2.15262, 1059.3819302, 6, 0.581422, 1059.3819302, 7, 1.30699, 5753.3848849, 7, 2.807289, 398.1490034, 7, 4.355002, 398.1490034, 6, 6.029239, 5753.3848849, 7, 2.218215, 4705.7323075, 7, 0.647296, 4705.7323075, 6, 5.384792, 6812.7668151, 6, 3.813815, 6812.7668151, 5, 6.087683, 5884.9268466, 5, 4.527856, 5884.9268466, 5, 1.279337, 6256.7775302, 5, 5.991672, 6256.7775302, -5196635 / 1048, 0.599451, 529.6909651, -5195200 / 1048, 5.312032, 529.6909651, -9516383 / 3504, 0.874414, 213.2990954, -9529869 / 3504, 5.586006, 213.2990954, -30058900 / 19434, 5.312113, 38.1330356, -30060560 / 19434, 3.740863, 38.1330356, -19173710 / 22927, 5.481334, 74.7815986, -19165180 / 22927, 3.910457, 74.7815986);
var xz88 = '仙女座And, 722.278, 0 48.46, 37 25.91,NQ1 英仙 Andromeda,' + '唧筒座Ant, 238.901,10 16.43,-32 29.01,SQ2 拉卡伊 Antlia,' + '天燕座APS, 206.327,16 08.65,-75 18.00,SQ3 拜耳 Apus,' + '宝瓶座Aqr, 979.854,22 17.38,-10 47.35,SQ4 黄道 Aquarius,' + '天鹰座Aql, 652.473,19 40.02, 3 24.65,NQ4 武仙 Aquila,' + '天坛座Ara, 237.057,17 22.49,-56 35.30,SQ3 武仙 Ara,' + '白羊座Ari, 441.395, 2 38.16, 20 47.54,NQ1 黄道 Aries,' + '御夫座Aur, 657.438, 6 04.42, 42 01.68,NQ2 英仙 Auriga,' + '牧夫座Boo, 906.831,14 42.64, 31 12.16,NQ3 大熊 Bootes,' + '雕具座Cae, 124.865, 4 42.27,-37 52.90,SQ1 拉卡伊 Caelum,' + '鹿豹座Cam, 756.828, 8 51.37, 69 22.89,NQ2 大熊 Camelopardalis,' + '巨蟹座Cnc, 505.872, 8 38.96, 19 48.35,NQ2 黄道 Cancer,' + '猎犬座CVn, 465.194,13 06.96, 40 06.11,NQ3 大熊 Canes Venatici,' + '大犬座CMa, 380.118, 6 49.74,-22 08.42,SQ2 猎户 Canis Major,' + '小犬座CMi, 183.367, 7 39.17, 6 25.63,NQ2 猎户 Canis Minor,' + '摩羯座CAP, 413.947,21 02.93,-18 01.39,SQ4 黄道 Capricornus,' + '船底座Car, 494.184, 8 41.70,-63 13.16,SQ2 幻之水 Carina,' + '仙后座Cas, 598.407, 1 19.16, 62 11.04,NQ1 英仙 Cassiopeia,' + '半人马Cen,1060.422,13 04.27,-47 20.72,SQ3 武仙 Centaurus,' + '仙王座Cep, 587.787,22 00.00, 71 00.51,NQ4 英仙 Cepheus,' + '鲸鱼座Cet,1231.411, 1 40.10, -7 10.76,SQ1 英仙 Cetus,' + '堰蜒座Cha, 131.592,10 41.53,-79 12.30,SQ2 拜耳 Chamaeleon,' + '圆规座Cir, 93.353,14 34.54,-63 01.82,SQ3 拉卡伊 Circinus,' + '天鸽座Col, 270.184, 5 51.76,-35 05.67,SQ1 幻之水 Columba,' + '后发座Com, 386.475,12 47.27, 23 18.34,NQ3 大熊 Coma Berenices,' + '南冕座CrA, 127.696,18 38.79,-41 08.85,SQ4 武仙 Corona Australis,' + '北冕座CrB, 178.710,15 50.59, 32 37.49,NQ3 大熊 Corona Borealis,' + '乌鸦座Crv, 183.801,12 26.52,-18 26.20,SQ3 武仙 Corvus,' + '巨爵座Crt, 282.398,11 23.75,-15 55.74,SQ2 武仙 Crater,' + '南十字Cru, 68.447,12 26.99,-60 11.19,SQ3 武仙 Crux,' + '天鹅座Cyg, 803.983,20 35.28, 44 32.70,NQ4 武仙 Cygnus,' + '海豚座Del, 188.549,20 41.61, 11 40.26,NQ4 幻之水 Delphinus,' + '剑鱼座Dor, 179.173, 5 14.51,-59 23.22,SQ1 拜耳 Dorado,' + '天龙座Dra,1082.952,15 08.64, 67 00.40,NQ3 大熊 Draco,' + '小马座Equ, 71.641,21 11.26, 7 45.49,NQ4 幻之水 Equuleus,' + '波江座Eri,1137.919, 3 18.02,-28 45.37,SQ1 幻之水 Eridanus,' + '天炉座For, 397.502, 2 47.88,-31 38.07,SQ1 拉卡伊 Fornax,' + '双子座Gem, 513.761, 7 04.24, 22 36.01,NQ2 黄道 Gemini,' + '天鹤座Gru, 365.513,22 27.39,-46 21.11,SQ4 拜耳 Grus,' + '武仙座Her,1225.148,17 23.16, 27 29.93,NQ3 武仙 Hercules,' + '时钟座Hor, 248.885, 3 16.56,-53 20.18,SQ1 拉卡伊 Horologium,' + '长蛇座Hya,1302.844,11 36.73,-14 31.91,SQ2 武仙 Hydra,' + '水蛇座Hyi, 243.035, 2 20.65,-69 57.39,SQ1 拜耳 Hydrus,' + '印第安Ind, 294.006,21 58.33,-59 42.40,SQ4 拜耳 Indus,' + '蝎虎座Lac, 200.688,22 27.68, 46 02.51,NQ4 英仙 Lacerta,' + '狮子座Leo, 946.964,10 40.03, 13 08.32,NQ2 黄道 Leo,' + '小狮座LMi, 231.956,10 14.72, 32 08.08,NQ2 大熊 Leo Minor,' + '天兔座Lep, 290.291, 5 33.95,-19 02.78,SQ1 猎户 Lepus,' + '天秤座Lib, 538.052,15 11.96,-15 14.08,SQ3 黄道 Libra,' + '豺狼座Lup, 333.683,15 13.21,-42 42.53,SQ3 武仙 Lupus,' + '天猫座Lyn, 545.386, 7 59.53, 47 28.00,NQ2 大熊 Lynx,' + '天琴座Lyr, 286.476,18 51.17, 36 41.36,NQ4 武仙 Lyra,' + '山案座Men, 153.484, 5 24.90,-77 30.24,SQ1 拉卡伊 Mensa,' + '显微镜Mic, 209.513,20 57.88,-36 16.49,SQ4 拉卡伊 Microscopium,' + '麒麟座Mon, 481.569, 7 03.63, 0 16.93,NQ2 猎户 Monoceros,' + '苍蝇座Mus, 138.355,12 35.28,-70 09.66,SQ3 拜耳 Musca,' + '矩尺座Nor, 165.290,15 54.18,-51 21.09,SQ3 拉卡伊 Norma,' + '南极座Oct, 291.045,23 00.00,-82 09.12,SQ4 拉卡伊 Octans,' + '蛇夫座Oph, 948.340,17 23.69, -7 54.74,SQ3 武仙 Ophiuchus,' + '猎户座Ori, 594.120, 5 34.59, 5 56.94,NQ1 猎户 Orion,' + '孔雀座Pav, 377.666,19 36.71,-65 46.89,SQ4 拜耳 Pavo,' + '飞马座Peg,1120.794,22 41.84, 19 27.98,NQ4 英仙 Pegas
xz88 = xz88.split(',');
var HXK = new Array('库0#* 0 01 57.620,- 6 00 50.68, 0.0031, -0.041, 0.008, 4.37 ,星1630 ,Psc 30 M3#* 0 03 44.391,-17 20 09.58, 0.0020, -0.007, 0.014, 4.55 ,星905 ,Cet 2 B9#* 0 05 20.142,- 5 42 27.45,-0.0009, 0.089, 0.025, 4.61 ,星1002 ,Psc 33 K1#* 0 08 23.260, 29 05 25.54, 0.0104, -0.163, 0.034, 2.07 ,星1 ,And α B9#* 0 09 10.686, 59 08 59.19, 0.0681, -0.180, 0.060, 2.28 ,星2 ,Cas β F2#* 0 10 19.247, 46 04 20.17, 0.0005, 0.001, 0.003, 5.01 ,星4 ,And 22 F2#* 0 11 34.421,-27 47 59.06, 0.0003, 0.016, 0.006, 5.41 ,星5 ,Scl κ2 K2#* 0 11 44.010,-35 07 59.24, 0.0138, 0.115, 0.046, 5.24 ,星6 ,Scl θ F3#* 0 13 14.154, 15 11 00.93, 0.0003, -0.008, 0.010, 2.83 ,星7 ,Peg γ B2#* 0 14 36.165, 20 12 24.12, 0.0064, -0.001, 0.010, 4.79 ,星1004 ,Peg χ M2#' + '* 0 17 05.500, 38 40 53.87,-0.0046, -0.013, 0.013, 4.61 ,N30 ,And θ A2#* 0 18 19.658, 36 47 06.79,-0.0055, -0.042, 0.023, 4.51 ,星1005 ,And σ A2#* 0 18 38.258, 31 31 02.01, 0.0044, -0.004, 0.006, 5.88 ,星1006 ,Pi 0h38 A0#* 0 19 25.676,- 8 49 26.14,-0.0010, -0.037, 0.011, 3.56 ,星9 ,Cet ι K2#* 0 20 35.863, 8 11 24.96,-0.0003, 0.010, 0.008, 5.38 ,星1008 ,Psc 41 K3#* 0 21 07.270, 37 58 06.95, 0.0049, -0.039, 0.020, 5.16 ,星1009 ,And ρ F5#* 0 24 47.506, 61 49 51.80, 0.0018, -0.002, 0.004, 5.38 ,GC ,Cas 12 B9#* 0 25 24.210, 1 56 22.87,-0.0010, -0.013, 0.006, 5.77 ,星1010 ,Psc 44 G5#* 0 25 45.092,-77 15 15.30, 0.6689, 0.323, 0.134, 2.82 ,星11 ,Hyi β G2#* 0 26 17.052,-42 18 21.55, 0.0210, -0.354, 0.042, 2.40 ,星12 ,Phe α K0#', '库1#' + '* 0 48 22.978, 5 16 50.19, 0.0507,-1.141,0.134, 5.74,星1019,G.Psc 96 K2#' + '* 0 26 17.052,-42 18 21.55, 0.0210,-0.354,0.042, 2.40,星12 ,Phe α K0#' + '* 2 36 00.049,- 7 49 53.77, -0.0022,-0.060,0.006, 5.53,星1074,Cet 80 M0#' + '* 2 35 52.472, 5 35 35.67, -0.0019,-0.024,0.009, 4.87,星1072,Cet υ G8#' + '*18 36 27.834, 9 07 20.98, -0.0001,-0.132,0.026, 5.38,星1484,Oph 9 F5#' + '*18 36 56.338, 38 47 01.29, 0.0172, 0.288,0.129, 0.03,星699, Lyr α A0#' + '*18 37 54.426,-21 23 51.81, -0.0001,-0.066,0.010, 5.93,星1485,Sgr 83 A5#' + '*18 42 16.428,- 9 03 09.14, 0.0005,-0.002,0.017, 4.70,星1486,Sct δ F2#' + '*18 43 31.254,- 8 16 30.76, 0.0013, 0.008,0.006, 4.88,星702, Sct ε G8#');
var SZJ = {
L: 0,
fa: 0,
dt: 0,
E: 0.409092614,
getH: function(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, r) {
var z = m_coord((jd + this.dt) / 36525, 40, 30, 8);
z = llrConv(z, this.E);
r.H = rad2rrad(pGST(jd, this.dt) + this.L - z[0]);
if(H0)
r.H0 = this.getH(0.7275 * cs_rEar / z[2] - 34 * 60 / rad, z[1]);
},
Mt: function(jd) {
this.dt = dt_T(jd);
this.E = hcjj(jd / 36525);
jd -= mod2(0.1726222 + 0.966136808032357 * jd - 0.0366 * this.dt + this.L / pi2, 1);
var r = new Array(),
sv = pi2 * 0.966;
r.z = r.x = 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;
r.x += (Math.PI - r.H) / sv;
this.Mcoord(r.s, 1, r);
r.s += rad2rrad(-r.H0 - r.H) / sv;
this.Mcoord(r.j, 1, r);
r.j += rad2rrad(+r.H0 - r.H) / sv;
this.Mcoord(r.z, 0, r);
r.z += rad2rrad(0 - r.H) / sv;
this.Mcoord(r.x, 0, r);
r.x += rad2rrad(Math.PI - r.H) / sv;
return r;
},
Scoord: function(jd, xm, r) {
var z = new Array(XL.E_Lon((jd + this.dt) / 36525, 5) + Math.PI - 20.5 / rad, 0, 1);
z = llrConv(z, this.E);
r.H = rad2rrad(pGST(jd, this.dt) + this.L - z[0]);
if(xm == 10 || xm == 1)
r.H1 = this.getH(-50 * 60 / rad, z[1]);
if(xm == 10 || xm == 2)
r.H2 = this.getH(-6 * 3600 / rad, z[1]);
if(xm == 10 || xm == 3)
r.H3 = this.getH(-12 * 3600 / rad, z[1]);
if(xm == 10 || xm == 4)
r.H4 = this.getH(-18 * 3600 / rad, z[1]);
},
St: function(jd) {
this.dt = dt_T(jd);
this.E = hcjj(jd / 36525);
jd -= mod2(jd + this.L / pi2, 1);
var r = new Array(),
sv = pi2;
r.z = r.x = r.s = r.j = r.c = r.h = r.c2 = r.h2 = r.c3 = r.h3 = jd;
r.sm = '';
this.Scoord(jd, 10, r);
r.s += (-r.H1 - r.H) / sv;
r.j += (r.H1 - r.H) / sv;
r.c += (-r.H2 - r.H) / sv;
r.h += (r.H2 - r.H) / sv;
r.c2 += (-r.H3 - r.H) / sv;
r.h2 += (r.H3 - r.H) / sv;
r.c3 += (-r.H4 - r.H) / sv;
r.h3 += (r.H4 - r.H) / sv;
r.z += (0 - r.H) / sv;
r.x += (Math.PI - r.H) / sv;
this.Scoord(r.s, 1, r);
r.s += rad2rrad(-r.H1 - r.H) / sv;
if(r.H1 == Math.PI)
r.sm += '无升起.';
this.Scoord(r.j, 1, r);
r.j += rad2rrad(+r.H1 - r.H) / sv;
if(r.H1 == Math.PI)
r.sm += '无降落.';
this.Scoord(r.c, 2, r);
r.c += rad2rrad(-r.H2 - r.H) / sv;
if(r.H2 == Math.PI)
r.sm += '无民用晨.';
this.Scoord(r.h, 2, r);
r.h += rad2rrad(+r.H2 - r.H) / sv;
if(r.H2 == Math.PI)
r.sm += '无民用昏.';
this.Scoord(r.c2, 3, r);
r.c2 += rad2rrad(-r.H3 - r.H) / sv;
if(r.H3 == Math.PI)
r.sm += '无航海晨.';
this.Scoord(r.h2, 3, r);
r.h2 += rad2rrad(+r.H3 - r.H) / sv;
if(r.H3 == Math.PI)
r.sm += '无航海昏.';
this.Scoord(r.c3, 4, r);
r.c3 += rad2rrad(-r.H4 - r.H) / sv;
if(r.H4 == Math.PI)
r.sm += '无天文晨.';
this.Scoord(r.h3, 4, r);
r.h3 += rad2rrad(+r.H4 - r.H) / sv;
if(r.H4 == Math.PI)
r.sm += '无天文昏.';
this.Scoord(r.z, 0, r);
r.z += (0 - r.H) / sv;
this.Scoord(r.x, 0, r);
r.x += rad2rrad(Math.PI - r.H) / sv;
return r;
},
rts: new Array(),
calcRTS: function(jd, n, Jdl, Wdl, sq) {
var i,
c,
r;
if(!this.rts.length) {
for(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);
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;
}
};
var msc = {
calc: function(T, L, fa, high) {
this.T = T,
this.L = L,
this.fa = fa;
this.dt = dt_T(T);
this.jd = T - this.dt;
T /= 36525;
var zd = nutation2(T);
this.dL = zd[0];
this.dE = zd[1];
this.E = hcjj(T) + this.dE;
this.gst = pGST(this.jd, this.dt) + this.dL * Math.cos(this.E);
var z = new Array();
z = m_coord(T, -1, -1, -1);
z[0] = rad2mrad(z[0] + gxc_moonLon(T) + this.dL);
z[1] += gxc_moonLat(T);
this.mHJ = z[0];
this.mHW = z[1];
this.mR = z[2];
z = 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;
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;
z = 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] += MQC(z[1]);
this.mPJ = z[0];
this.mPW = z[1];
z = e_coord(T, -1, -1, -1);
z[0] = rad2mrad(z[0] + Math.PI + gxc_sunLon(T) + this.dL);
z[1] = -z[1] + gxc_sunLat(T);
this.sHJ = z[0];
this.sHW = z[1];
this.sR = z[2];
z = 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;
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;
z = llrConv(z, Math.PI / 2 - fa);
z[0] = rad2mrad(Math.PI / 2 - z[0]);
this.sDJ = z[0];
this.sDW = z[1];
if(z[1] > 0)
z[1] += MQC(z[1]);
this.sPJ = z[0];
this.sPW = z[1];
var t = T / 10,
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)));
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 = cs_sMoon / this.mR2;
this.sRad = 959.63 / this.sR2;
this.e_mRad = cs_sMoon / this.mR;
this.eShadow = (cs_rEarA / this.mR * rad - (959.63 - 8.794) / this.sR) * 51 / 50;
this.eShadow2 = (cs_rEarA / this.mR * rad + (959.63 + 8.794) / this.sR) * 51 / 50;
this.mIll = XL.moonIll(T);
if(Math.abs(rad2rrad(this.mCJ - this.sCJ)) < 50 / 180 * Math.PI) {
var pp = lineEar(new Array(this.mCJ, this.mCW, this.mR), new Array(this.sCJ, this.sCW, this.sR * cs_AU), this.gst);
this.zx_J = pp.J;
this.zx_W = pp.W;
} else
this.zx_J = this.zx_W = 100;
},
toHTML: function(fs) {
var s = '<table width="100%" cellspacing=1 cellpadding=0 bgcolor="#FFC0C0">';
s += '<tr><td bgcolor=white align=center>';
s += '平太阳 ' + JD.timeStr(this.pty) + ' 真太阳 <font color=red>' + JD.timeStr(this.zty) + '</font><br>';
s += '时差 ' + m2fm(this.sc * 86400, 2, 1) + " 月亮被照亮 " + (this.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(this.mHJ, 0) + ' ' + rad2str(this.sHJ, 0) + '\r\n';
s += '视黄纬 ' + rad2str(this.mHW, 0) + ' ' + rad2str(this.sHW, 0) + '\r\n';
s += '视赤经 ' + rad2str(this.mCJ, 1) + ' ' + rad2str(this.sCJ, 1) + '\r\n';
s += '视赤纬 ' + rad2str(this.mCW, 0) + ' ' + rad2str(this.sCW, 0) + '\r\n';
s += '距离 ' + (this.mR).toFixed(2) + '千米 ' + (this.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(this.mPJ, 0) + ' ' + rad2str(this.sPJ, 0) + '\r\n';
s += '高度角 ' + rad2str(this.mPW, 0) + ' ' + rad2str(this.sPW, 0) + '\r\n';
s += '时角 ' + rad2str(this.mShiJ, 0) + ' ' + rad2str(this.sShiJ, 0) + '\r\n';
s += '视半径(观测点) ' + m2fm(this.mRad, 2, 0) + ' ' + m2fm(this.sRad, 2, 0) + '\r\n';
s += '</pre></center></td></tr>';
if(fs) {
s += '<tr><td bgcolor=white align=center>';
s += '力学时 ' + JD.JD2str(this.T + J2000);
s += ' ΔT=' + (this.dt * 86400).toFixed(1) + '秒<br>';
s += '黄经章 ' + (this.dL / pi2 * 360 * 3600).toFixed(2) + '" ';
s += '交角章 ' + (this.dE / pi2 * 360 * 3600).toFixed(2) + '" ';
s += 'ε=' + rad2str(this.E, 0);
s += '</td></tr>';
}
s += '</table>';
return s;
}
};
var ysPL = {
lineT: function(G, v, u, r, n) {
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();
zs = e_coord(T, -1, -1, -1);
zs[0] = rad2mrad(zs[0] + Math.PI + gxc_sunLon(T));
zs[1] = -zs[1] + gxc_sunLat(T);
zm = m_coord(T, -1, -1, -1);
zm[0] = rad2mrad(zm[0] + gxc_moonLon(T));
zm[1] += gxc_moonLat(T);
re.e_mRad = cs_sMoon / zm[2];
re.eShadow = (cs_rEarA / zm[2] * rad - (959.63 - 8.794) / zs[2]) * 51 / 50;
re.eShadow2 = (cs_rEarA / zm[2] * rad + (959.63 + 8.794) / zs[2]) * 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) {
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;
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);
if(rmin <= G.mr + G.er) {
this.lT[1] = jd;
this.LX = '偏';
this.sf = (G.mr + G.er - rmin) / G.mr / 2;
this.lT[0] = this.lineT(G, v, u, G.mr + G.er, 0);
this.lecXY(this.lT[0], g);
this.lT[0] = 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 rsGS = {
Zs: new Array(),
Zdt: 0.04,
Zjd: 0,
dT: 0,
tanf1: 0.0046,
tanf2: 0.0045,
srad: 0.0046,
bba: 1,
bhc: 0,
dyj: 23500,
init: function(jd, n) {
if(suoN(jd) == suoN(this.Zjd) && this.Zs.length == n * 9)
return;
this.Zs.length = 0;
this.Zjd = jd = XL.MS_aLon_t2(suoN(jd) * Math.PI * 2) * 36525;
this.dT = dt_T(jd);
var zd = nutation2(jd / 36525);
var E = hcjj(jd / 36525) + zd[1];
var i,
k,
T,
S,
M,
B,
a = this.Zs;
for(i = 0; i < n; i++) {
T = (this.Zjd + (i - n / 2 + 0.5) * this.Zdt) / 36525;
if(n == 7)
S = e_coord(T, -1, -1, -1), M = m_coord(T, -1, -1, -1);
if(n == 3)
S = e_coord(T, 65, 65, 65), M = m_coord(T, -1, 150, 150);
if(n == 2)
S = e_coord(T, 20, 20, 20), M = m_coord(T, 30, 30, 30);
S[0] = S[0] + zd[0] + gxc_sunLon(T) + Math.PI;
S[1] = -S[1] + gxc_sunLat(T);
M[0] = M[0] + zd[0] + gxc_moonLon(T);
M[1] = M[1] + gxc_moonLat(T);
S = llrConv(S, E);
M = llrConv(M, E);
S[2] *= cs_AU;
if(i && S[0] < a[0])
S[0] += pi2;
if(i && M[0] < a[3])
M[0] += pi2;
k = i * 9;
a[k + 0] = S[0],
a[k + 1] = S[1],
a[k + 2] = S[2];
a[k + 3] = M[0],
a[k + 4] = M[1],
a[k + 5] = M[2];
S = llr2xyz(S),
M = llr2xyz(M);
B = xyz2llr(new Array(S[0] - M[0], S[1] - M[1], S[2] - M[2]));
B[0] = Math.PI / 2 + B[0];
B[1] = Math.PI / 2 - B[1];
if(i && B[0] < a[6])
B[0] += pi2;
a[k + 6] = B[0],
a[k + 7] = B[1],
a[k + 8] = pGST(T * 36525 - this.dT, this.dT) + zd[0] * cos(E);
}
var p = a.length - 9;
this.dyj = (a[2] + a[p + 2] - a[5] - a[p + 5]) / 2 / cs_rEar;
this.tanf1 = (cs_k0 + cs_k) / this.dyj;
this.tanf2 = (cs_k0 - cs_k2) / this.dyj;
this.srad = cs_k0 / ((a[2] + a[p + 2]) / 2 / cs_rEar);
this.bba = Math.sin((a[1] + a[p + 1]) / 2);
this.bba = cs_ba * (1 + (1 - cs_ba2) * this.bba * this.bba / 2);
this.bhc = -atan(tan(E) * sin((a[6] + a[p + 6]) / 2));
},
chazhi: function(jd, xt) {
var p = xt * 3,
m = 3;
var i,
N = this.Zs.length / 9,
B = this.Zs,
z = new Array();
var w = B.length / N;
var t = (jd - this.Zjd) / this.Zdt + N / 2 - 0.5;
if(N == 2) {
for(i = 0; i < m; i++, p++)
z[i] = B[p] + (B[p + w] - B[p]) * t;
return z;
}
var c = Math.floor(t + 0.5);
if(c <= 0)
c = 1;
if(c > N - 2)
c = N - 2;
t -= c,
p += c * w;
for(i = 0; i < m; i++, p++)
z[i] = B[p] + (B[p + w] - B[p - w] + (B[p + w] + B[p - w] - B[p] * 2) * t) * t / 2;
return z;
},
sun: function(jd) {
return this.chazhi(jd, 0);
},
moon: function(jd) {
return this.chazhi(jd, 1);
},
bse: function(jd) {
return this.chazhi(jd, 2);
},
cd2bse: function(z, I) {
var r = new Array(z[0] - I[0], z[1], z[2]);
r = llrConv(r, -I[1]);
return llr2xyz(r);
},
bse2cd: function(z, I) {
var r = xyz2llr(z);
r = llrConv(r, I[1]);
r[0] = rad2mrad(r[0] + I[0]);
return r;
},
bse2db: function(z, I, f) {
var r = xyz2llr(z);
r = llrConv(r, I[1]);
r[0] = rad2rrad(r[0] + I[0] - I[2]);
if(f)
r[1] = atan(tan(r[1]) / cs_ba2);
return r;
},
bseXY2db: function(x, y, I, f) {
var b = f ? cs_ba : 1;
var F = lineEar2(x, y, 2, x, y, 0, b, 1, I);
return [F.J, F.W];
},
bseM: function(jd) {
var a = this.cd2bse(this.chazhi(jd, 1), this.chazhi(jd, 2));
a[0] /= cs_rEar,
a[1] /= cs_rEar,
a[2] /= cs_rEar;
return a;
},
Vxy: function(x, y, s, vx, vy) {
var r = new Object();
var h = 1 - x * x - y * y;
if(h < 0)
h = 0;
else
h = sqrt(h);
r.vx = pi2 * (sin(s) * h - cos(s) * y);
r.vy = pi2 * x * cos(s);
r.Vx = vx - r.vx;
r.Vy = vy - r.vy;
r.V = sqrt(r.Vx * r.Vx + r.Vy * r.Vy);
return r;
},
rSM: function(mR) {
var re = new Object();
re.r1 = cs_k + this.tanf1 * mR;
re.r2 = cs_k2 - this.tanf2 * mR;
re.ar2 = abs(re.r2);
re.sf = cs_k2 / mR / cs_k0 * (this.dyj + mR);
return re;
},
qrd: function(jd, dx, dy, fs) {
var ba2 = this.bba * this.bba;
var M = this.bseM(jd),
x = M[0],
y = M[1];
var B = this.rSM(M[2]);
var r = 0;
if(fs == 1)
r = B.r1;
var d = 1 - (1 / ba2 - 1) * y * y / (x * x + y * y) / 2 + r;
var t = (d * d - x * x - y * y) / (dx * x + dy * y) / 2;
x += t * dx,
y += t * dy,
jd += t;
var c = (1 - ba2) * r * x * y / d / d / d;
x += c * y;
y -= c * x;
var re = this.bse2db([x / d, y / d, 0], this.bse(jd), 1);
re[2] = jd;
return re;
},
feature: function(jd) {
jd = this.Zjd;
var tg = 0.04,
jd1 = jd - tg / 2,
re = new Object(),
ls;
var tg = 0.04,
re = new Object(),
ls;
var a = this.bseM(jd - tg);
var b = this.bseM(jd);
var c = this.bseM(jd + tg);
var vx = (c[0] - a[0]) / tg / 2;
var vy = (c[1] - a[1]) / tg / 2;
var vz = (c[2] - a[2]) / tg / 2;
var ax = (c[0] + a[0] - 2 * b[0]) / tg / tg;
var ay = (c[1] + a[1] - 2 * b[1]) / tg / tg;
var v = Math.sqrt(vx * vx + vy * vy),
v2 = v * v;
re.jdSuo = jd;
re.dT = this.dT;
re.ds = this.bhc;
re.vx = vx;
re.vy = vy;
re.ax = ax;
re.ay = ay;
re.v = v;
re.k = vy / vx;
var t0 = -(b[0] * vx + b[1] * vy) / v2;
re.jd = jd + t0;
re.xc = b[0] + vx * t0;
re.yc = b[1] + vy * t0;
re.zc = b[2] + vz * t0 - 1.37 * t0 * t0;
re.D = (vx * b[1] - vy * b[0]) / v;
re.d = Math.abs(re.D);
re.I = this.bse(re.jd);
var F = lineEar2(re.xc, re.yc, 2, re.xc, re.yc, 0, cs_ba, 1, re.I);
var Bc,
Bp,
B2,
B3,
dt,
t2,
t3,
t4,
t5,
t6;
Bc = Bp = B2 = B3 = this.rSM(re.zc);
if(F.W != 100)
Bp = this.rSM(re.zc - F.R2);
if(re.d < 1) {
dt = sqrt(1 - re.d * re.d) / v;
t2 = t0 - dt,
t3 = t0 + dt;
B2 = this.rSM(t2 * vz + b[2] - 1.37 * t2 * t2);
B3 = this.rSM(t3 * vz + b[2] - 1.37 * t3 * t3);
}
ls = 1;
dt = 0;
if(re.d < ls)
dt = sqrt(ls * ls - re.d * re.d) / v;
t2 = t0 - dt,
t3 = t0 + dt;
ls = 1 + Bc.r1;
dt = 0;
if(re.d < ls)
dt = sqrt(ls * ls - re.d * re.d) / v;
t4 = t0 - dt,
t5 = t0 + dt;
t6 = -b[0] / vx;
if(re.d < 1) {
re.gk1 = this.qrd(t2 + jd, vx, vy, 0);
re.gk2 = this.qrd(t3 + jd, vx, vy, 0);
} else {
re.gk1 = [0, 0, 0];
re.gk2 = [0, 0, 0];
}
re.gk3 = this.qrd(t4 + jd, vx, vy, 1);
re.gk4 = this.qrd(t5 + jd, vx, vy, 1);
re.gk5 = this.bseXY2db(t6 * vx + b[0], t6 * vy + b[1], this.bse(t6 + jd), 1);
re.gk5[2] = t6 + jd;
if(F.W == 100) {
ls = this.bse2db([re.xc, re.yc, 0], re.I, 0);
re.zxJ = ls[0],
re.zxW = ls[1];
re.sf = (Bc.r1 - (re.d - 0.9972)) / (Bc.r1 - Bc.r2);
if(re.d > 0.9972 + Bc.r1) {
re.lx = 'N';
} else if(re.d > 0.9972 + Bc.ar2) {
re.lx = 'P';
} else {
if(Bc.sf < 1)
re.lx = 'A0';
else
re.lx = 'T0';
}
} else {
re.zxJ = F.J,
re.zxW = F.W;
re.sf = Bp.sf;
if(re.d > 0.9966 - Bp.ar2) {
if(Bp.sf < 1)
re.lx = 'A1';
else
re.lx = 'T1';
} else {
if(Bp.sf >= 1) {
re.lx = 'H';
if(B2.sf > 1)
re.lx = 'H2';
if(B3.sf > 1)
re.lx = 'H3';
if(B2.sf > 1 && B3.sf > 1)
re.lx = 'T';
} else
re.lx = 'A';
}
}
re.Sdp = CD2DP(this.sun(re.jd), re.zxJ, re.zxW, re.I[2]);
if(F.W != 100) {
re.dw = abs(2 * Bp.r2 * cs_rEar) / sin(re.Sdp[1]);
ls = this.Vxy(re.xc, re.yc, re.I[1], re.vx, re.vy);
re.tt = 2 * abs(Bp.r2) / ls.V;
} else
re.dw = re.tt = 0;
return re;
},
push: function(z, p) {
p[p.length] = z[0],
p[p.length] = z[1];
},
elmCpy: function(a, n, b, m) {
if(!b.length)
return;
if(n == -2)
n = a.length;
if(m == -2)
m = b.length;
if(n == -1)
n = a.length - 2;
if(m == -1)
m = b.length - 2;
a[n] = b[m],
a[n + 1] = b[m + 1];
},
nanbei: function(M, vx0, vy0, h, r, I) {
var x = M[0] - vy0 / vx0 * r * h,
y = M[1] + h * r,
z,
i;
var vx,
vy,
v,
sinA,
cosA,
js = 0;
for(i = 0; i < 3; i++) {
z = 1 - x * x - y * y;
if(z < 0) {
if(js)
break;
z = 0;
js++;
}
z = Math.sqrt(z);
x -= (x - M[0]) * z / M[2];
y -= (y - M[1]) * z / M[2];
vx = vx0 - pi2 * (sin(I[1]) * z - cos(I[1]) * y);
vy = vy0 - pi2 * cos(I[1]) * x;
v = Math.sqrt(vx * vx + vy * vy);
sinA = h * vy / v,
cosA = h * vx / v;
x = M[0] - r * sinA,
y = M[1] + r * cosA;
}
var X = M[0] - cs_k * sinA,
Y = M[1] + cs_k * cosA;
var p = lineEar2(X, Y, M[2], x, y, 0, cs_ba, 1, I);
return [p.J, p.W, x, y];
},
mQie: function(M, vx0, vy0, h, r, I, A) {
var p = this.nanbei(M, vx0, vy0, h, r, I);
if(!A.f2)
A.f2 = 0;
A.f = p[1] == 100 ? 0 : 1;
if(A.f2 != A.f) {
var g = lineOvl(p[2], p[3], vx0, vy0, 1, this.bba),
dj,
F;
if(g.n) {
if(A.f)
dj = g.R2, F = g.B;
else
dj = g.R1, F = g.A;
F[2] = 0;
var I2 = new Array(I[0], I[1], I[2] - dj / Math.sqrt(vx0 * vx0 + vy0 * vy0) * 6.28);
this.push(this.bse2db(F, I2, 1), A);
}
}
A.f2 = A.f;
if(p[1] != 100)
this.push(p, A);
},
mDian: function(M, vx0, vy0, AB, r, I, A) {
var i,
p,
a = M,
R,
c = new Object();
for(i = 0; i < 2; i++) {
c = this.Vxy(a[0], a[1], I[1], vx0, vy0);
p = lineOvl(M[0], M[1], c.Vy, -c.Vx, 1, this.bba);
if(!p.n)
break;
if(AB)
a = p.A, R = p.R1;
else
a = p.B, R = p.R2;
}
if(p.n && R <= r) {
a = this.bse2db([a[0], a[1], 0], I, 1);
this.push(a, A);
return 1;
}
return 0;
},
jieX: function(jd) {
var i,
p,
ls;
var re = this.feature(jd);
re.p1 = new Array(),
re.p2 = new Array(),
re.p3 = new Array(),
re.p4 = new Array();
re.q1 = new Array(),
re.q2 = new Array(),
re.q3 = new Array(),
re.q4 = new Array();
re.L1 = new Array(),
re.L2 = new Array(),
re.L3 = new Array(),
re.L4 = new Array();
re.L5 = new Array(),
re.L6 = new Array();
re.L0 = new Array();
var T = 1.7 * 1.7 - re.d * re.d;
if(T < 0)
T = 0;
T = Math.sqrt(T) / re.v + 0.01;
var t = re.jd - T,
N = 400,
dt = 2 * T / N;
var n1 = 0,
n4 = 0;
var Ua = re.q1,
Ub = re.q2;
this.push([0, 0], re.q2);
this.push([0, 0], re.q3);
this.push([0, 0], re.q4);
for(i = 0; i <= N; i++, t += dt) {
var vx = re.vx + re.ax * (t - re.jdSuo);
var vy = re.vy + re.ay * (t - re.jdSuo);
var M = this.bseM(t);
var B = this.rSM(M[2]);
var r = B.r1;
var I = this.bse(t);
p = cirOvl(1, this.bba, r, M[0], M[1]);
if(n1 % 2) {
if(!p.n)
n1++;
} else {
if(p.n)
n1++;
}
if(p.n) {
p.A[2] = p.B[2] = 0;
p.A = this.bse2db(p.A, I, 1);
p.B = this.bse2db(p.B, I, 1);
if(n1 == 1) {
this.push(p.A, re.p1);
this.push(p.B, re.p2);
}
if(n1 == 3) {
this.push(p.A, re.p3);
this.push(p.B, re.p4);
}
}
if(!this.mDian(M, vx, vy, 0, r, I, Ua)) {
if(Ua.length > 0)
Ua = re.q3;
};
if(!this.mDian(M, vx, vy, 1, r, I, Ub)) {
if(Ub.length > 2)
Ub = re.q4;
};
if(t > re.jd) {
if(Ua.length == 0)
Ua = re.q3;
if(Ub.length == 2)
Ub = re.q4;
}
p = this.bseXY2db(M[0], M[1], I, 1);
if(p[1] != 100 && n4 == 0 || p[1] == 100 && n4 == 1) {
ls = lineOvl(M[0], M[1], vx, vy, 1, this.bba);
var dj;
if(n4 == 0)
dj = ls.R2, ls = ls.B;
else
dj = ls.R1, ls = ls.A;
ls[2] = 0;
var I2 = new Array(I[0], I[1], I[2] - dj / Math.sqrt(vx * vx + vy * vy) * 6.28);
this.push(this.bse2db(ls, I2, 1), re.L0);
n4++;
}
if(p[1] != 100)
this.push(p, re.L0);
this.mQie(M, vx, vy, +1, r, I, re.L1);
this.mQie(M, vx, vy, -1, r, I, re.L2);
this.mQie(M, vx, vy, +1, B.r2, I, re.L3);
this.mQie(M, vx, vy, -1, B.r2, I, re.L4);
this.mQie(M, vx, vy, +1, (r + B.r2) / 2, I, re.L5);
this.mQie(M, vx, vy, -1, (r + B.r2) / 2, I, re.L6);
}
this.elmCpy(re.q3, 0, re.q1, -1);
this.elmCpy(re.q4, 0, re.q2, -1);
this.elmCpy(re.q1, -2, re.L1, 0);
this.elmCpy(re.q2, -2, re.L2, 0);
this.elmCpy(re.q3, 0, re.L1, -1);
this.elmCpy(re.q4, 0, re.L2, -1);
this.elmCpy(re.q2, 0, re.q1, 0);
this.elmCpy(re.q3, -2, re.q4, -1);
return re;
},
jieX2: function(jd) {
var re = new Object();
var p1 = new Array(),
p2 = new Array(),
p3 = new Array();
if(abs(jd - this.Zjd) > 0.5)
return re;
var i,
s,
p,
x,
y,
X,
Y;
var S = this.sun(jd);
var M = this.bseM(jd);
var B = this.rSM(M[2]);
var I = this.bse(jd);
var Z = M[2];
var a0 = M[0] * M[0] + M[1] * M[1];
var a1 = a0 - B.r2 * B.r2;
var a2 = a0 - B.r1 * B.r1;
var N = 200;
for(i = 0; i < N; i++) {
s = i / N * pi2;
var cosS = cos(s),
sinS = sin(s);
X = M[0] + cs_k * cosS,
Y = M[1] + cs_k * sinS;
x = M[0] + B.r2 * cosS,
y = M[1] + B.r2 * sinS;
p = lineEar2(X, Y, Z, x, y, 0, cs_ba, 1, I);
if(p.W != 100)
this.push([p.J, p.W], p1);
else {
if(sqrt(x * x + y * y) > a1)
this.push(this.bse2db([x, y, 0], I, 1), p1);
}
x = M[0] + B.r1 * cosS,
y = M[1] + B.r1 * sinS;
p = lineEar2(X, Y, Z, x, y, 0, cs_ba, 1, I);
if(p.W != 100)
this.push([p.J, p.W], p2);
else {
if(sqrt(x * x + y * y) > a2)
this.push(this.bse2db([x, y, 0], I, 1), p2);
}
p = llrConv([s, 0, 0], pi_2 - S[1]);
p[0] = rad2rrad(p[0] + S[0] + pi_2 - I[2]);
this.push(p, p3);
}
p1[p1.length] = p1[0],
p1[p1.length] = p1[1];
p2[p2.length] = p2[0],
p2[p2.length] = p2[1];
p3[p3.length] = p3[0],
p3[p3.length] = p3[1];
re.p1 = p1,
re.p2 = p2,
re.p3 = p3;
return re;
},
jieX3: function(jd) {
var i,
k,
p,
ls;
var re = this.feature(jd);
var t = Math.floor(re.jd * 1440) / 1440 - 3 / 24;
var N = 360,
dt = 1 / 1440,
s = '',
s2;
for(i = 0; i < N; i++, t += dt) {
var vx = re.vx + re.ax * (t - re.jdSuo);
var vy = re.vy + re.ay * (t - re.jdSuo);
var M = this.bseM(t);
var B = this.rSM(M[2]);
var r = B.r1;
var I = this.bse(t);
s2 = JD.JD2str(t + J2000) + ' ',
k = 0;
p = this.nanbei(M, vx, vy, +1, r, I);
if(p[1] != 100)
s2 += rad2str2(p[0]) + ' ' + rad2str2(p[1]) + '|', k++;
else
s2 += '-------------------|';
p = this.nanbei(M, vx, vy, +1, B.r2, I);
if(p[1] != 100)
s2 += rad2str2(p[0]) + ' ' + rad2str2(p[1]) + '|', k++;
else
s2 += '-------------------|';
p = this.bseXY2db(M[0], M[1], I, 1);
if(p[1] != 100)
s2 += rad2str2(p[0]) + ' ' + rad2str2(p[1]) + '|', k++;
else
s2 += '-------------------|';
p = this.nanbei(M, vx, vy, -1, B.r2, I);
if(p[1] != 100)
s2 += rad2str2(p[0]) + ' ' + rad2str2(p[1]) + '|', k++;
else
s2 += '-------------------|';
p = this.nanbei(M, vx, vy, -1, r, I);
if(p[1] != 100)
s2 += rad2str2(p[0]) + ' ' + rad2str2(p[1]) + ' ', k++;
else
s2 += '------------------- ';
if(k)
s += s2 + '<br>';
}
return '<pre>时间(力学时) 半影北界限 本影北界线 中心线 本影南界线 半影南界线,(伪本影南北界应互换)<br>' + s + '</pre>';
}
};
var rsPL = {
nasa_r: 0,
sT: new Array(),
secXY: function(jd, L, fa, high, re) {
var deltat = dt_T(jd);
var zd = nutation2(jd / 36525);
var gst = pGST(jd - deltat, deltat) + zd[0] * Math.cos(hcjj(jd / 36525) + zd[1]);
var z;
z = rsGS.moon(jd);
re.mCJ = z[0];
re.mCW = z[1];
re.mR = z[2];
var mShiJ = rad2rrad(gst + L - z[0]);
parallax(z, mShiJ, fa, high);
re.mCJ2 = z[0],
re.mCW2 = z[1],
re.mR2 = z[2];
z = rsGS.sun(jd);
re.sCJ = z[0];
re.sCW = z[1];
re.sR = z[2];
var sShiJ = rad2rrad(gst + L - z[0]);
parallax(z, sShiJ, fa, high);
re.sCJ2 = z[0],
re.sCW2 = z[1],
re.sR2 = z[2];
re.mr = cs_sMoon / re.mR2 / rad;
re.sr = 959.63 / re.sR2 / rad * cs_AU;
if(this.nasa_r)
re.mr *= cs_sMoon2 / cs_sMoon;
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) {
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) {
var i;
for(i = 0; i < 5; i++)
this.sT[i] = 0;
this.LX = '';
this.sf = 0;
this.sf2 = 0;
this.sf3 = 0;
this.sflx = " ";
this.b1 = 1;
this.dur = 0;
this.P1 = this.V1 = 0;
this.P2 = this.V2 = 0;
this.sun_s = this.sun_j = 0;
rsGS.init(jd, 7);
jd = rsGS.Zjd;
var G = new Object(),
g = new Object();
this.secXY(jd, L, fa, high, G);
jd -= G.x / 0.2128;
var 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 maxsf = 0,
maxjd = jd,
rmin,
ls;
for(i = -30; i < 30; i += 6) {
tt = jd + i / 86400;
this.secXY(tt, L, fa, high, g);
ls = (g.mr + g.sr - Math.sqrt(g.x * g.x + g.y * g.y)) / g.sr / 2;
if(ls > maxsf)
maxsf = ls, maxjd = tt;
}
jd = maxjd;
for(i = -5; i < 5; i += 1) {
tt = jd + i / 86400;
this.secXY(tt, L, fa, high, g);
ls = (g.mr + g.sr - Math.sqrt(g.x * g.x + g.y * g.y)) / g.sr / 2;
if(ls > maxsf)
maxsf = ls, maxjd = tt;
}
jd = maxjd;
this.secXY(jd, L, fa, high, G);
rmin = Math.sqrt(G.x * G.x + G.y * G.y);
this.sun_s = sunShengJ(jd - dt_T(jd) + L / pi2, L, fa, -1) + dt_T(jd);
this.sun_j = sunShengJ(jd - dt_T(jd) + L / pi2, L, fa, 1) + dt_T(jd);
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.secXY(this.sun_s, L, fa, high, g);
this.sf2 = (g.mr + g.sr - Math.sqrt(g.x * g.x + g.y * g.y)) / g.sr / 2;
if(this.sf2 < 0)
this.sf2 = 0;
this.secXY(this.sun_j, L, fa, high, g);
this.sf3 = (g.mr + g.sr - Math.sqrt(g.x * g.x + g.y * g.y)) / g.sr / 2;
if(this.sf3 < 0)
this.sf3 = 0;
this.sT[0] = this.lineT(G, v, u, G.mr + G.sr, 0);
for(i = 0; i < 3; i++) {
this.secXY(this.sT[0], L, fa, high, g);
this.sT[0] = this.lineT(g, v, u, g.mr + g.sr, 0);
}
this.P1 = rad2mrad(atan2(g.x, g.y));
this.V1 = rad2mrad(this.P1 - shiChaJ(pGST2(this.sT[0]), L, fa, g.sCJ, g.sCW));
this.sT[2] = this.lineT(G, v, u, G.mr + G.sr, 1);
for(i = 0; i < 3; i++) {
this.secXY(this.sT[2], L, fa, high, g);
this.sT[2] = this.lineT(g, v, u, g.mr + g.sr, 1);
}
this.P2 = rad2mrad(atan2(g.x, g.y));
this.V2 = rad2mrad(this.P2 - shiChaJ(pGST2(this.sT[2]), L, fa, g.sCJ, g.sCW));
}
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);
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);
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);
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);
this.dur = this.sT[4] - this.sT[3];
}
if(this.sT[1] < this.sun_s && this.sf2 > 0)
this.sf = this.sf2, this.sflx = "#";
if(this.sT[1] > this.sun_j && this.sf3 > 0)
this.sf = this.sf3, this.sflx = "*";
for(i = 0; i < 5; i++) {
if(this.sT[i] < this.sun_s || this.sT[i] > this.sun_j)
this.sT[i] = 0;
}
this.sun_s -= dt_T(jd);
this.sun_j -= dt_T(jd);
},
A: new Array(),
B: new Array(),
P: {
S: new Array(),
M: new Array(),
g: 0
},
Q: {
S: new Array(),
M: new Array(),
g: 0
},
V: new Array(),
Vc: '',
Vb: '',
zb0: function(jd) {
var deltat = dt_T(jd);
var E = hcjj(jd / 36525);
var zd = nutation2(jd / 36525);
this.P.g = pGST(jd - deltat, deltat) + zd[0] * Math.cos(E + zd[1]);
this.P.S = rsGS.sun(jd);
this.P.M = rsGS.moon(jd);
var t2 = jd + 60 / 86400;
this.Q.g = pGST(t2 - deltat, deltat) + zd[0] * Math.cos(E + zd[1]);
this.Q.S = rsGS.sun(t2);
this.Q.M = rsGS.moon(t2);
var z1 = new Array(),
z2 = new Array();
z1 = llr2xyz(this.P.S);
z2 = llr2xyz(this.P.M);
var k = 959.63 / cs_sMoon * cs_AU,
F;
F = new Array((z1[0] - z2[0]) / (1 - k) + z2[0], (z1[1] - z2[1]) / (1 - k) + z2[1], (z1[2] - z2[2]) / (1 - k) + z2[2]);
this.A = xyz2llr(F);
F = new Array((z1[0] - z2[0]) / (1 + k) + z2[0], (z1[1] - z2[1]) / (1 + k) + z2[1], (z1[2] - z2[2]) / (1 + k) + z2[2]);
this.B = xyz2llr(F);
},
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]);
parallax(s, p.g + L - p.S[0], fa, 0);
parallax(m, p.g + L - p.M[0], fa, 0);
p.mr = cs_sMoon / m[2] / rad;
p.sr = 959.63 / s[2] / rad * cs_AU;
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) {
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 * cs_AU;
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];
var A = fAB ? this.A : this.B;
var pp = lineEar(new Array(J, W, R), A, p.g);
re.J = pp.J;
re.W = pp.W;
},
pp0: function(re) {
var p = this.P;
var pp = lineEar(p.M, p.S, p.g);
re.J = pp.J;
re.W = pp.W;
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) {
rsGS.init(jd, 7);
var i,
G = new Object(),
V = this.V;
for(i = 0; i < 10; i++)
V[i] = 100;
this.Vc = '',
this.Vb = '';
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;
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) + '千米';
}
}
};
JWv = new Array('北京市 dshN天安门 dshO北京市 djh8房山区 dihK大兴区 drhQ崇文区 dthQ朝阳区 dthd通州区 dvhI海淀区 duhP东城区 dthM西城区 dqhL宣武区 dphH丰台区 dshD石景山区 duh6门头沟区 eDhE昌平区 e8hd顺义区 eJhc怀柔区 e8i7平谷区 eRgw延庆县 eMho密云县', '福建省 Q5kI福州市 OTj5厦门市 OVid漳州市 Orje泉州市 QGib三明市 P6i2龙岩市 QdjA南平市 QekV宁德市 PQk0莆田市 QdjA延平区 QEia三元区 QGic梅列区 P6i2新罗区 QekV蕉城区 PRk6涵江区 PQk0城厢区 PQk1荔城区 PJk5秀屿区 P7jr泉港区 Ovje洛江区 Otja丰泽区 Otja鲤城区 Oij9同安区 ObjE翔安区 OYj6集美区 ORj5思明区 OVj5湖里区 OSix海沧区 OVih龙文区 OVid芗城区 OnjZ晋江市 Oijd石狮市 ORin龙海市 PIiP漳平市 OwjN南安市 PxiM永安市 R2jJ建瓯市 RKj7建阳市 Rkj2武夷山市 RMiT邵武市 R5kd福安市 RKlD福鼎市 PwkV长乐市 PhkN福清市 Q3kJ仓山区 Q4kI台江区 Q5kI鼓楼区 Q5kJ晋安区 PykR马尾区 Ohhi永定县 Nei0饶平县 NhiB诏安县 NviK云霄县 O8ib漳浦县 NgiQ东山县 OQjJ金门县 Obij长泰县 OMiI平和县 OViM南靖县 P1iW华安县 P4jB安溪县 PUjE德化县 PJjI永春县 QAjB尤溪县 Pgip大田县 QBhn清流县 QGhd宁化县 Phhj连城县 P3hP上杭县 P6h6武平县 PohL长汀县 QMiC明溪县 QsiA泰宁县 Qoho建宁县 RtjW浦城县 RXiK光泽县 Qmim顺昌县 QiiS将乐县 QOil沙县 QZjj古田县 Qtjx屏南县 QTkX罗源县 Qrky霞浦县 R7kK周宁县 RSkU寿宁县 RMjp政和县 RWjl松溪县 REks柘荣县 QCkW连江县 Q9k8闽侯县 QDjp闽清县 Pqju永泰县 PMjf仙游县 P2jm惠安县 PVkl平潭县', '安徽省 VoiF合肥市 UWi3安庆市 UeiT池州市 VkhU六安市 Wsgn阜阳市 Xpgl亳州市 Xchx宿州市 Xvhm淮北市 Wchy淮南市 WtiN蚌埠市 WIjJ滁州市 VgjU马鞍山市 Vaiq巢湖市 VKjN芜湖市 Uuin铜陵市 Uvjj宣城市 ThjK黄山市 Xchw埇桥区 Xshm烈山区 Xvhm相山区 Xyhn杜集区 Wtgp颍东区 Wrgm颍州区 Wugm颍泉区 Xrgk谯城区 WuiK禹会区 WviN龙子湖区 WviL蚌山区 WwiL淮上区 Wci3大通区 Wei0田家庵区 Wahp谢家集区 Wcho八公山区 Wlhn潘集区 WJjI南谯区 WIjI琅琊区 Vaip居巢区 VriF庐阳区 VqiI瑶海区 VpiG蜀山区 VmiI包河区 VkhT裕安区 VkhU金安区 U9h7宿松县 Uai0宜秀区 UUi3迎江区 UVi2大观区 UdiT贵池区 Util郊区 Uvip狮子山区 Uuin铜官山区 VfjT雨山区 VhjU花山区 VijT金家庄区 VJjM戈江区 VLjM镜湖区 VMjN鸠江区 VEjE三山区 Uvjj宣州区 UIj8黄山区 TnjK徽州区 ThjK屯溪区 V3hv桐城市 Wlix明光市 Wgjy天长市 Ucjx宁国市 UQhG太湖县 U6i1东至县 UDiT石台县 UgiC枞阳县 Uhho怀宁县 U8hf望江县 UchY潜山县 UphL岳西县 VOhK霍山县 VShu舒城县 VFiH庐江县 VhiA肥西县 VriS肥东县 Vhgt金寨县 WKhG霍邱县 WchG颍上县 WcgZ阜南县 XAgb太和县 X9hC利辛县 XVhD涡阳县 X4gF临泉县 Xthk濉溪县 YBhu萧县 YPhL砀山县 XJiJ固镇县 XXiX灵璧县 WwiB怀远县 XGhY蒙城县 Wghh凤台县 WZhl寿县 WqiY凤阳县 WTiA长丰县 WWie定远县 WRjQ来安县 X9ir五河县 XTir泗县 UskP广德县 V8kA郎溪县 VXjT当涂县 VhjM和县 W6jG全椒县 Vhj6含山县 VIit无为县 Uvil铜陵县 V5jC繁昌县 UtjK南陵县 V9jY芜湖县 UHjW旌德县 UgjO泾县 Udip青阳县 TljB休宁县 Tqih祁门县 Tuiu黟县 TqjQ歙县 U4ja绩溪县', '甘肃省 a4Un兰州市 YxTt甘南藏族自治州 ZaUD临夏回族自治州 buTc武威市 dmPG嘉峪关市 djPV酒泉市 cuRR张掖市 cUTB金昌市 ZiYc庆阳市 ZXXe平凉市 aXVB白银市 ZZVb定西市 YZWh天水市 XOVt陇南市 djPV肃州区 cuRR甘州区 cUTB金川区 a3Uo城关区 a6Ub西固区 aKTq红古区 buTc凉州区 aXVB白银区 aiVo平川区 ZXXe崆峒区 ZiYc西峰区 ZZVb安定区 YYWr麦积区 XOVt武都区 YxTt合作市 ZaUD临夏市 eHO3玉门市 e8Le敦煌市 YZWh秦州区 XyT4玛曲县 YZTT碌曲县 Y3UD迭部县 YZUU卓尼县 YgUL临潭县 ZTUZ广河县 ZUTy临夏县 ZQUL和政县 ZCTV夏河县 ZhTr积石山保安族东乡族撒拉族自治县 ZeUO东乡族自治县 ZuUJ永靖县 aiUG永登县
for(i = 0; i < JWv.length; i++){
JWv[i] = JWv[i].split(" ");
}
var SQv = new Array("亚洲,中国,8##北京、乌鲁木齐、台北、港澳,阿富汗,4.5##喀布尔,阿联酋,4##阿布扎比,阿曼,4##马斯喀特,阿塞拜疆,4##巴库,巴基斯坦,5##卡拉奇、伊斯兰堡,巴勒斯坦,2#0415d0915d#耶路撒冷、加沙、杰里科,巴林,3##麦纳麦,不丹,6##廷布,朝鲜,9##平壤,东帝汶,8##帝力,俄罗斯东五区,5#0350d1050d#鄂木斯克,俄罗斯东八区,8#0350d1050d#雅库茨克,俄罗斯东九区,9#0350d1050d#海参崴,俄罗斯东六区,6#0350d1050d#新西伯利亚,俄罗斯东七区,7#0350d1050d#伊尔库茨克,俄罗斯东十区,10#0350d1050d#马加丹,俄罗斯东十一区,11#0350d1050d#阿纳德尔,菲律宾,8#0415d1015d#马尼拉,格鲁吉亚,5##第比利斯,哈萨克斯坦东部,5##阿拉木图、卡拉干达,哈萨克斯坦西部,4##阿克纠宾斯克,韩国,9##汉城,吉尔吉斯斯坦,5##比什凯克,柬埔寨,7##金边,卡塔尔,3##多哈,科威特,3##科威特市,老挝,7##万象,黎巴嫩,2#0350d1050d#贝鲁特,马尔代夫,5##马累,马来西亚,8##吉隆坡,蒙古,8#0350d0950d#乌兰巴托,孟加拉国,6##达卡,缅甸,6.5##仰光,尼泊尔,5.75##加德满都,日本,9##东京、大阪、札幌,塞浦路斯,2##尼科西亚,沙特阿拉伯,3##利雅得,斯里兰卡,5.5##科伦坡,塔吉克斯坦,5##杜尚别,泰国,7##曼谷,土耳其,2##伊斯坦布尔,土库曼斯坦,5##阿什哈巴德,文莱,8##斯里巴加湾,乌兹别克斯坦,5##塔什干,锡金,5.5##甘托克,新加坡,8##新加坡,叙利亚,2#0411d1011d#大马士革,亚美尼亚,4##埃里温,也门,3##萨那,伊拉克,3#0411d1011d#巴格达,伊朗,3.5#0411d1011d#德黑兰,以色列,2#0415d0915d#特拉维夫、耶路撒冷,印度,5.5##新德里、孟买、加尔各答,印度尼西亚,7##雅加达,约旦,2##安曼,越南,7##河内", "欧洲,阿尔巴尼亚,1##地拉那,爱尔兰,0#0350b1050b#都柏林,爱沙尼亚,2##塔林,安道尔,0##安道尔城,奥地利,1#0350b1050b#维也纳,白俄罗斯,2#0350d1050d#明斯克,保加利亚,2##索非亚,比利时,1#0350b1050b#布鲁塞尔,冰岛,0##雷克雅未克,波黑,1##萨拉热窝,波兰,1##华沙,丹麦,1#0410d1050d#哥本哈根,德国,1#0350b1050b#柏林,俄罗斯东二区,2#0350d1050d#莫斯科,俄罗斯东三区,3#0350d1050d#伏尔加格勒,俄罗斯东四区,4#0350d1050d#叶卡捷琳堡,法国,1#0350b1050b#巴黎,梵蒂冈,1##梵蒂冈,芬兰,2#0350b1050b#赫尔辛基,荷兰,1#0350b1050b#阿姆斯特丹,捷克,1##布拉格,克罗地亚,1##萨格勒布,拉脱维亚,2##里加,立陶宛,2##维尔纽斯,列支敦士登,1##瓦杜兹,卢森堡,1#0350b1050b#卢森堡市,罗马尼亚,2##布加勒斯特,马耳他,1##瓦莱塔,马其顿,1##斯科普里,摩尔多瓦,2##基什尼奥夫,摩纳哥,1##摩纳哥市,挪威,1##奥斯陆,葡萄牙,0#0350b1050b#里斯本,瑞典,1#0350b1050b#斯德哥尔摩,瑞士,1##苏黎世,塞尔维亚和黑山,1##贝尔格莱德,圣马力诺,1##圣马力诺,斯洛伐克,1##布拉迪斯拉发,斯洛文尼亚,1##卢布尔雅那,乌克兰东部,3##辛菲罗波尔,乌克兰西部,2##基辅,西班牙,1#0350b1050b#马德里,希腊,2#0350b1050b#雅典,匈牙利,1##布达佩斯,意大利,1#0350b1050b#罗马,英国,0#0350b1050b#伦敦、爱丁堡", "北美洲,格陵兰(丹),-3##努克(戈特霍布),加拿大大西洋时区,-4#0410c1050c#哈利法克斯,加拿大东部时区,-5#0410c1050c#渥太华、蒙特利尔,加拿大纽芬兰时区,-3.5#0410c1050c#纽芬兰、圣约翰斯,加拿大山区时区,-7#0410c1050c#艾伯塔,加拿大太平洋时区,-8#0410c1050c#温哥华,加拿大中央时区,-6#0410c1050c#温尼伯,美国阿拉斯加,-9##朱诺、费尔班克斯,美国东部,-5#0410c1050c#纽约,美国山区,-7#0410c1050c#丹佛,美国西岸,-8#0410c1050c#旧金山、洛杉矶,美国中部,-6#0410c1050c#芝加哥", "中南美洲,阿根廷,-3##布宜诺斯艾利斯,阿鲁巴岛(荷),-4##奥拉涅斯塔德,安提瓜和巴布达,-4##圣约翰,巴巴多斯,-4##布里奇敦,巴哈马,-5##拿骚,巴拉圭,-3#1010d0250d#亚松森,巴拿马,-5##巴拿马市,巴西东部,-3#1010d0250d#里约热内卢、巴西利亚,巴西诺罗纳岛,-2#101
for(i = 0; i < SQv.length; i++){
SQv[i] = SQv[i].split(",");
}
/** 节日类 */
var oba = {
wFtv: new Array('0150I世界麻风日', '0520.国际母亲节', '0530I全国助残日', '0630.父亲节', '0730.被奴役国家周', '0932I国际和平日', '0940.国际聋人节 世界儿童日', '0950I世界海事日', '1011.国际住房日', '1013I国际减轻自然灾害日(减灾日)', '1144I感恩节'),
sFtv: '',
init: function() {
var s = '01#元旦|' + '02I世界湿地日,10.国际气象节,14I情人节|' + '01.国际海豹日,03.全国爱耳日,05.1963-9999学雷锋纪念日,08I妇女节,12I植树节,12.1925-9999孙中山逝世纪念日,14.国际警察日,' + '15I1983-9999消费者权益日,17.中国国医节,17.国际航海日,21.世界森林日,21.消除种族歧视国际日,21.世界儿歌日,22I世界水日,' + '23I世界气象日,24.1982-9999世界防治结核病日,25.全国中小学生安全教育日,30.巴勒斯坦国土日|' + '01I1564-9999愚人节,01.全国爱国卫生运动月(四月),01.税收宣传月(四月),07I世界卫生日,22I世界地球日,23.世界图书和版权日,24.亚非新闻工作者日|' + '01#1889-9999劳动节,04I青年节,05.碘缺乏病防治日,08.世界红十字日,12I国际护士节,15I国际家庭日,17.国际电信日,18.国际博物馆日,' + '20.全国学生营养日,23.国际牛奶日,31I世界无烟日|' + '01I1925-9999国际儿童节,05.世界环境保护日,06.全国爱眼日,17.防治荒漠化和干旱日,23.国际奥林匹克日,25.全国土地日,26I国际禁毒日|' + '01I1997-9999香港回归纪念日,01I1921-9999中共诞辰,01.世界建筑日,02.国际体育记者日,07I1937-9999抗日战争纪念日,11I世界人口日,30.非洲妇女日|' + '01I1927-9999建军节,08.中国男子节(爸爸节)|' + '03I1945-9999抗日战争胜利纪念,08.1966-9999国际扫盲日,08.国际新闻工作者日,09.毛泽东逝世纪念,10I中国教师节,14.世界清洁地球日,' + '16.国际臭氧层保护日,18I九·一八事变纪念日,20.国际爱牙日,27.世界旅游日,28I孔子诞辰|' + '01#1949-9999国庆节,01.世界音乐日,01.国际老人节,02#1949-9999国庆节假日,02.国际和平与民主自由斗争日,03#1949-9999国庆节假日,' + '04.世界动物日,06.老人节,08.全国高血压日,08.世界视觉日,09.世界邮政日,09.万国邮联日,10I辛亥革命纪念日,10.世界精神卫生日,' + '13.世界保健日,13.国际教师节,14.世界标准日,15.国际盲人节(白手杖节),16.世界粮食日,17.世界消除贫困日,22.世界传统医药日,24.联合国日,31.世界勤俭日|' + '07.1917-9999十月社会主义革命纪念日,08.中国记者日,09.全国消防安全宣传教育日,10.世界青年节,11.国际科学与和平周(本日所属的一周),12.孙中山诞辰纪念日,' + '14.世界糖尿病日,17.国际大学生节,17.世界学生节,20.彝族年,21.彝族年,21.世界问候日,21.世界电视日,22.彝族年,29.国际声援巴勒斯坦人民国际日|' + '01I1988-9999世界艾滋病日,03.世界残疾人日,05.国际经济和社会发展志愿人员日,08.国际儿童电视日,09.世界足球日,10.世界人权日,' + '12I西安事变纪念日,13I南京大屠杀(1937年)纪念日,20.澳门回归纪念,21.国际篮球日,24I平安夜,25I圣诞节,26.毛泽东诞辰纪念';
this.sFtv = s.split('|');
for(var i = 0; i < this.sFtv.length; i++)
this.sFtv[i] = this.sFtv[i].split(',');
},
getDayName: function(u, r) {
var m0 = (u.m < 10 ? '0' : '') + u.m;
var d0 = (u.d < 10 ? '0' : '') + u.d;
var i,
s,
s2,
type;
if(u.week == 0 || u.week == 6)
r.Fjia = 1;
for(i = 0; i < this.sFtv[u.m - 1].length; i++) {
s = this.sFtv[u.m - 1][i];
if(s.substr(0, 2) != d0)
continue;
s = s.substr(2, s.length - 2);
type = s.substr(0, 1);
if(s.substr(5, 1) == '-') {
if(u.y < (s.substr(1, 4) - 0) || u.y > (s.substr(6, 4) - 0))
continue;
s = s.substr(10, s.length - 10);
} else {
if(u.y < 1850)
continue;
s = s.substr(1, s.length - 1);
}
if(type == '#')
r.A += s + ' ', r.Fjia = 1;
if(type == 'I')
r.B += s + ' ';
if(type == '.')
r.C += s + ' ';
}
var w = u.weeki;
if(u.week >= u.week0)
w += 1;
var w2 = w;
if(u.weeki == u.weekN - 1)
w2 = 5;
w = m0 + w + u.week;
w2 = m0 + w2 + u.week;
for(i = 0; i < this.wFtv.length; i++) {
s = this.wFtv[i];
s2 = s.substr(0, 4);
if(s2 != w && s2 != w2)
continue;
type = s.substr(4, 1);
s = s.substr(5, s.length - 5);
if(type == '#')
r.A += s + ' ', r.Fjia = 1;
if(type == 'I')
r.B += s + ' ';
if(type == '.')
r.C += s + ' ';
}
},
getHuiLi: function(d0, r) {
var z,
y,
m,
d;
d = d0 + 503105;
z = int2(d / 10631);
d -= z * 10631;
y = int2((d + 0.5) / 354.366);
d -= int2(y * 354.366 + 0.5);
m = int2((d + 0.11) / 29.51);
d -= int2(m * 29.5 + 0.5);
r.Hyear = z * 30 + y + 1;
r.Hmonth = m + 1;
r.Hday = d + 1;
}
};
oba.init();
/** 干支历法类 */
var obb = {
JNB: '',
numCn: new Array('零', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十'),
Gan: new Array("甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸"),
Zhi: new Array("子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"),
ShX: new Array("鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪"),
XiZ: new Array('摩羯', '水瓶', '双鱼', '白羊', '金牛', '双子', '巨蟹', '狮子', '处女', '天秤', '天蝎', '射手'),
yxmc: new Array("朔", "上弦", "望", "下弦"),
jqmc: new Array('冬至', '小寒', '大寒', '立春', '雨水', '惊蛰', '春分', '清明', '谷雨', '立夏', '小满', '芒种', '夏至', '小暑', '大暑', '立秋', '处暑', '白露', '秋分', '寒露', '霜降', '立冬', '小雪', '大雪'),
ymc: new Array('冬', '腊', '正', '二', '三', '四', '五', '六', '七', '八', '九', '十'),
rmc: new Array('初一', '初二', '初三', '初四', '初五', '初六', '初七', '初八', '初九', '初十', '十一', '十二', '十三', '十四', '十五', '十六', '十七', '十八', '十九', '二十', '廿一', '廿二', '廿三', '廿四', '廿五', '廿六', '廿七', '廿八', '廿九', '三十', '卅一'),
gzny: new Array("大海水", "海中金", "炉中火", "大林木", "路旁土", "剑锋金", "山头火", "洞下水", "城墙土", "白腊金", "杨柳木", "泉中水", "屋上土", "霹雷火", "松柏木", "常流水", "沙中金", "山下火", "平地木", "壁上土", "金箔金", "佛灯火", "天河水", "大驿土", "钗钏金", "桑松木", "大溪水", "沙中土", "天上火", "石榴木", "大海水"),
scd: new Array('正', '初'),
TimeK: new Array('初', '一', '二', '三', '四'),
jqjl: new Array('中', '节'),
init: function() {
var i;
var s = '-2069,45,0,夏,禹,,禹,-2024,10,0,夏,启,,启,-2014,25,0,夏,太康,,太康,-1986,14,0,夏,仲康,,仲康,-1972,28,0,夏,相,,相,-1944,2,0,夏,后羿,,后羿,-1942,38,0,夏,寒浞,,寒浞,-1904,21,0,夏,少康,,少康,-1883,17,0,夏,杼,,杼,-1866,26,0,夏,槐,,槐,-1840,18,0,夏,芒,,芒,-1822,16,0,夏,泄,,泄,-1806,59,0,夏,不降,,不降,-1747,21,0,夏,扃,,扃,-1726,21,0,夏,廑,,廑,' + '-1705,31,0,夏,孔甲,,孔甲,-1674,11,0,夏,皋,,皋,-1663,11,0,夏,发,,发,-1652,53,0,夏,桀,,桀,-1599,11,0,商,商太祖,汤,商汤,-1588,1,0,商,商代王,太乙,商代王,-1587,2,0,商,哀王,子胜,外丙,-1585,4,0,商,懿王,子庸,仲壬,-1581,12,0,商,太宗,子至,太甲,-1569,29,0,商,昭王,子绚,沃丁,-1540,25,0,商,宣王,子辩,太庚,-1515,17,0,商,敬王,子高,小甲,-1498,13,0,商,元王,子密,雍己,-1485,75,0,商,中宗,子伷,太戊,-1410,11,0,商,孝成王,子庄,仲丁,' + '-1399,15,0,商,思王,子发,外壬,-1384,9,0,商,前平王,子整,河亶甲,-1375,19,0,商,穆王,子滕,祖乙,-1356,16,0,商,桓王,子旦,祖辛,-1340,5,0,商,僖王,子逾,沃甲,-1335,9,0,商,庄王,子新,祖丁,-1326,6,0,商,顷王,子更,南庚,-1320,7,0,商,悼王,子和,阳甲,-1313,42,0,商,世祖,子旬,盘庚,-1271,21,0,商,章王,子颂,小辛,-1250,1,0,商,惠王,子敛,小乙,-1249,59,0,商,高宗,子昭,武丁,-1190,2,0,商,后平王,子跃,祖庚,-1188,33,0,商,世宗,子载,祖甲,-1155,8,0,商,甲宗,子先,廪辛,' + '-1147,1,0,商,康祖,子嚣,庚丁,-1146,35,0,商,武祖,子瞿,武乙,-1111,11,0,商,匡王,子托,文丁,-1100,26,0,商,德王,子羡,帝乙,-1074,29,0,商,纣王,子寿,帝辛,-1045,4,0,西周,武王,姬发,武王,-1041,22,0,西周,成王,姬诵,成王,-1019,25,0,西周,康王,姬钊,康王,-994,19,0,西周,昭王,姬瑕,昭王,-975,54,0,西周,穆王,姬满,穆王,-921,23,0,西周,共王,姬繄,共王,-898,8,0,西周,懿王,姬囏,懿王,-890,6,0,西周,孝王,姬辟方,孝王,-884,8,0,西周,夷王,姬燮,夷王,-876,36,0,西周,厉王,姬胡,厉王,' + '-840,14,0,西周,厉王,姬胡,共和,-826,46,0,西周,宣王,姬静,宣王,-780,11,0,西周,幽王,姬宫湦,幽王,-769,51,0,东周,平王,姬宜臼,平王,-718,23,0,东周,桓王,姬林,桓王,-695,15,0,东周,庄王,姬佗,庄王,-680,5,0,东周,釐王,姬胡齐,釐王,-675,25,0,东周,惠王,姬阆,惠王,-650,33,0,东周,襄王,姬郑,襄王,-617,6,0,东周,顷王,姬壬臣,顷王,-611,6,0,东周,匡王,姬班,匡王,-605,21,0,东周,定王,姬瑜,定王,-584,14,0,东周,简王,姬夷,简王,-570,27,0,东周,灵王,姬泄心,灵王,-543,24,0,东周,景王,姬贵,景王,' + '-519,1,0,东周,悼王,姬勐,悼王,-518,44,0,东周,敬王,姬匄,敬王,-474,7,0,东周,元王,姬仁,元王,-467,27,0,东周,贞定王,姬介,贞定王,-440,1,0,东周,哀王-思王,姬去疾-姬叔,哀王-思王,-439,15,0,东周,考王,姬嵬,考王,-424,24,0,东周,威烈王,姬午,威烈王,-400,26,0,东周,安王,姬骄,安王,-374,7,0,东周,烈王,姬喜,烈王,-367,48,0,东周,显王,姬扁,显王,-319,6,0,东周,慎靓王,姬定,慎靓王,-313,8,0,东周,赧王,姬延,赧王,-305,56,0,战国-秦,昭襄王,嬴则,昭襄王,-249,1,0,战国-秦,孝文王,嬴柱,孝文王,-248,3,0,战国-秦,庄襄王,嬴子楚,庄襄王,' + '-245,25,0,秦,嬴政,嬴政,嬴政,-220,12,0,秦,始皇帝,嬴政,始皇,-208,3,0,秦,二世皇帝,嬴胡亥,二世,-205,12,0,西汉,高帝,刘邦,高帝,-193,7,0,西汉,惠帝,刘盈,惠帝,-186,8,0,西汉,高后,吕雉,高后,-178,16,0,西汉,文帝,刘恒,文帝,-162,7,0,西汉,文帝,刘恒,后元,-155,7,0,西汉,景帝,刘启,景帝,-148,6,0,西汉,景帝,刘启,中元,-142,3,0,西汉,景帝,刘启,后元,-139,6,0,西汉,武帝,刘彻,建元,-133,6,0,西汉,武帝,刘彻,元光,-127,6,0,西汉,武帝,刘彻,元朔,-121,6,0,西汉,武帝,刘彻,元狩,' + '-115,6,0,西汉,武帝,刘彻,元鼎,-109,6,0,西汉,武帝,刘彻,元封,-103,4,0,西汉,武帝,刘彻,太初,-99,4,0,西汉,武帝,刘彻,天汉,-95,4,0,西汉,武帝,刘彻,太始,-91,4,0,西汉,武帝,刘彻,征和,-87,2,0,西汉,武帝,刘彻,后元,-85,6,0,�
this.JNB = s.split(',');
for(i = 0; i < this.JNB.length; i += 7) {
this.JNB[i] -= 0;
this.JNB[i + 1] -= 0;
this.JNB[i + 2] -= 0;
}
},
getNH: function(y, m) {
var i,
j,
c,
s = '',
ob = this.JNB;
for(i = 0; i < ob.length; i += 7) {
j = ob[i];
if(y < j || y >= j + ob[i + 1]) {
continue;
}
var date = new Date();
if(y >= date.getFullYear() && date.getMonth() + 1 < m) {
c = ob[i + 6] + (y - j + 1 + ob[i + 2]) + '年';
s += (s ? ';' : '') + '[未来]' + ob[i + 4] + ' ' + ob[i + 5] + ' ' + c;
} else if(y > date.getFullYear()) {
c = ob[i + 6] + (y - j + 1 + ob[i + 2]) + '年';
s += (s ? ';' : '') + '[未来]' + ob[i + 4] + ' ' + ob[i + 5] + ' ' + c;
} else {
c = ob[i + 6] + (y - j + 1 + ob[i + 2]) + '年';
s += (s ? ';' : '') + '[' + ob[i + 3] + ']' + ob[i + 4] + ' ' + ob[i + 5] + ' ' + c;
}
}
return s;
},
getDayName: function(u, r) {
var d = u.Lmc + (u.Lmc.length < 2 ? '' : '') + u.Ldc;
if(u.Lleap != '闰') {
if(d == '正月初一')
r.A += '春节 ', r.Fjia = 1;
if(d == '正月初二')
r.B += '大年初二 ', r.Fjia = 1;
if(d == '五月初五')
r.A += '端午节 ', r.Fjia = 1;
if(d == '八月十五')
r.A += '中秋节 ', r.Fjia = 1;
if(d == '正月十五')
r.A += '元宵节 ', r.B += '上元节 ', r.C += '壮族歌墟节 苗族踩山节 达斡尔族卡钦 ';
if(d == '正月十六')
r.C += '侗族芦笙节(至正月二十) ';
if(d == '正月廿五')
r.C += '填仓节 ';
if(d == '正月廿九')
r.C += '送穷日 ';
if(d == '二月初一')
r.C += '瑶族忌鸟节 ';
if(d == '二月初二')
r.B += '春龙节(龙抬头) ', r.C += '畲族会亲节 ';
if(d == '二月初八')
r.C += '傈傈族刀杆节 ';
if(d == '三月初三')
r.B += '北帝诞 ', r.C += '苗族黎族歌墟节 ';
if(d == '三月十五')
r.C += '白族三月街(至三月二十) ';
if(d == '三月廿三')
r.B += '天后诞 妈祖诞 ';
if(d == '四月初八')
r.B += '牛王诞 ';
if(d == '四月十八')
r.C += '锡伯族西迁节 ';
if(d == '五月十三')
r.B += '关帝诞 ', r.C += '阿昌族泼水节 ';
if(d == '五月廿二')
r.C += '鄂温克族米阔鲁节 ';
if(d == '五月廿九')
r.C += '瑶族达努节 ';
if(d == '六月初六')
r.B += '姑姑节 天贶节 ', r.C += '壮族祭田节 瑶族尝新节 ';
if(d == '六月廿四')
r.C += '火把节、星回节(彝、白、佤、阿昌、纳西、基诺族 ) ';
if(d == '七月初七')
r.B += '七夕(中国情人节,乞巧节,女儿节 ) ';
if(d == '七月十三')
r.C += '侗族吃新节 ';
if(d == '七月十五')
r.B += '中元节 鬼节';
if(d == '九月初九')
r.B += '重阳节 ';
if(d == '十月初一')
r.B += '祭祖节(十月朝) ';
if(d == '十月十五')
r.B += '下元节 ';
if(d == '十月十六')
r.C += '瑶族盘王节 ';
if(d == '十二初八')
r.B += '腊八节 ';
}
if(u.Lmc2 == '正') {
if(d == '腊月三十' && u.Ldn == 30)
r.A += '除夕 ', r.Fjia = 1;
if(d == '腊月廿九' && u.Ldn == 29)
r.A += '除夕 ', r.Fjia = 1;
if(d == '腊月廿三')
r.B += '小年 ';
}
if(u.Ljq) {
if(u.Ljq == "清明")
r.A += u.Ljq + ' ', r.Fjia = 1;
else
r.B += u.Ljq + ' ';
}
var w,
w2;
if(u.cur_dz >= 0 && u.cur_dz < 81) {
w = obb.numCn[Math.floor(u.cur_dz / 9) + 1];
if(u.cur_dz % 9 == 0)
r.B += '『' + w + '九』 ';
else
r.C += w + '九第' + (u.cur_dz % 9 + 1) + '天 ';
}
w = u.Lday2.substr(0, 1);
w2 = u.Lday2.substr(1, 1);
if(u.cur_xz >= 20 && u.cur_xz < 30 && w == '')
r.B += '初伏 ';
if(u.cur_xz >= 30 && u.cur_xz < 40 && w == '')
r.B += '中伏 ';
if(u.cur_lq >= 0 && u.cur_lq < 10 && w == '')
r.B += '末伏 ';
if(u.cur_mz >= 0 && u.cur_mz < 10 && w == '')
r.B += '入梅 ';
if(u.cur_xs >= 0 && u.cur_xs < 12 && w2 == '')
r.B += '出梅 ';
},
mingLiBaZi: function(jd, J, ob) {
var i,
c,
v;
var jd2 = jd + dt_T(jd);
var w = XL.S_aLon(jd2 / 36525, -1);
var k = int2((w / pi2 * 360 + 45 + 15 * 360) / 30);
jd += pty_zty2(jd2 / 36525) + J / Math.PI / 2;
ob.bz_zty = JD.timeStr(jd);
jd += 13 / 24;
var D = Math.floor(jd),
SC = int2((jd - D) * 12);
v = int2(k / 12 + 6000000);
ob.bz_jn = this.Gan[v % 10] + this.Zhi[v % 12];
ob.bz_jnny = this.gzny[Math.round((((60 + (v + 1) % 60) % 60) / 2), 0)];
v = k + 2 + 60000000;
ob.bz_jy = this.Gan[v % 10] + this.Zhi[v % 12];
ob.bz_jyny = this.gzny[Math.round((((60 + (v + 1) % 60) % 60) / 2), 0)];
v = D - 6 + 9000000;
ob.bz_jr = this.Gan[v % 10] + this.Zhi[v % 12];
ob.bz_jrny = this.gzny[Math.round((((60 + (v + 1) % 60) % 60) / 2), 0)];
v = (D - 1) * 12 + 90000000 + SC;
ob.bz_js = this.Gan[v % 10] + this.Zhi[v % 12];
ob.bz_jsny = this.gzny[Math.round((((60 + (v + 1) % 60) % 60) / 2), 0)];
v -= SC,
ob.bz_JS = '';
for(i = 0; i < 13; i++) {
c = this.Gan[(v + i) % 10] + this.Zhi[(v + i) % 12];
if(SC == i)
ob.bz_js = c, c = '<font color=red>' + c + '</font>', ob.ny = this.gzny[Math.round((((60 + (v + i + 1) % 60) % 60) / 2), 0)];
ob.bz_JS += (i ? ' ' : '') + c;
}
},
qi_accurate: function(W) {
var t = XL.S_aLon_t(W) * 36525;
return t - dt_T(t) + 8 / 24;
},
so_accurate: function(W) {
var t = XL.MS_aLon_t(W) * 36525;
return t - dt_T(t) + 8 / 24;
},
qi_accurate2: function(jd) {
var d = Math.PI / 12;
var w = Math.floor((jd + 293) / 365.2422 * 24) * d;
var a = this.qi_accurate(w);
if(a - jd > 5) {
return this.qi_accurate(w - d);
}
if(a - jd < -5) {
return this.qi_accurate(w + d);
}
return a;
},
so_accurate2: function(jd) {
return this.so_accurate(Math.floor((jd + 8) / 29.5306) * Math.PI * 2);
}
};
obb.init();
/** 气朔类 */
var SSQ = {
SB: '',
QB: '',
suoKB: new Array(1457698.231017, 29.53067166, 1546082.512234, 29.53085106, 1640640.735300, 29.53060000, 1642472.151543, 29.53085439, 1683430.509300, 29.53086148, 1752148.041079, 29.53085097, 1807724.481520, 29.53059851, 1883618.114100, 29.53060000, 1907360.704700, 29.53060000, 1936596.224900, 29.53060000, 1939135.675300, 29.53060000, 1947168.00),
qiKB: new Array(1640650.479938, 15.21842500, 1642476.703182, 15.21874996, 1683430.515601, 15.218750011, 1752157.640664, 15.218749978, 1807675.003759, 15.218620279, 1883627.765182, 15.218612292, 1907369.128100, 15.218449176, 1936603.140413, 15.218425000, 1939145.524180, 15.218466998, 1947180.798300, 15.218524844, 1964362.041824, 15.218533526, 1987372.340971, 15.218513908, 1999653.819126, 15.218530782, 2007445.469786, 15.218535181, 2021324.917146, 15.218526248, 2047257.232342, 15.218519654, 2070282.898213, 15.218425000, 2073204.872850, 15.218515221, 2080144.500926, 15.218530782, 2086703.688963, 15.218523776, 2110033.182763, 15.218425000, 2111190.300888, 15.218425000, 2113731.271005, 15.218515671, 2120670.840263, 15.218425000, 2123973.309063, 15.218425000, 2125068.997336, 15.218477932, 2136026.312633, 15.218472436, 2156099.495538, 15.218425000, 2159021.324663, 15.218425000, 2162308.575254, 15.218461742, 2178485.706538, 15.218425000, 2178759.662849, 15.218445786, 2185334.020800, 15.218425000, 2187525.481425, 15.218425000, 2188621.191481, 15.218437494, 2322147.76),
so_low: function(W) {
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) {
var t,
L,
v = 628.3319653318;
t = (W - 4.895062166) / v;
t -= (53 * t * t + 334116 * Math.cos(4.67 + 628.307585 * t) + 2061 * Math.cos(2.678 + 628.3076 * t) * t) / v / 10000000;
L = 48950621.66 + 6283319653.318 * t + 53 * t * t + 334166 * Math.cos(4.669257 + 628.307585 * t) + 3489 * Math.cos(4.6261 + 1256.61517 * t) + 2060.6 * Math.cos(2.67823 + 628.307585 * t) * t - 994 - 834 * Math.sin(2.1824 - 33.75705 * t);
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 - dt_T(t) + 8 / 24;
var v = ((t + 0.5) % 1) * 86400;
if(v < 1200 || v > 86400 - 1200)
t = XL.S_aLon_t(W) * 36525 - dt_T(t) + 8 / 24;
return t;
},
so_high: function(W) {
var t = XL.MS_aLon_t2(W) * 36525;
t = t - dt_T(t) + 8 / 24;
var v = ((t + 0.5) % 1) * 86400;
if(v < 1800 || v > 86400 - 1800)
t = XL.MS_aLon_t(W) * 36525 - dt_T(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;
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";
qiS = "FrcFs22AFsckF2tsDtFqEtF1posFdFgiFseFtmelpsEfhkF2anmelpFlF1ikrotcnEqEq2FfqmcDsrFor22FgFrcgDscFs22FgEe";
qiS += "FtE2sfFs22sCoEsaF2tsD1FpeE2eFsssEciFsFnmelpFcFhkF2tcnEqEpFgkrotcnEqrEtFermcDsrE222FgBmcmr22DaEfnaF22";
qiS += "2sD1FpeForeF2tssEfiFpEoeFssD1iFstEqFppDgFstcnEqEpFg11FscnEqrAoAF2ClAEsDmDtCtBaDlAFbAEpAAAAAD2FgBiBqo";
qiS += "BbnBaBoAAAAAAAEgDqAdBqAFrBaBoACdAAf1AACgAAAeBbCamDgEifAE2AABa1C1BgFdiAAACoCeE1ADiEifDaAEqAAFe1AcFbcA";
qiS += "AAAAF1iFaAAACpACmFmAAAAAAAACrDaAAADG0";
this.SB = this.jieya(suoS);
this.QB = this.jieya(qiS);
},
calc: function(jd, qs) {
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) {
if(qs == '气')
return Math.floor(this.qi_high(Math.floor((jd + pc - 2451259) / 365.2422 * 24) * Math.PI / 12) + 0.5);
else
return Math.floor(this.so_high(Math.floor((jd + pc - 2451551) / 29.5306) * Math.PI * 2) + 0.5);
}
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++;
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);
n = this.QB.substr(Math.floor((jd - f2) / 365.2422 * 24), 1);
} else {
D = Math.floor(this.so_low(Math.floor((jd + pc - 2451551) / 29.5306) * Math.PI * 2) + 0.5);
n = this.SB.substr(Math.floor((jd - f2) / 29.5306), 1);
}
if(n == "1") {
return D + 1;
}
if(n == "2") {
return D - 1;
}
return D;
}
},
leap: 0,
ym: new Array(),
ZQ: new Array(),
HS: new Array(),
dx: new Array(),
Yn: new Array(),
calcY: function(jd) {
var A = this.ZQ,
B = this.HS;
var i,
W,
w;
W = int2((jd - 355 + 183) / 365.2422) * 365.2422 + 355;
if(this.calc(W, '气') > jd)
W -= 365.2422;
for(i = 0; i < 25; i++)
A[i] = this.calc(W + 15.2184 * i, '气');
A.pe1 = this.calc(W - 15.2, '气');
A.pe2 = this.calc(W - 30.4, '气');
w = this.calc(A[0], '朔');
if(w > A[0])
w -= 29.53;
for(i = 0; i < 15; i++)
B[i] = this.calc(w + 29.5306 * i, '朔');
this.leap = 0;
for(i = 0; i < 14; i++) {
this.dx[i] = this.HS[i + 1] - this.HS[i];
this.ym[i] = i;
}
var YY = int2((this.ZQ[0] + 10 + 180) / 365.2422) + 2000;
if(YY >= -721 && YY <= -104) {
var ns = new Array(),
yy;
for(i = 0; i < 3; i++) {
yy = YY + i - 1;
if(yy >= -721)
ns[i] = this.calc(1457698 - J2000 + int2(0.342 + (yy + 721) * 12.368422) * 29.5306, '朔'), ns[i + 3] = '十三', ns[i + 6] = 2;
if(yy >= -479)
ns[i] = this.calc(1546083 - J2000 + int2(0.500 + (yy + 479) * 12.368422) * 29.5306, '朔'), ns[i + 3] = '十三', ns[i + 6] = 2;
if(yy >= -220)
ns[i] = this.calc(1640641 - J2000 + int2(0.866 + (yy + 220) * 12.369000) * 29.5306, '朔'), ns[i + 3] = '后九', ns[i + 6] = 11;
}
var nn,
f1;
for(i = 0; i < 14; i++) {
for(nn = 2; nn >= 0; nn--)
if(this.HS[i] >= ns[nn])
break;
f1 = int2((this.HS[i] - ns[nn] + 15) / 29.5306);
if(f1 < 12)
this.ym[i] = obb.ymc[(f1 + ns[nn + 6]) % 12];
else
this.ym[i] = ns[nn + 3];
}
return;
}
if(B[13] <= A[24]) {
for(i = 1; B[i + 1] > A[2 * i] && i < 13; i++);
this.leap = i;
for(; i < 14; i++)
this.ym[i]--;
}
for(i = 0; i < 14; i++) {
var Dm = this.HS[i] + J2000,
v2 = this.ym[i];
var mc = obb.ymc[v2 % 12];
if(Dm >= 1724360 && Dm <= 1729794)
mc = obb.ymc[(v2 + 1) % 12];
else if(Dm >= 1807724 && Dm <= 1808699)
mc = obb.ymc[(v2 + 1) % 12];
else if(Dm >= 1999349 && Dm <= 1999467)
mc = obb.ymc[(v2 + 2) % 12];
else if(Dm >= 1973067 && Dm <= 1977052) {
if(v2 % 12 == 0)
mc = "正";
if(v2 == 2)
mc = '一';
}
if(Dm == 1729794 || Dm == 1808699)
mc = '拾贰';
this.ym[i] = mc;
}
}
};
SSQ.init();
var tu1 = {
isInit: 0,
x0: 0,
y0: 0,
w: 0,
h: 0,
dx: 0,
dy: 0,
diming: new Array(116.4, 40, '北京', 119, 25.4, '莆田', 91, 29.7, '拉萨', -73, 41, '纽约', 151, -34, '悉尼', 37, 56, '莫斯科', 30, -20, '非洲南部', -56, -33, '乌拉圭'),
rsph: [],
init: ht_init,
showzb: function() {
var i,
c,
x,
y;
var dx = this.dx = int2(this.w / 8.5);
var dy = this.dy = int2(this.h / 8.0);
var x0 = this.x0 = int2((this.w - dx * 8) / 2);
var y0 = this.y0 = int2(dy * 6) + 3;
this.vs = dx,
this.vx = x0 + 4 * dx,
this.vy = y0 - 3 * dy;
this.can.height = this.can.height;
this.ctx.beginPath();
this.ctx.fillStyle = '#D0D0D0';
for(i = 0; i < ditu0.length; i += 2) {
if(ditu0[i] == 1e7)
i++, c = 1;
else
c = 0;
x = x0 + 8 * dx * ditu0[i] / 2009;
y = y0 - 6 * dy * (1 - ditu0[i + 1] / 970);
if(c)
this.ctx.moveTo(x, y);
else
this.ctx.lineTo(x, y);
}
this.ctx.fill();
this.ctx.beginPath();
this.ctx.strokeStyle = "#00FF00";
for(i = 0; i <= 6; i++) {
c = y0 - i * dy + 0.5;
this.ctx.moveTo(x0, c);
this.ctx.lineTo(x0 + dx * 8, c);
if(i)
ht_text(this.ctx, x0 + 2, c, 15 * i + '(' + (i > 3 ? '+' : '') + 30 * (i - 3) + ')', '#000000', '12px 宋体');
}
for(i = 0; i <= 8; i++) {
c = x0 + i * dx + 0.5;
this.ctx.moveTo(c, y0);
this.ctx.lineTo(c, y0 - dy * 6);
if(i > 0 && i < 8)
ht_text(this.ctx, c - 10, y0, 30 * (i - 4) + '(' + (i <= 4 ? 45 * i : 45 * i - 360) + ')', '#000000', '12px 宋体');
}
this.ctx.stroke();
for(i = 0; i < this.diming.length; i += 3) {
var J = this.diming[i];
if(J < 0)
J += 360;
var W = this.diming[i + 1];
J = J / 45,
W = W / 30 + 3;
J = x0 + dx * J - 5;
W = y0 - dy * W - 8;
ht_text(this.ctx, J, W, '·' + this.diming[i + 2], '#000000', '12px 宋体');
}
},
draw1: function(sm, J, W, bei) {
var col = sm == 'sun' ? '#FF0000' : '#B0A070';
if(bei)
J = J - Math.PI;
J = rad2rrad(J);
W = W * 180 / Math.PI / 15;
J = J * 180 / Math.PI / 30 + 4;
ht_oval2(this.ctx, this.x0 + J * this.dx, this.y0 - W * this.dy, 4, col);
},
draw1b: function(sm, J, W, gst) {
var col = sm == 'sun' ? '#FF0000' : '#B0A070';
W = W * 180 / Math.PI / 30 + 3;
J = rad2mrad(J - gst) * 180 / Math.PI / 45;
ht_oval2(this.ctx, this.x0 + J * this.dx, this.y0 - W * this.dy, 4, col);
},
draw2a: function(J1, W1, J2, W2, mr, sr) {
var dJ = -rad2rrad(J1 - J2),
dW = W1 - W2,
v = this.vs;
dJ *= Math.cos((W1 + W2) / 2) * rad,
dW *= rad;
dJ = v / 32 * dJ / 60,
dW = v / 32 * dW / 60;
sr = v / 32 * sr / 60,
mr = v / 32 * mr / 60;
if(Math.abs(dJ) > 3.5 * this.dx || Math.abs(dW) > 2.5 * this.dy)
return;
ht_oval2(this.ctx, this.vx, this.vy, sr, '#FF0000');
ht_oval2(this.ctx, this.vx + dJ, this.vy - dW, mr, '#A0A000');
},
draw2b: function(J1, W1, J2, W2, mr, er, Er) {
var dJ = -rad2rrad(J1 - J2),
dW = W1 - W2,
v = this.vs / 2;
dJ *= Math.cos((W1 + W2) / 2) * rad,
dW *= rad;
dJ = v / 32 * dJ / 60,
dW = v / 32 * dW / 60;
er = v / 32 * er / 60,
Er = v / 32 * Er / 60,
mr = v / 32 * mr / 60;
if(Math.abs(dJ) > 3.5 * this.dx || Math.abs(dW) > 2.5 * this.dy)
return;
ht_oval2(this.ctx, this.vx + dJ, this.vy - dW, mr, '#A0A000');
ht_oval2(this.ctx, this.vx, this.vy, Er, 'rgba(0,0,0,0.2)');
ht_oval2(this.ctx, this.vx, this.vy, er, 'rgba(0,0,0,0.4)');
},
draw3: function(J, W, bl) {
var i,
ph = this.rsph;
if(!bl)
ph.length = 0;
if(Math.abs(J) <= Math.PI * 2 || Math.abs(W) <= Math.PI) {
J = rad2mrad(J) / Math.PI * 180 / 45;
W = W / Math.PI * 180 / 30 + 3;
J = this.x0 + this.dx * J - 3;
W = this.y0 - this.dy * W;
ph[ph.length] = J,
ph[ph.length] = W;
}
this.ctx.beginPath();
this.ctx.strokeStyle = '#FF0000';
for(i = 0; i < ph.length; i += 2) {
J = ph[i],
W = ph[i + 1];
this.ctx.moveTo(J, W);
this.ctx.lineTo(J - 3, W + 8);
this.ctx.lineTo(J + 3, W + 8);
this.ctx.lineTo(J, W);
}
this.ctx.stroke();
this.ctx.closePath();
}
};
var tu2 = {
isInit: 0,
eR: 140,
x0: 240,
y0: 210,
init: ht_init,
line1: function(as, hd) {
var i,
a,
js,
xc,
yc;
var R = this.eR,
R2 = this.eR * 1.2;
this.can.height = this.can.height;
ht_oval1(this.ctx, this.x0, this.y0, R, '#000000');
ht_line(this.ctx, this.x0 - R2, this.y0, this.x0 + R2, this.y0, '#000000');
ht_line(this.ctx, this.x0, this.y0 + R2, this.x0, this.y0 - R2, '#000000');
for(i = 0; i < as.length; i++) {
a = as[i];
xc = a.xc,
yc = a.yc,
k = a.k;
if(a.d > 1.6)
continue;
if(hd) {
var r = sqrt(xc * xc + yc * yc);
var s = atan2(yc, xc) + a.ds,
dk = tan(a.ds);
xc = r * cos(s);
yc = r * sin(s);
k = (k + dk) / (1 - k * dk);
ht_text(this.ctx, 400, 210, "贝黄交线", "#FF0000", '20px 宋体');
} else {
js = Math.PI / 2 - a.I[1];
ht_oval2(this.ctx, this.x0, this.y0 - R * cos(js), 3, js > 0 ? '#00a0ff' : '#000000');
ht_text(this.ctx, 400, 210, "贝赤交线", "#FF0000", '20px 宋体');
}
ht_text(this.ctx, 10, 30, "影轴-贝塞尔交线", "#FF0000", '16px 宋体');
ht_line(this.ctx, this.x0 - R2, this.y0 - (k * (-1.2 - xc) + yc) * R, this.x0 + R2, this.y0 - (k * (1.2 - xc) + yc) * R, '#000000');
}
}
};
var tu3 = {
isInit: 0,
eR: 250,
x0: 350,
y0: 260,
init: ht_init,
lineArr: function(d, color) {
var c,
x,
y;
d = touY.lineArr(d);
this.ctx.beginPath();
this.ctx.strokeStyle = color;
for(var i = 0; i < d.length; i += 2) {
if(d[i] == 1e7)
i++, c = 1;
else
c = 0;
x = this.x0 + this.eR * d[i];
y = this.y0 - this.eR * d[i + 1];
if(c)
this.ctx.moveTo(x, y);
else
this.ctx.lineTo(x, y);
}
this.ctx.stroke();
},
drawJWQ: function(n, m) {
var i,
k,
a = new Array(),
N = 96,
pi = Math.PI;
for(k = 0; k < m; k++) {
for(i = 0, f = 0; i <= N; i++)
a[2 * i] = i * pi2 / N, a[2 * i + 1] = (k + 1) * pi / (m + 1) - pi_2;
this.lineArr(a, '#E0E0E0');
}
for(k = 0; k < n; k++) {
for(i = 0, f = 0; i <= N; i++)
a[2 * i] = k * pi2 / n, a[2 * i + 1] = i * pi / N - pi_2;
this.lineArr(a, '#E0E0E0');
}
},
lineNN: function(p1, n1, p2, n2, color) {
if(!p1.length || !p2.length)
return;
if(n1 == -1)
n1 = p1.length - 2;
if(n2 == -1)
n2 = p2.length - 2;
this.lineArr([p1[n1], p1[n1 + 1], p2[n2], p2[n2 + 1]], color);
},
draw: function(F, J0, W0, eR, jb, tylx) {
var col1 = '#FF6060',
col2 = '#80F080',
n;
touY.setlx(tylx, J0, W0, jb);
this.x0 = eR * 2.2 / 2;
this.y0 = eR * 2.2 / 2;
this.can.width = eR * 2.2;
this.can.height = eR * 2.2;
eR /= jb[2];
this.eR = eR;
this.lineArr(ditu1, '#808080');
this.lineArr(ditu2, '#D0D0FF');
this.drawJWQ(24, 11);
this.lineArr(F.p1, col1);
this.lineArr(F.p2, col1);
this.lineArr(F.p3, col1);
this.lineArr(F.p4, col1);
n = F.p1.length - 2;
this.lineNN(F.p1, 0, F.p2, 0, col1);
this.lineNN(F.p1, n, F.p2, n, col1);
n = F.p3.length - 2;
this.lineNN(F.p3, 0, F.p4, 0, col1);
this.lineNN(F.p3, n, F.p4, n, col1);
this.lineArr(F.q1, col1);
this.lineArr(F.q2, col1);
this.lineArr(F.q3, col1);
this.lineArr(F.q4, col1);
this.lineArr(F.L0, col1);
this.lineArr(F.L1, col1);
this.lineArr(F.L2, col1);
this.lineArr(F.L3, col1);
this.lineArr(F.L4, col1);
this.lineArr(F.L5, col2);
this.lineArr(F.L6, col2);
if(!(tylx == 3 || tylx == 4 || tylx == 5 || tylx == 6 || jb[2] < 1 || jb[3] < 1))
ht_oval1(this.ctx, this.x0, this.y0, this.eR, '#000000');
},
draw2: function(F) {
this.lineArr(F.p3, '#8080F0');
this.lineArr(F.p1, '#000000');
this.lineArr(F.p2, '#000000');
}
};
/** 格式化日期 */
Date.prototype.toLocaleString2 = function() {
return this.getFullYear() + "-" + (this.getMonth() + 1) + "-" + this.getDate() + " " + this.getHours() + ":" + this.getMinutes() + ":" + this.getSeconds();
};
/** 天文纪年转公历纪元年 */
function year2Ayear(c) {
var y = String(c).replace(/[^0-9Bb\*-]/g, '');
var q = y.substr(0, 1);
if(q == 'B' || q == 'b' || q == '*') {
y = 1 - y.substr(1, y.length);
if(y > 0) {
alert('通用纪法的公元前纪法从B.C.1年开始。并且没有公元0年');
return 1;
}
} else
y -= 0;
if(y < -4712)
alert('超过B.C.4713不准');
if(y > 9999)
alert('超过9999年的农历计算很不准。');
return y;
}
/** 公历纪元年转天文纪年 */
function Ayear2year(y) {
y -= 0;
if(y <= 0){
return 'BC' + (-y + 1);
}
return 'AD' + y;
}
/** 时间字符串(HH:mm:ss)转时数 */
function timeStr2hour(s) {
var a,
b,
c;
s = String(s).replace(/[^0-9:\.]/g, '');
s = s.split(':');
if(s.length == 1)
a = s[0].substr(0, 2) - 0, b = s[0].substr(2, 2) - 0, c = s[0].substr(4, 2) - 0;
else if(s.length == 2)
a = s[0] - 0, b = s[1] - 0, c = 0;
else
a = s[0] - 0, b = s[1] - 0, c = s[2] - 0;
return a + b / 60 + c / 3600;
}
/** 将大洲、地区显示到页面 */
function addOp(sel, v, t) {
var Op = document.createElement("OPTION");
Op.value = v;
Op.text = t;
sel.add(Op);
}
/** 将m四舍五入 */
Number.prototype.toFixed = function(m) {
var n = this,
f = '',
p = Math.pow(10, m);
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);
else
b = '';
return f + a + b;
};
function int2(v) {
return Math.floor(v);
}
function mod2(v, n) {
return(v % n + n) % n;
}
function sqrt(x) {
return Math.sqrt(x);
}
function floor(x) {
return Math.floor(x);
}
function abs(x) {
return Math.abs(x);
}
function sin(x) {
return Math.sin(x);
}
function cos(x) {
return Math.cos(x);
}
function tan(x) {
return Math.tan(x);
}
function asin(x) {
return Math.asin(x);
}
function acos(x) {
return Math.acos(x);
}
function atan(x) {
return Math.atan(x);
}
function atan2(y, x) {
return Math.atan2(y, x);
}
function rad2strE(d, tim, ext) {
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);
var Q = Math.pow(10, ext);
d = Math.floor((d - c) * Q + 0.5);
if(d >= Q)
d -= Q, c++;
if(c >= 60)
c -= 60, b++;
if(b >= 60)
b -= 60, a++;
a = " " + a,
b = "0" + b,
c = "0" + c,
d = "00000" + d;
s += a.substr(a.length - 3, 3) + w1;
s += b.substr(b.length - 2, 2) + w2;
s += c.substr(c.length - 2, 2);
if(ext)
s += "." + d.substr(d.length - ext, ext) + w3;
return s;
}
function rad2str(d, tim) {
return rad2strE(d, tim, 2);
}
function rad2str2(d) {
var s = "+";
var w1 = "°",
w2 = "'";
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) {
var gn = '';
if(v < 0)
v = -v, gn = '-';
var f = Math.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 str2rad(s, f) {
var fh = 1;
f = f ? 15 : 1;
if(s.indexOf('-') != -1)
fh = -1;
s = s.replace(/h|m|s|(-)|(°)|\'|\"/g, ' ');
s = s.replace(/ +/g, ' ');
s = s.replace(/(^\s*)|(\s*$)/g, '');
s = s.split(' ');
return fh * (s[0] * 3600 + s[1] * 60 + s[2] * 1) / rad * f;
}
function rad2mrad(v) {
v = v % (2 * Math.PI);
if(v < 0) {
return v + 2 * Math.PI;
}
return v;
}
/** 对超过0-2PI的角度转为0-2PI */
function rad2rrad(v) {
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) {
var c = a / b;
c -= Math.floor(c);
if(c > 0.5)
c -= 1;
return c * b;
}
function llr2xyz(JW) {
var r = new Array(),
J = JW[0],
W = JW[1],
R = JW[2];
r[0] = R * cos(W) * cos(J);
r[1] = R * cos(W) * sin(J);
r[2] = R * sin(W);
return r;
}
function xyz2llr(xyz) {
var r = new Array(),
x = xyz[0],
y = xyz[1],
z = xyz[2];
r[2] = sqrt(x * x + y * y + z * z);
r[1] = asin(z / r[2]);
r[0] = rad2mrad(atan2(y, x));
return r;
}
function llrConv(JW, 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 CD2DP(z, L, fa, gst) {
var a = new Array(z[0] + Math.PI / 2 - gst - L, z[1], z[2]);
a = llrConv(a, Math.PI / 2 - fa);
a[0] = rad2mrad(Math.PI / 2 - a[0]);
return a;
}
function j1_j2(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));
}
function h2g(z, a) {
a = llr2xyz(a);
z = llr2xyz(z);
z[0] -= a[0];
z[1] -= a[1];
z[2] -= a[2];
return xyz2llr(z);
}
function shiChaJ(gst, L, fa, J, W) {
var H = gst + L - J;
return rad2mrad(atan2(sin(H), tan(fa) * cos(W) - sin(W) * cos(H)));
}
/** 二次曲线外推 */
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];
if(y >= y0) {
var jsd = 31;
if(y > y0 + 100)
return dt_ext(y, jsd);
var v = dt_ext(y, jsd);
var dv = dt_ext(y0, jsd) - t0;
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;
}
/** 计算世界时TD-原子时UT(单位:日) */
function dt_T(t) {
return dt_calc(t / 365.2425 + 2000) / 86400.0;
}
function prece(t, sc, mx) {
var i,
tn = 1,
c = 0,
p,
n;
if(mx == 'IAU1976')
n = 4, p = preceTab_IAU1976;
if(mx == 'IAU2000')
n = 6, p = preceTab_IAU2000;
if(mx == 'P03')
n = 6, p = preceTab_P03;
sc = String("fi w P Q E x pi II p th Z z ").indexOf(sc + ' ') / 3;
for(i = 0; i < n; i++, tn *= t)
c += p[sc * n + i] * tn;
return c / rad;
}
/** 返回黄赤交角(常规精度),短期精度很高 */
function hcjj(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 CDllr_J2D(t, llr, mx) {
var Z = prece(t, 'Z', mx) + llr[0];
var z = prece(t, 'z', mx);
var th = prece(t, 'th', mx);
var cosW = cos(llr[1]),
cosH = cos(th);
var sinW = sin(llr[1]),
sinH = sin(th);
var A = cosW * sin(Z);
var B = cosH * cosW * cos(Z) - sinH * sinW;
var C = sinH * cosW * cos(Z) + cosH * sinW;
return new Array(rad2mrad(atan2(A, B) + z), asin(C), llr[2]);
}
function CDllr_D2J(t, llr, mx) {
var Z = -prece(t, 'z', mx) + llr[0];
var z = -prece(t, 'Z', mx);
var th = -prece(t, 'th', mx);
var cosW = cos(llr[1]),
cosH = cos(th);
var sinW = sin(llr[1]),
sinH = sin(th);
var A = cosW * sin(Z);
var B = cosH * cosW * cos(Z) - sinH * sinW;
var C = sinH * cosW * cos(Z) + cosH * sinW;
return new Array(rad2mrad(atan2(A, B) + z), asin(C), llr[2]);
}
function HDllr_J2D(t, llr, mx) {
var r = new Array(llr[0], llr[1], llr[2]);
r[0] += prece(t, 'fi', mx);
r = llrConv(r, prece(t, 'w', mx));
r[0] -= prece(t, 'x', mx);
r = llrConv(r, -prece(t, 'E', mx));
return r;
}
function HDllr_D2J(t, llr, mx) {
var r = new Array(llr[0], llr[1], llr[2]);
r = llrConv(r, prece(t, 'E', mx));
r[0] += prece(t, 'x', mx);
r = llrConv(r, -prece(t, 'w', mx));
r[0] -= prece(t, 'fi', mx);
r[0] = rad2mrad(r[0]);
return r;
}
function nutation(t, zq) {
var t2 = t * t,
t3 = t2 * t,
t4 = t3 * t;
var l = 485868.249036 + 1717915923.2178 * t + 31.8792 * t2 + 0.051635 * t3 - 0.00024470 * t4;
var l1 = 1287104.79305 + 129596581.0481 * t - 0.5532 * t2 + 0.000136 * t3 - 0.00001149 * t4;
var F = 335779.526232 + 1739527262.8478 * t - 12.7512 * t2 - 0.001037 * t3 + 0.00000417 * t4;
var D = 1072260.70369 + 1602961601.2090 * t - 6.3706 * t2 + 0.006593 * t3 - 0.00003169 * t4;
var Om = 450160.398036 - 6962890.5431 * t + 7.4722 * t2 + 0.007702 * t3 - 0.00005939 * t4;
var i,
dL = 0,
dE = 0,
c;
var B = nuTab,
q;
for(i = 0; i < 77 * 11; i += 11) {
c = (B[i] * l + B[i + 1] * l1 + B[i + 2] * F + B[i + 3] * D + B[i + 4] * Om) / rad;
if(zq) {
q = 36526 * 2 * Math.PI * rad / (1717915923.2178 * B[i] + 129596581.0481 * B[i + 1] + 1739527262.8478 * B[i + 2] + 1602961601.2090 * B[i + 3] + 6962890.5431 * B[i + 4]);
if(q < zq)
continue;
}
dL += (B[i + 5] + B[i + 6] * t) * Math.sin(c) + B[i + 7] * Math.cos(c);
dE += (B[i + 8] + B[i + 9] * t) * Math.cos(c) + B[i + 10] * Math.sin(c);
}
return new Array(dL /= 10000000 * rad, dE /= 10000000 * rad);
}
function CDnutation(z, E, dL, dE) {
var r = new Array(z[0], z[1], z[2]);
r[0] += (cos(E) + sin(E) * sin(z[0]) * tan(z[1])) * dL - cos(z[0]) * tan(z[1]) * dE;
r[1] += sin(E) * cos(z[0]) * dL + sin(z[0]) * dE;
r[0] = rad2mrad(r[0]);
return r;
}
function nutation2(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);
}
return [dL / 100 / rad, dE / 100 / rad];
}
/** 只计算黄经章动 */
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;
}
function MQC(h) {
return 0.0002967 / Math.tan(h + 0.003138 / (h + 0.08919));
}
function MQC2(ho) {
return -0.0002909 / Math.tan(ho + 0.002227 / (ho + 0.07679));
}
function parallax(z, H, fa, high) {
var dw = 1;
if(z[2] < 500)
dw = cs_AU;
z[2] *= dw;
var r0,
x0,
y0,
z0,
f = cs_ba,
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);
var s = llr2xyz(z);
s[0] -= x0,
s[1] -= y0,
s[2] -= z0;
s = xyz2llr(s);
z[0] = s[0],
z[1] = s[1],
z[2] = s[2] / dw;
}
/** 行星计算 */
function XL0_calc(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];
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;
}
function pluto_coord(t) {
var i,
j,
c0 = Math.PI / 180 / 100000;
var x = -1 + 2 * (t * 36525 + 1825394.5) / 2185000;
var T = t / 100000000;
var r = new Array(0, 0, 0);
for(i = 0; i < 9; i++) {
var ob = XL0Pluto[i],
N = ob.length,
v = 0;
for(j = 0; j < N; j += 3)
v += ob[j] * Math.sin(ob[j + 1] * T + ob[j + 2] * c0);
if(i % 3 == 1)
v *= x;
if(i % 3 == 2)
v *= x * x;
r[Math.floor(i / 3)] += v / 100000000;
}
r[0] += 9.922274 + 0.154154 * x;
r[1] += 10.016090 + 0.064073 * x;
r[2] += -3.947474 - 0.042746 * x;
return r;
}
function p_coord(xt, t, n1, n2, n3) {
var z = new Array();
if(xt < 8) {
z[0] = XL0_calc(xt, 0, t, n1);
z[1] = XL0_calc(xt, 1, t, n2);
z[2] = XL0_calc(xt, 2, t, n3);
}
if(xt == 8) {
z = pluto_coord(t);
z = xyz2llr(z);
z = HDllr_J2D(t, z, 'P03');
}
if(xt == 9) {
z[0] = 0,
z[1] = 0,
z[2] = 0;
}
return z;
}
function e_coord(t, n1, n2, n3) {
var re = new Array();
re[0] = XL0_calc(0, 0, t, n1);
re[1] = XL0_calc(0, 1, t, n2);
re[2] = XL0_calc(0, 2, t, n3);
return re;
}
/** 月亮行星计算 */
function XL1_calc(zn, t, n) {
var ob = XL1[zn];
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(zn == 0) {
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;
}
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(zn != 2) {
v /= rad;
}
return v;
};
function m_coord(t, n1, n2, n3) {
var re = new Array();
re[0] = XL1_calc(0, t, n1);
re[1] = XL1_calc(1, t, n2);
re[2] = XL1_calc(2, t, n3);
return re;
}
function suoN(jd) {
return Math.floor((jd + 8) / 29.5306);
}
/** 太阳光行差 */
function gxc_sunLon(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;
}
function gxc_sunLat(t) {
return 0;
}
function gxc_moonLon(t) {
return -3.4E-6;
}
function gxc_moonLat(t) {
return 0.063 * Math.sin(0.057 + 8433.4662 * t + 0.000064 * t * t) / rad;
}
function pGST(T, dt) {
var t = (T + dt) / 36525,
t2 = t * t,
t3 = t2 * t,
t4 = t3 * t;
return pi2 * (0.7790572732640 + 1.00273781191135448 * T) + (0.014506 + 4612.15739966 * t + 1.39667721 * t2 - 0.00009344 * t3 + 0.00001882 * t4) / rad;
}
function pGST2(jd) {
var dt = dt_T(jd);
return pGST(jd - dt, dt);
}
function sunShengJ(jd, L, fa, sj) {
var i;
jd = floor(jd + 0.5) - L / pi2;
for(i = 0; i < 2; i++) {
var T = jd / 36525,
E = (84381.4060 - 46.836769 * T) / rad;
var t = T + (32 * (T + 1.8) * (T + 1.8) - 20) / 86400 / 36525;
var J = (48950621.66 + 6283319653.318 * t + 53 * t * t - 994 + 334166 * cos(4.669257 + 628.307585 * t) + 3489 * cos(4.6261 + 1256.61517 * t) + 2060.6 * cos(2.67823 + 628.307585 * t) * t) / 10000000;
var sinJ = sin(J),
cosJ = cos(J);
var gst = (0.7790572732640 + 1.00273781191135448 * jd) * pi2 + (0.014506 + 4612.15739966 * T + 1.39667721 * T * T) / rad;
var A = atan2(sinJ * cos(E), cosJ);
var D = asin(sin(E) * sinJ);
var cosH0 = (sin(-50 * 60 / rad) - sin(fa) * sin(D)) / (cos(fa) * cos(D));
if(abs(cosH0) >= 1)
return 0;
jd += rad2rrad(sj * acos(cosH0) - (gst + L - A)) / 6.28;
}
return jd;
}
function pty_zty(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,
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 = hcjj(t) + dE;
z[0] = XL0_calc(0, 0, t, 50) + Math.PI + 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;
z = llrConv(z, E);
z[0] -= dL * Math.cos(E);
L = rad2rrad(L - z[0]);
return L / pi2;
}
function pty_zty2(t) {
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] = XL0_calc(0, 0, t, 5) + Math.PI,
z[1] = 0;
z = llrConv(z, E);
L = rad2rrad(L - z[0]);
return L / pi2;
}
function dituJM(p, Jb, Wb) {
p = p.split('');
var len = p.length,
a = new Array();
var J = 0,
W = 0,
b = 0;
var i,
j,
k = 0,
k2 = 0,
c;
for(i = 0; i < len; i++) {
c = p[i];
if(c == '#') {
J = 0,
W = 0,
k2 = 0,
a[k] = 1e7,
k++;
continue;
}
if(c >= 'a' && c <= 'z')
b = c.charCodeAt(0) - 97;
else if(c >= 'A' && c <= 'Z')
b = 65 - c.charCodeAt(0);
else {
for(j = ++i; i < j + 20; c += p[i++]) {
if(p[i] == ',') {
b = c - 0;
break;
}
if(p[i] == ':') {
b = 0 - c;
break;
}
}
}
k2++;
if(k2 % 2)
J += b, a[k] = J * Jb, k++;
else
W += b, a[k] = W * Wb, k++;
}
return a;
}
function evSSB(t) {
var J = new Array(3.1761467 + 1021.3285546 * t, 1.7534703 + 628.3075849 * t, 6.2034809 + 334.0612431 * t, 0.5995465 + 52.9690965 * t, 0.8740168 + 21.3299095 * t, 5.4812939 + 7.4781599 * t, 5.3118863 + 3.8133036 * t, 3.8103444 + 8399.6847337 * t, 5.1984667 + 7771.3771486 * t, 2.3555559 + 8328.6914289 * t, 1.6279052 + 8433.4661601 * t);
var i,
k,
c,
S,
C,
Tn = 1;
var v = new Array(0, 0, 0),
F = evTab;
for(i = 0; i < 39; i++) {
if(i >= 36)
Tn = t;
k = i * 12;
c = F[k] * J[F[k + 1]] + F[k + 2] * J[F[k + 3]] + F[k + 4] * J[F[k + 5]];
S = sin(c),
C = cos(c);
v[0] += (F[k + 6] * S + F[k + 7] * C) * Tn;
v[1] += (F[k + 8] * S + F[k + 9] * C) * Tn;
v[2] += (F[k + 10] * S + F[k + 11] * C) * Tn;
}
v[0] *= 0.00036525,
v[1] *= 0.00036525,
v[2] *= 0.00036525;
return v;
}
function epSSB(t) {
t /= 10;
var i,
x = 0,
y = 0,
z = 0,
E,
p = epTab;
for(i = 0; i < epTab.length; i += 6) {
x += p[i + 0] * cos(p[i + 1] + p[i + 2] * t);
y += p[i + 3] * cos(p[i + 4] + p[i + 5] * t);
}
x += t * (1234 + 515 * cos(6.002663 + 12566.1517 * t) + 13 * cos(5.959431 + 18849.22755 * t) + 11 * cos(2.015542 + 6283.07585 * t));
y += t * (930 + 515 * cos(4.431805 + 12566.1517 * t) + 13 * cos(4.388605 + 18849.22755 * t));
z += t * (54 + 2278 * cos(3.413725 + 6283.07585 * t) + 19 * cos(3.370613 + 12566.15170 * t));
x /= 1000000,
y /= 1000000,
z /= 1000000;
var E = -84381.448 / rad;
return new Array(x, z * sin(E) + y * cos(E), z * cos(E) - y * sin(E));
}
function ylpz(z, a) {
var r = new Array(z[0], z[1], z[2]);
var d = z[0] - a[0];
var D = sin(z[1]) * sin(a[1]) + cos(z[1]) * cos(a[1]) * cos(d);
D = 0.00407 * (1 / (1 - D) + D / 2) / rad;
r[0] += D * (cos(a[1]) * sin(d) / cos(z[1]));
r[1] += D * (sin(z[1]) * cos(a[1]) * cos(d) - sin(a[1]) * cos(z[1]));
r[0] = rad2mrad(r[0]);
return r;
}
function scGxc(z, v, f) {
var r = new Array(z[0], z[1], z[2]);
var c = cs_GS / cs_AU * 86400 * 36525;
if(f)
c = -z[2];
var sinJ = sin(z[0]),
cosJ = cos(z[0]);
var sinW = sin(z[1]),
cosW = cos(z[1]);
r[0] += rad2mrad((v[1] * cosJ - v[0] * sinJ) / cosW / c);
r[1] += (v[2] * cosW - (v[0] * cosJ + v[1] * sinJ) * sinW) / c;
return r;
}
function sun2000(t, n) {
var a = e_coord(t, n, n, n);
a[0] += Math.PI,
a[1] = -a[1];
a = HDllr_D2J(t, a, 'P03');
return a;
}
function schHXK(key) {
var i,
s,
n0,
n1,
n2,
n3,
r = '';
for(i = 0; i < HXK.length; i++) {
s = HXK[i];
n0 = n1 = s.indexOf('#');
while(1) {
n1 = s.indexOf(key, n1 + 1);
if(n1 == -1)
break;
n2 = s.indexOf('#', n1);
if(n3 == -1)
n2 = s.length;
n3 = s.lastIndexOf('#', n1);
if(n2 == -1)
n3 = n0;
r += s.substr(n3, n2 - n3);
}
}
for(i = 0; i < xz88.length; i += 5) {
if(xz88[i].substr(3, 3) == key) {
var a = xz88[i + 2],
b = xz88[i + 3];
a = a.substr(0, 5) + ' ' + (a.substr(6, 2) * 0.6).toFixed(1);
b = b.substr(0, 6) + ' ' + (b.substr(7, 2) * 0.6).toFixed(1);
r = '#*' + a + ',' + b + ',0,0,0,0.0,中心' + xz88[i + 1] + '方,' + xz88[i + 4] + r;
break;
}
}
return r;
}
function getHXK(s, all) {
var i,
k,
r = new Array();
s = s.replace(/\r/g, '');
s = s.replace(/\n/g, '#');
var sn = s.indexOf('#') + 1;
s = s.substr(sn, s.length - sn);
s = s.replace(/\#+/g, ',');
s = s.replace(/, +/g, ',');
s = s.split(',');
for(i = 0, k = 0; i < s.length; i += 8) {
if(!s[i] || s[i].length < 5) {
continue;
}
if(s[i].substr(0, 1) != '*' && !all)
continue;
s[i] = s[i].substr(1, s[i].length - 1);
r[k++] = str2rad(s[i + 0], 1);
r[k++] = str2rad(s[i + 1], 0);
r[k++] = s[i + 2] / rad * 15;
r[k++] = s[i + 3] / rad;
r[k++] = s[i + 4] / rad;
r[k++] = s[i + 5];
r[k++] = s[i + 6];
r[k++] = s[i + 7];
}
return r;
}
function hxCalc(t, F, Q, lx, L, fa) {
var i,
z = new Array(),
s = '';
var d,
E,
v,
p,
a,
s0;
var gstP,
gst;
if(lx == 0)
s0 = '视赤经 视赤纬';
if(lx == 1)
s0 = '站心坐标';
if(lx == 2)
s0 = '平赤经 平赤纬';
if(lx == 0 || lx == 1) {
d = nutation(t, Q);
E = hcjj(t);
v = evSSB(t);
p = epSSB(t);
a = sun2000(t, 20);
a = llrConv(a, 84381.406 / rad);
gstP = pGST2(t * 36525);
gst = gstP + d[0] * Math.cos(E);
}
for(i = 0; i < F.length; i += 8) {
s += F[i + 6] + ' ' + F[i + 7] + ' ' + F[i + 5] + ' ';
z[0] = F[i + 0] + F[i + 2] * t * 100;
z[1] = F[i + 1] + F[i + 3] * t * 100;
z[2] = 1 / F[i + 4];
z[0] = rad2mrad(z[0]);
if(!z[2])
z[2] = 1e11;
if(lx == 0 || lx == 1) {
z = ylpz(z, a);
z = scGxc(z, p, 1);
z = scGxc(z, v, 0);
z = CDllr_J2D(t, z, 'P03');
z = CDnutation(z, E, d[0], d[1]);
if(lx == 1) {
var sj = rad2rrad(gst + L - z[0]);
z[0] += Math.PI / 2 - gst - L;
z = llrConv(z, Math.PI / 2 - fa);
z[0] = rad2mrad(Math.PI / 2 - z[0]);
if(z[1] > 0)
z[1] += MQC(z[1]);
}
}
if(lx == 2) {
z = CDllr_J2D(t, z, 'P03');
}
if(lx == 0 || lx == 2)
s += rad2strE(z[0], 1, 3) + ' ' + rad2strE(z[1], 0, 2) + '\r\n';
else
s += rad2strE(z[0], 0, 2) + ' ' + rad2strE(z[1], 0, 2) + '\r\n';
}
return JD.JD2str(t * 36525 + J2000) + ' TD ' + s0 + '\r\n' + s + '\r\n';
}
function xingJJ(xt, t, jing) {
var a,
z;
a = p_coord(0, t, 10, 10, 10);
z = p_coord(xt, t, 10, 10, 10);
z = h2g(z, a);
if(jing == 0);
if(jing == 1) {
a = p_coord(0, t, 60, 60, 60);
z = p_coord(xt, t, 60, 60, 60);
z = h2g(z, a);
}
if(jing >= 2) {
a = p_coord(0, t - a[2] * cs_Agx, -1, -1, -1);
z = p_coord(xt, t - z[2] * cs_Agx, -1, -1, -1);
z = h2g(z, a);
}
a[0] += Math.PI,
a[1] = -a[1];
return j1_j2(z[0], z[1], a[0], a[1]);
}
function daJu(xt, t, dx) {
var a,
b,
c;
if(xt == 1) {
a = 115.8774777586 / 36525;
c = new Array(2, 0.2, 0.01, 46, 87);
}
if(xt == 2) {
a = 583.9213708245 / 36525;
c = new Array(4, 0.2, 0.01, 382, 521);
}
if(dx)
b = c[3] / 36525;
else
b = c[4] / 36525;
t = b + a * int2((t - b) / a + 0.5);
var i,
dt,
r1,
r2,
r3;
for(i = 0; i < 3; i++) {
dt = c[i] / 36525;
r1 = xingJJ(xt, t - dt, i);
r2 = xingJJ(xt, t, i);
r3 = xingJJ(xt, t + dt, i);
t += (r1 - r3) / (r1 + r3 - 2 * r2) * dt / 2;
}
r2 += (r1 - r3) / (r1 + r3 - 2 * r2) * (r3 - r1) / 8;
var re = new Array(t, r2);
return re;
}
function xingLiu0(xt, t, n, gxs) {
var a,
z,
E = hcjj(t),
zd;
a = p_coord(0, t - gxs, n, n, n);
z = p_coord(xt, t - gxs, n, n, n);
z = h2g(z, a);
if(gxs) {
zd = nutation2(t);
z[0] += zd[0];
E += zd[1];
}
z = llrConv(z, E);
return z;
}
function xingLiu(xt, t, sn) {
var i,
y1,
y2,
y3,
n,
g;
var hh = cs_xxHH[xt - 1] / 36525;
var v = pi2 / hh;
if(xt > 2)
v = -v;
for(i = 0; i < 6; i++)
t -= rad2rrad(XL0_calc(xt, 0, t, 8) - XL0_calc(0, 0, t, 8)) / v;
var tt = new Array(5 / 36525, 1 / 36525, 0.5 / 36525, 2e-6, 2e-6),
dt;
var tc = new Array(17.4, 28, 52, 82, 86, 88, 89, 90);
tc = tc[xt - 1] / 36525;
if(sn) {
if(xt > 2)
t -= tc;
else
t += tc;
} else {
if(xt > 2)
t += tc;
else
t -= tc;
}
for(i = 0; i < 4; i++) {
dt = tt[i],
n = 8,
g = 0;
if(i >= 3) {
g = y2[2] * cs_Agx;
n = -1;
}
y1 = xingLiu0(xt, t - dt, n, g);
y2 = xingLiu0(xt, t, n, g);
y3 = xingLiu0(xt, t + dt, n, g);
t += (y1[0] - y3[0]) / (y1[0] + y3[0] - 2 * y2[0]) * dt / 2;
}
return t;
}
function xingMP(xt, t, n, E, g) {
var a,
p,
m;
a = p_coord(0, t - g[1], n, n, n);
p = p_coord(xt, t - g[1], n, n, n);
m = m_coord(t - g[0], n, n, n);
p = h2g(p, a);
m[0] += g[2];
p[0] += g[2];
m = llrConv(m, E + g[3]);
p = llrConv(p, E + g[3]);
var re = new Array(rad2rrad(m[0] - p[0]), m[1] - p[1], m[2] / cs_GS / 86400 / 36525, p[2] / cs_GS / 86400 / 36525 * cs_AU);
return re;
}
function xingHY(xt, t) {
var i,
d,
d2,
v,
E,
g = new Array(0, 0, 0, 0);
for(i = 0; i < 3; i++) {
d = xingMP(xt, t, 8, 0.4091, g);
t -= d[0] / 8192;
}
E = hcjj(t);
var zd = nutation2(t);
g = new Array(d[2], d[3], zd[0], zd[1]);
d = xingMP(xt, t, 8, E, g);
d2 = xingMP(xt, t + 1e-6, 8, E, g);
v = (d2[0] - d[0]) / 1e-6;
d = xingMP(xt, t, 30, E, g);
t -= d[0] / v;
d = xingMP(xt, t, -1, E, g);
t -= d[0] / v;
var re = new Array(t, d[1]);
return re;
}
function xingSP(xt, t, n, w0, ts, tp) {
var a,
p,
s;
a = p_coord(0, t - tp, n, n, n);
p = p_coord(xt, t - tp, n, n, n);
s = p_coord(0, t - ts, n, n, n);
s[0] += Math.PI;
s[1] = -s[1];
p = h2g(p, a);
var re = new Array(rad2rrad(p[0] - s[0] - w0), p[1] - s[1], s[2] * cs_Agx, p[2] * cs_Agx);
return re;
}
function xingHR(xt, t, f) {
var i,
a,
b,
v,
dt = 2e-5;
var w0 = Math.PI,
w1 = 0;
if(f) {
w0 = 0;
if(xt > 2)
w1 = Math.PI;
}
v = pi2 / cs_xxHH[xt - 1] * 36525;
if(xt > 2)
v = -v;
for(i = 0; i < 6; i++)
t -= rad2rrad(XL0_calc(xt, 0, t, 8) - XL0_calc(0, 0, t, 8) - w0) / v;
a = xingSP(xt, t, 8, w1, 0, 0);
b = xingSP(xt, t + dt, 8, w1, 0, 0);
v = (b[0] - a[0]) / dt;
a = xingSP(xt, t, 40, w1, a[2], a[3]);
t -= a[0] / v;
a = xingSP(xt, t, -1, w1, a[2], a[3]);
t -= a[0] / v;
var re = new Array(t, a[1]);
return re;
}
function xingX(xt, jd, L, fa) {
var T = jd / 36525;
var zd = nutation2(T);
var dL = zd[0],
dE = zd[1];
var E = hcjj(T) + dE;
var gstPing = pGST2(jd);
var gst = gstPing + dL * Math.cos(E);
var z,
a,
z2,
a2,
s = '';
var ra,
rb,
rc,
rfn = 8;
if(xt == 10) {
rfn = 2;
a = e_coord(T, 15, 15, 15);
z = m_coord(T, 1, 1, -1);
ra = z[2];
T -= ra * cs_Agx / cs_AU;
a2 = e_coord(T, 15, 15, 15);
z = m_coord(T, -1, -1, -1);
rc = z[2];
a2 = h2g(a, a2);
a2[2] *= cs_AU;
z2 = h2g(z, a2);
rb = z2[2];
z[0] = rad2mrad(z[0] + dL);
s += '视黄经 ' + rad2str(z[0], 0) + ' 视黄纬 ' + rad2str(z[1], 0) + ' 地心距 ' + ra.toFixed(rfn) + '\r\n';
z = llrConv(z, E);
s += '视赤经 ' + rad2str(z[0], 1) + ' 视赤纬 ' + rad2str(z[1], 0) + ' 光行距 ' + rb.toFixed(rfn) + '\r\n';
}
if(xt < 10) {
a = p_coord(0, T, -1, -1, -1);
z = p_coord(xt, T, -1, -1, -1);
z[0] = rad2mrad(z[0]);
s += '黄经一 ' + rad2str(z[0], 0) + ' 黄纬一 ' + rad2str(z[1], 0) + ' 向径一 ' + z[2].toFixed(rfn) + '\r\n';
z = h2g(z, a);
ra = z[2];
T -= ra * cs_Agx;
a2 = p_coord(0, T, -1, -1, -1);
z2 = p_coord(xt, T, -1, -1, -1);
z = h2g(z2, a);
rb = z[2];
z = h2g(z2, a2);
rc = z[2];
z[0] = rad2mrad(z[0] + dL);
s += '视黄经 ' + rad2str(z[0], 0) + ' 视黄纬 ' + rad2str(z[1], 0) + ' 地心距 ' + ra.toFixed(rfn) + '\r\n';
z = llrConv(z, E);
s += '视赤经 ' + rad2str(z[0], 1) + ' 视赤纬 ' + rad2str(z[1], 0) + ' 光行距 ' + rb.toFixed(rfn) + '\r\n';
}
var sj = rad2rrad(gst + L - z[0]);
parallax(z, sj, fa, 0);
s += '站赤经 ' + rad2str(z[0], 1) + ' 站赤纬 ' + rad2str(z[1], 0) + ' 视距离 ' + rc.toFixed(rfn) + '\r\n';
z[0] += Math.PI / 2 - gst - L;
z = llrConv(z, Math.PI / 2 - fa);
z[0] = rad2mrad(Math.PI / 2 - z[0]);
if(z[1] > 0)
z[1] += MQC(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 lineEll(x1, y1, z1, x2, y2, z2, e, r) {
var dx = x2 - x1,
dy = y2 - y1,
dz = z2 - z1,
e2 = e * e,
A,
B,
C,
D,
R,
t,
p = new Object();
A = dx * dx + dy * dy + dz * dz / e2;
B = x1 * dx + y1 * dy + z1 * dz / e2;
C = x1 * x1 + y1 * y1 + z1 * z1 / e2 - r * r;
p.D = B * B - A * C;
if(p.D < 0)
return p;
D = sqrt(p.D);
if(B < 0)
D = -D;
t = (-B + D) / A;
p.x = x1 + dx * t,
p.y = y1 + dy * t,
p.z = z1 + dz * t;
R = sqrt(dx * dx + dy * dy + dz * dz);
p.R1 = R * abs(t),
p.R2 = R * abs(t - 1);
return p;
}
function lineEar2(x1, y1, z1, x2, y2, z2, e, r, I) {
var P = cos(I[1]),
Q = sin(I[1]);
var X1 = x1,
Y1 = P * y1 - Q * z1,
Z1 = Q * y1 + P * z1;
var X2 = x2,
Y2 = P * y2 - Q * z2,
Z2 = Q * y2 + P * z2;
var p = lineEll(X1, Y1, Z1, X2, Y2, Z2, e, r);
p.J = p.W = 100;
if(p.D < 0)
return p;
p.J = rad2rrad(atan2(p.y, p.x) + I[0] - I[2]);
p.W = atan(p.z / e / e / sqrt(p.x * p.x + p.y * p.y));
return p;
}
function lineEar(P, Q, gst) {
var p = llr2xyz(P),
q = llr2xyz(Q);
var r = lineEll(p[0], p[1], p[2], q[0], q[1], q[2], cs_ba, cs_rEar);
if(r.D < 0) {
r.J = r.W = 100;
return r;
}
r.W = atan(r.z / cs_ba2 / sqrt(r.x * r.x + r.y * r.y));
r.J = rad2rrad(atan2(r.y, r.x) - gst);
return r;
}
function cirOvl(R, ba, R2, x0, y0) {
var re = new Object();
var d = sqrt(x0 * x0 + y0 * y0);
var sinB = y0 / d,
cosB = x0 / d;
var cosA = (R * R + d * d - R2 * R2) / (2 * d * R);
if(abs(cosA) > 1) {
re.n = 0;
return re;
}
var sinA = Math.sqrt(1 - cosA * cosA);
var k,
g,
ba2 = ba * ba,
C,
S;
for(k = -1; k < 2; k += 2) {
S = cosA * sinB + sinA * cosB * k;
g = R - S * S * (1 / ba2 - 1) / 2;
cosA = (g * g + d * d - R2 * R2) / (2 * d * g);
if(Math.abs(cosA) > 1) {
re.n = 0;
return re;
}
sinA = Math.sqrt(1 - cosA * cosA);
C = cosA * cosB - sinA * sinB * k;
S = cosA * sinB + sinA * cosB * k;
if(k == 1)
re.A = [g * C, g * S];
else
re.B = [g * C, g * S];
}
re.n = 2;
return re;
}
function lineOvl(x1, y1, dx, dy, r, ba) {
var A,
B,
C,
D,
L,
t1,
t2,
p = new Object();
var f = ba * ba;
A = dx * dx + dy * dy / f;
B = x1 * dx + y1 * dy / f;
C = x1 * x1 + y1 * y1 / f - r * r;
D = B * B - A * C;
if(D < 0) {
p.n = 0;
return p;
}
if(!D)
p.n = 1;
else
p.n = 2;
D = Math.sqrt(D);
t1 = (-B + D) / A,
t2 = (-B - D) / A;
p.A = [x1 + dx * t1, y1 + dy * t1];
p.B = [x1 + dx * t2, y1 + dy * t2];
L = sqrt(dx * dx + dy * dy);
p.R1 = L * Math.abs(t1);
p.R2 = L * Math.abs(t2);
return p;
}
function ecFast(jd) {
var re = new Object();
var t,
t2,
t3,
t4;
var L,
mB,
mR,
sR,
vL,
vB,
vR;
var W = Math.floor((jd + 8) / 29.5306) * Math.PI * 2;
t = (W + 1.08472) / 7771.37714500204;
re.jd = re.jdSuo = t * 36525;
t2 = t * t,
t3 = t2 * t,
t4 = t3 * t;
L = (93.2720993 + 483202.0175273 * t - 0.0034029 * t2 - t3 / 3526000 + t4 / 863310000) / 180 * Math.PI;
re.ac = 1,
re.lx = 'N';
if(Math.abs(Math.sin(L)) > 0.4)
return re;
t -= (-0.0000331 * t * t + 0.10976 * Math.cos(0.785 + 8328.6914 * t)) / 7771;
t2 = t * t;
L = -1.084719 + 7771.377145013 * t - 0.0000331 * t2 + (22640 * Math.cos(0.785 + 8328.6914 * t + 0.000152 * t2) + 4586 * Math.cos(0.19 + 7214.063 * t - 0.000218 * t2) + 2370 * Math.cos(2.54 + 15542.754 * t - 0.000070 * t2) + 769 * Math.cos(3.1 + 16657.383 * t) + 666 * Math.cos(1.5 + 628.302 * t) + 412 * Math.cos(4.8 + 16866.93 * t) + 212 * Math.cos(4.1 - 1114.63 * t) + 205 * Math.cos(0.2 + 6585.76 * t) + 192 * Math.cos(4.9 + 23871.45 * t) + 165 * Math.cos(2.6 + 14914.45 * t) + 147 * Math.cos(5.5 - 7700.39 * t) + 125 * Math.cos(0.5 + 7771.38 * t) + 109 * Math.cos(3.9 + 8956.99 * t) + 55 * Math.cos(5.6 - 1324.18 * t) + 45 * Math.cos(0.9 + 25195.62 * t) + 40 * Math.cos(3.8 - 8538.24 * t) + 38 * Math.cos(4.3 + 22756.82 * t) + 36 * Math.cos(5.5 + 24986.07 * t) - 6893 * Math.cos(4.669257 + 628.3076 * t) - 72 * Math.cos(4.6261 + 1256.62 * t) - 43 * Math.cos(2.67823 + 628.31 * t) * t + 21) / rad;
t += (W - L) / (7771.38 - 914 * Math.sin(0.7848 + 8328.691425 * t + 0.0001523 * t2) - 179 * Math.sin(2.543 + 15542.7543 * t) - 160 * Math.sin(0.1874 + 7214.0629 * t));
re.jd = re.jdSuo = jd = t * 36525;
t2 = t * t / 10000,
t3 = t2 * t / 10000;
mB = 18461 * Math.cos(0.0571 + 8433.46616 * t - 0.640 * t2 - 1 * t3) + 1010 * Math.cos(2.413 + 16762.1576 * t + 0.88 * t2 + 25 * t3) + 1000 * Math.cos(5.440 - 104.7747 * t + 2.16 * t2 + 26 * t3) + 624 * Math.cos(0.915 + 7109.2881 * t + 0 * t2 + 7 * t3) + 199 * Math.cos(1.82 + 15647.529 * t - 2.8 * t2 - 19 * t3) + 167 * Math.cos(4.84 - 1219.403 * t - 1.5 * t2 - 18 * t3) + 117 * Math.cos(4.17 + 23976.220 * t - 1.3 * t2 + 6 * t3) + 62 * Math.cos(4.8 + 25090.849 * t + 2 * t2 + 50 * t3) + 33 * Math.cos(3.3 + 15437.980 * t + 2 * t2 + 32 * t3) + 32 * Math.cos(1.5 + 8223.917 * t + 4 * t2 + 51 * t3) + 30 * Math.cos(1.0 + 6480.986 * t + 0 * t2 + 7 * t3) + 16 * Math.cos(2.5 - 9548.095 * t - 3 * t2 - 43 * t3) + 15 * Math.cos(0.2 + 32304.912 * t + 0 * t2 + 31 * t3) + 12 * Math.cos(4.0 + 7737.590 * t) + 9 * Math.cos(1.9 + 15019.227 * t) + 8 * Math.cos(5.4 + 8399.709 * t) + 8 * Math.cos(4.2 + 23347.918 * t) + 7 * Math.cos(4.9 - 1847.705 * t) + 7 * Math.cos(3.8 - 16133.856 * t) + 7 * Math.cos(2.7 + 14323.351 * t);
mB /= rad;
mR = 385001 + 20905 * Math.cos(5.4971 + 8328.691425 * t + 1.52 * t2 + 25 * t3) + 3699 * Math.cos(4.900 + 7214.06287 * t - 2.18 * t2 - 19 * t3) + 2956 * Math.cos(0.972 + 15542.75429 * t - 0.66 * t2 + 6 * t3) + 570 * Math.cos(1.57 + 16657.3828 * t + 3.0 * t2 + 50 * t3) + 246 * Math.cos(5.69 - 1114.6286 * t - 3.7 * t2 - 44 * t3) + 205 * Math.cos(1.02 + 14914.4523 * t - 1 * t2 + 6 * t3) + 171 * Math.cos(3.33 + 23871.4457 * t + 1 * t2 + 31 * t3) + 152 * Math.cos(4.94 + 6585.761 * t - 2 * t2 - 19 * t3) + 130 * Math.cos(0.74 - 7700.389 * t - 2 * t2 - 25 * t3) + 109 * Math.cos(5.20 + 7771.377 * t) + 105 * Math.cos(2.31 + 8956.993 * t + 1 * t2 + 25 * t3) + 80 * Math.cos(5.38 - 8538.241 * t + 2.8 * t2 + 26 * t3) + 49 * Math.cos(6.24 + 628.302 * t) + 35 * Math.cos(2.7 + 22756.817 * t - 3 * t2 - 13 * t3) + 31 * Math.cos(4.1 + 16171.056 * t - 1 * t2 + 6 * t3) + 24 * Math.cos(1.7 + 7842.365 * t - 2 * t2 - 19 * t3) + 23 * Math.cos(3.9 + 24986.074 * t + 5 * t2 + 75 * t3) + 22 * Math.cos(0.4 + 14428.126 * t - 4 * t2 - 38 * t3) + 17 * Math.cos(2.0 + 8399.679 * t);
mR /= 6378.1366;
t = jd / 365250,
t2 = t * t,
t3 = t2 * t;
sR = 10001399 + 167070 * Math.cos(3.098464 + 6283.07585 * t) + 1396 * Math.cos(3.0552 + 12566.1517 * t) + 10302 * Math.cos(1.10749 + 6283.07585 * t) * t + 172 * Math.cos(1.064 + 12566.152 * t) * t + 436 * Math.cos(5.785 + 6283.076 * t) * t2 + 14 * Math.cos(4.27 + 6283.08 * t) * t3;
sR *= 1.49597870691 / 6378.1366 * 10;
t = jd / 36525;
vL = 7771 - 914 * Math.sin(0.785 + 8328.6914 * t) - 179 * Math.sin(2.543 + 15542.7543 * t) - 160 * Math.sin(0.187 + 7214.0629 * t);
vB = -755 * Math.sin(0.057 + 8433.4662 * t) - 82 * Math.sin(2.413 + 16762.1576 * t);
vR = -27299 * Math.sin(5.497 + 8328.691425 * t) - 4184 * Math.sin(4.900 + 7214.06287 * t) - 7204 * Math.sin(0.972 + 15542.75429 * t);
vL /= 36525,
vB /= 36525,
vR /= 36525;
var gm = mR * Math.sin(mB) * vL / Math.sqrt(vB * vB + vL * vL),
smR = sR - mR;
var mk = 0.2725076,
sk = 109.1222;
var f1 = (sk + mk) / smR,
r1 = mk + f1 * mR;
var f2 = (sk - mk) / smR,
r2 = mk - f2 * mR;
var b = 0.9972,
Agm = Math.abs(gm),
Ar2 = Math.abs(r2);
var fh2 = mR - mk / f2,
h = Agm < 1 ? Math.sqrt(1 - gm * gm) : 0;
var ls1,
ls2,
ls3,
ls4;
if(fh2 < h)
re.lx = 'T';
else
re.lx = 'A';
ls1 = Agm - (b + r1);
if(Math.abs(ls1) < 0.016)
re.ac = 0;
ls2 = Agm - (b + Ar2);
if(Math.abs(ls2) < 0.016)
re.ac = 0;
ls3 = Agm - (b);
if(Math.abs(ls3) < 0.016)
re.ac = 0;
ls4 = Agm - (b - Ar2);
if(Math.abs(ls4) < 0.016)
re.ac = 0;
if(ls1 > 0)
re.lx = 'N';
else if(ls2 > 0)
re.lx = 'P';
else if(ls3 > 0)
re.lx += '0';
else if(ls4 > 0)
re.lx += '1';
else {
if(Math.abs(fh2 - h) < 0.019)
re.ac = 0;
if(Math.abs(fh2) < h) {
var dr = vR * h / vL / mR;
var H1 = mR - dr - mk / f2;
var H2 = mR + dr - mk / f2;
if(H1 > 0)
re.lx = 'H3';
if(H2 > 0)
re.lx = 'H2';
if(H1 > 0 && H2 > 0)
re.lx = 'H';
if(Math.abs(H1) < 0.019)
re.ac = 0;
if(Math.abs(H2) < 0.019)
re.ac = 0;
}
}
return re;
}
function JWdecode(v) {
var i;
v = v.split('');
for(i = 0; i < 4; i++) {
v[i] = v[i].charCodeAt(0);
if(v[i] > 96)
v[i] -= 97 - 36;
else if(v[i] > 64)
v[i] -= 65 - 10;
else
v[i] -= 48;
}
this.J = (v[2] + v[3] / 60 + 73) / 180 * Math.PI;
this.W = (v[0] + v[1] / 60) / 180 * Math.PI;
}
function Dtlpq(pjqn) {
y = year2Ayear(Cal_y.value);
var s = '';
if(y < 1281 || (y > 1644 && y < 1665) || y > 1669 || (y == 1644 && Cal_m.value - 0 == 12))
return s;
var yearshi = 365.2425 - (y - 1281) / 1000000;
var qiying = 55.0600;
var qice = yearshi / 24;
var pqlm = '年:(平气)         ';
if(y >= 1281 && y < 1368) {
yearshi = 365.2425 - (y - 1281) / 1000000;
} else if(y >= 1368 && y < 1644) {
yearshi = 365.2425;
}
var pqrgz = ((y - 1281) * yearshi + qiying + pjqn * qice) % 60;
var pqrtg = obb.Gan[(10 + int2(pqrgz) % 10) % 10];
var pqrdz = obb.Zhi[(12 + int2(pqrgz) % 12) % 12];
s = s + pqrtg + pqrdz + "日 ";
var pqrhh = (pqrgz - int2(pqrgz)) * 24;
var pqrsc = obb.Zhi[(12 + parseInt((pqrhh + 1) / 2)) % 12];
var pqrsd = obb.scd[parseInt(pqrhh) % 2];
var pqrmm = (pqrhh - int2(pqrhh)) * 60;
var pqrsk = obb.TimeK[parseInt(pqrmm / 14.4)];
s = s + pqrsc + pqrsd + ' ' + pqrsk + '刻' + ' ' + obb.jqmc[pjqn] + '<br/>' + obb.ymc[(parseInt((pjqn + 1) / 2) + 12) % 12] + '月' + obb.jqjl[pjqn % 2];
return s;
}
function Lunar() {
var i;
this.lun = new Array();
for(i = 0; i < 31; i++)
this.lun[i] = new Object();
this.lun.dn = 0;
this.substr2 = function(s, n, end) {
s = s.replace(/(^\s*)|(\s*$)/g, "");
if(s.length > n + 1)
return s.substr(0, n) + end;
return s;
};
this.yueLiCalc = function(By, Bm) {
var i,
j,
c,
Bd0,
Bdn;
JD.h = 12,
JD.m = 0,
JD.s = 0.1;
JD.Y = By;
JD.M = Bm;
JD.D = 1;
Bd0 = int2(JD.toJD()) - J2000;
JD.M++;
if(JD.M > 12)
JD.Y++, JD.M = 1;
Bdn = int2(JD.toJD()) - J2000 - Bd0;
this.w0 = (Bd0 + J2000 + 1 + 7000000) % 7;
this.y = By;
this.m = Bm;
this.d0 = Bd0;
this.dn = Bdn;
c = By - 1984 + 12000;
this.Ly = obb.Gan[c % 10] + obb.Zhi[c % 12];
this.ShX = obb.ShX[c % 12];
this.nianhao = obb.getNH(By, Bm) + Bm + "月";
var D,
w,
ob,
ob2;
for(i = 0, j = 0; i < Bdn; i++) {
ob = this.lun[i];
ob.d0 = Bd0 + i;
ob.di = i;
ob.y = By;
ob.m = Bm;
ob.dn = Bdn;
ob.week0 = this.w0;
ob.week = (this.w0 + i) % 7;
ob.weeki = int2((this.w0 + i) / 7);
ob.weekN = int2((this.w0 + Bdn - 1) / 7) + 1;
JD.setFromJD(ob.d0 + J2000);
ob.d = JD.D;
if(!SSQ.ZQ.length || ob.d0 < SSQ.ZQ[0] || ob.d0 >= SSQ.ZQ[24])
SSQ.calcY(ob.d0);
var mk = int2((ob.d0 - SSQ.HS[0]) / 30);
if(mk < 13 && SSQ.HS[mk + 1] <= ob.d0)
mk++;
ob.Ldi = ob.d0 - SSQ.HS[mk];
ob.Ldc = obb.rmc[ob.Ldi];
ob.cur_dz = ob.d0 - SSQ.ZQ[0];
ob.cur_xz = ob.d0 - SSQ.ZQ[12];
ob.cur_lq = ob.d0 - SSQ.ZQ[15];
ob.cur_mz = ob.d0 - SSQ.ZQ[11];
ob.cur_xs = ob.d0 - SSQ.ZQ[13];
if(ob.d0 == SSQ.HS[mk] || ob.d0 == Bd0) {
ob.Lmc = SSQ.ym[mk];
ob.Ldn = SSQ.dx[mk];
ob.Lleap = (SSQ.leap && SSQ.leap == mk) ? '闰' : '';
ob.Lmc2 = mk < 13 ? SSQ.ym[mk + 1] : "未知";
} else {
ob2 = this.lun[i - 1];
ob.Lmc = ob2.Lmc,
ob.Ldn = ob2.Ldn;
ob.Lleap = ob2.Lleap,
ob.Lmc2 = ob2.Lmc2;
}
var qk = int2((ob.d0 - SSQ.ZQ[0] - 7) / 15.2184);
if(qk < 23 && ob.d0 >= SSQ.ZQ[qk + 1])
qk++;
if(ob.d0 == SSQ.ZQ[qk])
ob.Ljq = obb.jqmc[qk];
else
ob.Ljq = '';
ob.dtpq = Dtlpq(qk);
ob.yxmc = ob.yxjd = ob.yxsj = '';
ob.jqmc = ob.jqjd = ob.jqsj = '';
D = SSQ.ZQ[3] + (ob.d0 < SSQ.ZQ[3] ? -365 : 0) + 365.25 * 16 - 35;
ob.Lyear = Math.floor(D / 365.2422 + 0.5);
D = SSQ.HS[2];
for(j = 0; j < 14; j++) {
if(SSQ.ym[j] != '正' || SSQ.leap == j && j)
continue;
D = SSQ.HS[j];
if(ob.d0 < D) {
D -= 365;
break;
}
}
D = D + 5810;
ob.Lyear0 = Math.floor(D / 365.2422 + 0.5);
D = ob.Lyear + 12000;
ob.Lyear2 = obb.Gan[D % 10] + obb.Zhi[D % 12];
D = ob.Lyear0 + 12000;
ob.Lyear3 = obb.Gan[D % 10] + obb.Zhi[D % 12];
ob.Lyear4 = ob.Lyear0 + 1984 + 2698;
mk = int2((ob.d0 - SSQ.ZQ[0]) / 30.43685);
if(mk < 12 && ob.d0 >= SSQ.ZQ[2 * mk + 1])
mk++;
D = mk + int2((SSQ.ZQ[12] + 390) / 365.2422) * 12 + 900000;
ob.Lmonth = D % 12;
ob.Lmonth2 = obb.Gan[D % 10] + obb.Zhi[D % 12];
D = ob.d0 - 6 + 9000000;
ob.Lday2 = obb.Gan[D % 10] + obb.Zhi[D % 12];
mk = int2((ob.d0 - SSQ.ZQ[0] - 15) / 30.43685);
if(mk < 11 && ob.d0 >= SSQ.ZQ[2 * mk + 2])
mk++;
ob.XiZ = obb.XiZ[(mk + 12) % 12] + '座';
oba.getHuiLi(ob.d0, ob);
ob.A = ob.B = ob.C = '';
ob.Fjia = 0;
oba.getDayName(ob, ob);
obb.getDayName(ob, ob);
}
var d,
xn,
jd2 = Bd0 + dt_T(Bd0) - 8 / 24;
w = XL.MS_aLon(jd2 / 36525, 10, 3);
w = int2((w - 0.78) / Math.PI * 2) * Math.PI / 2;
do {
d = obb.so_accurate(w);
D = int2(d + 0.5);
xn = int2(w / pi2 * 4 + 4000000.01) % 4;
w += pi2 / 4;
if(D >= Bd0 + Bdn)
break;
if(D < Bd0)
continue;
ob = this.lun[D - Bd0];
ob.yxmc = obb.yxmc[xn];
ob.yxjd = d;
ob.yxsj = JD.timeStr(d);
} while (D + 5 < Bd0 + Bdn);
w = XL.S_aLon(jd2 / 36525, 3);
w = int2((w - 0.13) / pi2 * 24) * pi2 / 24;
do {
d = obb.qi_accurate(w);
D = int2(d + 0.5);
xn = int2(w / pi2 * 24 + 24000006.01) % 24;
w += pi2 / 24;
if(D >= Bd0 + Bdn)
break;
if(D < Bd0)
continue;
ob = this.lun[D - Bd0];
ob.jqmc = obb.jqmc[xn];
ob.jqjd = d;
ob.jqsj = JD.timeStr(d);
} while (D + 12 < Bd0 + Bdn);
};
this.yueLiHTML = function(By, Bm, curJD) {
var sty_head = ' style="font-family: 宋体; font-size: 14px; text-align: center; background-color: #E0E0FF; color: #000000; font-weight: bold" ';
var sty_body = ' style="font-family: 宋体; font-size: 12px; text-align: center';
var sty_date = ' style="font-family: Arial Black; text-align: center;font-size: 20px" ';
var sty_date2 = ' style="font-family: Arial Black; text-align: center;font-size: 20px; color: #FF0000" ';
//var sty_cur = ' style="background-color:#90D050" ';
var i,
j,
c,
c2,
cr = "",
isM;
var ob;
this.yueLiCalc(By, Bm);
c = this.nianhao + ' 农历' + this.Ly + '年【' + this.ShX + '年】';
if(c.length > 33)
c = '<span style="font-size:12px">' + c + '</span>';
else
c = '<span style="font-size:16px;font-weight:bold">' + c + '</span>';
var ta0 = '<tr><td colspan=7 style="background-color:#0000A0;color:#FFFF00;text-align: center">' + c + '</td></tr>';
ta0 += '<tr>' + '<td' + sty_head + 'width="%14"></td>' + '<td' + sty_head + 'width="%14"></td>' + '<td' + sty_head + 'width="%14"></td>' + '<td' + sty_head + 'width="%14"></td>' + '<td' + sty_head + 'width="%14"></td>' + '<td' + sty_head + 'width="%14"></td>' + '<td' + sty_head + 'width="%14"></td></tr>';
for(i = 0; i < this.dn; i++) {
ob = this.lun[i];
// 当月第一天前面的数据为空
if(!i) {
for(j = 0; j < this.w0; j++)
cr += '<td></td>';
}
c = '',
isM = '';
if(ob.A)
c += '<font color=red>' + this.substr2(ob.A, 4, '..') + '</font>';
if(!c && ob.B)
c = '<font color=blue>' + this.substr2(ob.B, 4, '..') + '</font>';
if(!c && ob.Ldc == "初一")
c = ob.Lleap + ob.Lmc + '月' + (ob.Ldn == 30 ? '大' : '小');
if(!c)
c = ob.Ldc;
if(ob.yxmc == "朔")
isM = '<font size=3px color=#5050FF></font>';
if(ob.yxmc == "望")
isM = '<font color=#F0B000></font>';
if(ob.yxmc == "上弦")
isM = '<font color=#F0B000><b></b></font>';
if(ob.yxmc == "下弦")
isM = '<font color=#F0B000><b></b></font>';
if(ob.jqmc)
isM += '<font color=#00C000></font>';
if(ob.Fjia)
c2 = sty_date2;
else
c2 = sty_date;
c2 += ' onmouseover="showMessD(' + i + ')"';
c2 += ' onmouseout ="showMessD(-1)"';
c2 = '<span' + c2 + '>' + ob.d + '<br/>' + ob.Lday2 + '</span>';
var td_style = sty_body;
if(ob.d0 == curJD) {
//c2 = '<span' + sty_cur + '>' + c2 + '</span>';
td_style = sty_body + "; background-color:#90D050";
}
cr += '<td' + td_style + '" width="14%">' + c2 + '<br>' + isM + c + '</td>';
// 最后一天
if(i == this.dn - 1) {
for(j = 0; j < 6 - ob.week; j++)
cr += '<td></td>';
}
if(i == this.dn - 1 || ob.week == 6)
ta0 += '<tr>' + cr + '</tr>', cr = "";
}
this.pg1 = '<table border=0 cellpadding=3 cellspacing=1 width="100%">' + ta0 + '</table>';
var b2 = '',
b3 = '',
b4 = '';
for(i = 0; i < this.dn; i++) {
ob = this.lun[i];
c = i + 1;
if(c < 10)
c = '&nbsp;' + c;
if(ob.yxmc == '朔' || ob.yxmc == "望")
b2 += c + '日 ' + ob.yxsj + ob.yxmc + '月 &nbsp;';
if(ob.yxmc == '上弦' || ob.yxmc == "下弦")
b3 += c + '日 ' + ob.yxsj + ob.yxmc + ' &nbsp;';
if(ob.jqmc)
b4 += c + '日 ' + ob.jqsj + ob.jqmc + ' &nbsp;';
}
this.pg2 = b2 + '<br>' + b3 + '<br>' + b4;
};
}
function nianLiHTML(y, fg) {
var i,
j,
s = '',
s1,
s2,
v,
qi;
SSQ.calcY(int2((y - 2000) * 365.2422 + 180));
for(i = 0; i < 14; i++) {
if(SSQ.HS[i + 1] > SSQ.ZQ[24])
break;
if(SSQ.leap && i == SSQ.leap)
s1 = '闰';
else
s1 = '·';
s1 += SSQ.ym[i];
if(s1.length < 3)
s1 += '月';
s1 += SSQ.dx[i] > 29 ? '大' : '小';
s1 += ' ' + JD.JD2str(SSQ.HS[i] + J2000).substr(6, 5);
v = obb.so_accurate2(SSQ.HS[i]);
s2 = '(' + JD.JD2str(v + J2000).substr(9, 11) + ')';
if(int2(v + 0.5) != SSQ.HS[i])
s2 = '<font color=red>' + s2 + '</font>';
s1 += s2 + fg;
for(j = -2; j < 24; j++) {
if(j >= 0)
qi = SSQ.ZQ[j];
if(j == -1)
qi = SSQ.ZQ.pe1;
if(j == -2)
qi = SSQ.ZQ.pe2;
if(qi < SSQ.HS[i] || qi >= SSQ.HS[i + 1])
continue;
s1 += '&nbsp;&nbsp;&nbsp;&nbsp;' + obb.jqmc[(j + 24) % 24] + ' ' + JD.JD2str(qi + J2000).substr(6, 5);
v = obb.qi_accurate2(qi);
s2 = '(' + JD.JD2str(v + J2000).substr(9, 11) + ')';
if(int2(v + 0.5) != qi)
s2 = '<font color=red>' + s2 + '</font>';
s1 += s2 + fg;
}
s += s1 + "<br>";
}
return s;
}
function nianLi2HTML(y) {
var i,
j,
s = '',
s1,
s2,
v,
v2,
qi;
SSQ.calcY(int2((y - 2000) * 365.2422 + 180));
for(i = 0; i < 14; i++) {
if(SSQ.HS[i + 1] > SSQ.ZQ[24])
break;
if(SSQ.leap && i == SSQ.leap)
s1 = '闰';
else
s1 = '·';
s1 += SSQ.ym[i];
if(s1.length < 3)
s1 += '月';
s1 += SSQ.dx[i] > 29 ? '大' : '小 ';
v = SSQ.HS[i] + J2000;
s1 += '&nbsp;&nbsp;&nbsp;&nbsp;' + obb.Gan[(v + 9) % 10] + obb.Zhi[(v + 1) % 12];
s1 += '&nbsp;&nbsp;&nbsp;&nbsp;' + JD.JD2str(v).substr(6, 5);
for(j = -2; j < 24; j++) {
if(j >= 0)
qi = SSQ.ZQ[j];
if(j == -1)
qi = SSQ.ZQ.pe1;
if(j == -2)
qi = SSQ.ZQ.pe2;
if(qi < SSQ.HS[i] || qi >= SSQ.HS[i + 1])
continue;
v2 = qi + J2000;
s1 += '&nbsp;&nbsp;&nbsp;&nbsp;' + obb.jqmc[(j + 24) % 24] + JD.JD2str(qi + J2000).substr(6, 5);
s1 += '&nbsp;&nbsp;&nbsp;&nbsp;' + obb.rmc[v2 - v] + obb.Gan[(v2 + 9) % 10] + obb.Zhi[(v2 + 1) % 12];
}
s += s1 + '<br>';
}
return s;
}
function ht_init(can) {
if(this.isInit)
return;
this.isInit = 1;
this.can = can;
this.ctx = can.getContext("2d");
this.ctx.lineWidth = 1;
this.w = can.width - 0;
this.h = can.height - 0;
}
function ht_oval1(ctx, x, y, r, col) {
ctx.beginPath();
ctx.arc(x, y, r, 0, 2 * Math.PI);
ctx.strokeStyle = col;
ctx.closePath();
ctx.stroke();
}
function ht_oval2(ctx, x, y, r, col) {
ctx.beginPath();
ctx.arc(x, y, r, 0, 2 * Math.PI);
ctx.fillStyle = col;
ctx.closePath();
ctx.fill();
}
function ht_line(ctx, x1, y1, x2, y2, col) {
ctx.beginPath();
ctx.strokeStyle = col;
ctx.moveTo(x1, y1);
ctx.lineTo(x2, y2);
ctx.stroke();
ctx.closePath();
}
function ht_text(ctx, x, y, txt, col, font) {
ctx.font = font;
ctx.textBaseline = 'top';
ctx.fillStyle = col;
ctx.fillText(txt, x, y);
}
function showHelp(f) {
var s;
if(f == 0) {
help.innerHTML = '',
help.style.display = 'none';
return;
}
if(f == 1)
s = '<b>[软件用途]</b><br>  为纪念09.7.22长江大日食,在寿星中大量增强日月食等天象计算功能,这年7月之后改名为《寿星天文历》。<br>  本软件是一款精准的年代跨度大的天文历法工具,可作为一般的实用日历工具,对史学工作者、历算工作者、天文爱好者均有较大的参考价值。本软件开放所有源代码,供爱好者学习参考。<br>  本软件可以精确计算日月坐标、日月食、日月升降等。参见EXE版的帮助,可取得本软件更详细的说明文档。<br>  本软件受到《中华农历网》、命理相关论坛上的网友以及中科院有关学者一致好评,它是一个值得信赖的天文万年历。<b><font color=red>在互联网上开放源代码后,“春光、浪淘沙、易子、郑彬、ldlcau、netghost、叶风杨、chwc等等”前后共有数十人参与调试,正是他们热心参与,才使得的数据准确可靠。在此感谢各位同好。软件代码较长,所涉及年代跨度大,软件中肯定还有一些错误或欠妥之处,欢迎大家批评指正,本人将及时修补。</font></b><br><br><b>[软件说明]</b><br>  1、文件说明:<br> SXwnl.exe  是Exe版<br> sxwnl.htm  是网页版(单文件)<br> 源程序    是Exe版本和网页版本的原始程序及一些数据转换工具<br><br>  2、源程序中的文件组成<br> index.htm  主页面控制<br> tools.js   页面工具函数集<br> eph.js    星历计算模块<br> JW.js    全国城市经纬数据库<br> lunar.js   农历核心模块<br> readme.htm  说明/帮助目录<br> sm1-6.htm  说明/帮助/使用手册<br> img(文件夹) 说明书附带的图片等<br><br>  3、附件中的文件组成(非必要)<br> index.htm  附件索引页<br> fj1.htm   添加经纬度数据的辅助程序<br> fj2.htm   古历谱参考表,含参数生成器(-103年及以后)<br> fj3.htm   纪年数据管理辅助程序<br> fj4.htm   时区数据管理辅助程序<br> xx1.htm   古历谱参考表,含参数生成器(前历)<br> xx2.htm   古历谱参考表,含参数生成器(前历)<br> xx3.htm   古历谱参考表,含参数生成器(前历)<br> nun.htm   闰月表提取<br> hebin.bat、jsZip.js 这两个文件用于生成单文件的sxwnl.htm<br><br>  4、源代码编写使用window自带的“记事本”,软件调试使用IE6.0,EXE文件使用eBook Edit Pro软件对HTML文件编译而成,软件图标使用IconXP_3.1制作。<br>  5、显示某日的信息摘要后,如果按住ctrl键不放,再将鼠标移出日历区,即可保持该日信息摘要不变。<br>  6、万年历中有的地方使用“天文纪年”,有的地方使用“传统纪年”,差别在公元前。“天文纪年”表示公元前的年份用负数表示,传统纪年用BC表示且没有公元0年。软件的传统公元前纪年法是前面加一个B或b或*字符。例如输入公元前212年的方法是B212或*212或-211。<br>  7、本软件是“绿色”软件,无需安装,直接运行即可。本软件中EXE文件使用eBook Edit Pro v3.31打包,至于它会不会导致你的计算机系统损坏,本人无从考证,但这个EXE仅仅是个辅助性的工具,没有迹象表明寿星天文历必须依赖于这个EXE文件,为了保险起见,您可以删除它。<br>  8、您可以随意使用本程序中的算法及数据,如果在你自己开发的软件中使用了本程序的核心算法及数据,你可在你的软件中申明“数据或算法来源于寿星天文历”,也可以不申明,但不得申明为它其它来源。<br>  9、设计:许剑伟 13850262218 xunmeng04@163.com,2009年7月1日,家中。';
if(f == 2)
s = ' 1、“北/南”钩上,表示表中方位0度为正北,适用于南半球,此时表中左西右东。<br>'  + ' 2、日食放大图中,红圆为太阳,黄圆为月亮,它们纵向距离是赤纬差,横向则是赤经差,左东右西。(均不含大气折射修正)。<br>' + ' 3、月食放大图中,深黑圆是地球本影在距离地心R处的截面,R是该时刻地月质心距。淡黑圆是地球半影,定义方式与本影的相似。月食发生时,还会出现一个小灰圆,表示月亮,其大小决定于月亮的地心视半径。图中影子中心与月亮中心的纵向差为它们的赤纬差,横向差为赤经差,左东右西,月东行。不考虑地标对月食的影响。<br>' + ' 4、“UTC/TD”钩上,表示当前输入的是当地时间,不打钩,表示力学时。<br>' + ' 5、日食发生时,表中可能会出现一个小三角形,它的顶角表示月影轴与地球的交点,在该位置上此刻发生中心食。软件没用帮助用户计算该处发生全食还是环食,用户可以把该处的地标输入,重新计算即可精确判断。<br>' + ' 6、“NASA”钩上,使用保守日月边缘,结果与NASA网站提供的数据相同<br>' + ' 7、本图表中,东经为正,西经为负。';
if(f == 3) {
s = '';
}
if(f == 4) {
s = ' 1、<b>黄经一、黄纬一:</b>日心当日黄道平分点坐标,含有岁差,不含章动和光行时改正;坐标中心建立在日心,x轴指向当日平春分点,z轴垂直当日黄道面,y轴方向矢等于z叉乘x。<br>' + ' 2、<b>视赤经、视赤纬:</b>地心当日赤道真分点坐标,含有岁差,含有章动和光行时改正;坐标中心平移到地心(周年运动视差改正,地球公转相关),x轴指向当日真春分点,z轴垂直当日赤道面,y轴方向矢等于z叉乘x。视黄经、视黄纬也是视坐标,不过坐标轴基面是黄道面而不是赤道面。<br>' + ' 3、<b>站赤经、站赤纬:</b>站心当日赤道真分点坐标,含有岁差,含有章动和光行时改正;坐标中心平移到观测站(周日运动视差改正,地球自转相关),x轴指向当日真春分点,z轴垂直当日赤道面,y轴方向矢等于z叉乘x。<br>' + ' 4、<b>距离:</b>现以伽利略时空观解释它。以太阳系质心(SSB)作为坐标原点,并以遥远的星系作为坐标轴的方向创建的坐标系是一个比较理想的惯性坐标系,当我们把坐标中心平移到地心,并假想某瞬间与SSB保持相对静止或匀速动动,这样的坐标系仍然是惯性系。此类坐标系中,牛顿定律可以直接使用。坐标系中,两物体的“静止距离”就是牛顿定律应用所需的距离。当然,天体在运动,你找不到静止的时刻,所以人们很早就引入了“某一刻、某一瞬间距离”的概念,可理解为“瞬间相对惯性系静止距离”。用光直线构成的视差三角可以直接测量距离,然而光无法瞬时传播,所以得不到所要的瞬间距离,需要进行修正。软件中,<b>日心距、地心距</b>是“瞬间静止距离”,“光行距”指在惯性坐标中(如SSB坐标)“看到”光线离开天体,并在t时刻与地心观测者相遇,此间光行的距离为光行距。设光行时间为T,光速为c,光行距为D,显然,t-T时刻天体的出的光,在t时刻接收,所以软中用t-T时刻天体位置与t时刻观测位置的差值代表光行距D。计算前,T是个估值,不必很精确,得到T后就可算出D。如果认为D不够精确,可用D/c重算T,进而再次算出D,但这已经应用了光速不变原理,更严格精确的计算应采用相对论原理,但已经达到本软件星历的极限精度,没有必要考虑相对论变换。<b>视距离</b>指t-T时刻的地心距,它同样隐藏着相对性原理。<br>' + ' 5、<b>方位角</b>从正南开始向西测量,即地平经圈起点在正南,正南为0度,正西为90度,正北180度,正东270度;<b>高度角</b>指天体在地平坐标中的纬度,在真高度角大于零时,对高度角进行了大气折射修正。<br>' + ' 6、星历基于VSOP87(fit to DE200),进行了截断处理,并适当与DE405拟合修正。<br>' + ' 7、J2000+-500年精度(d = 10^-6AU ; J2000+-4千年范围内精度低数倍):<br>' + '  <b>星体 黄经   黄纬 距离, 星体 黄经   黄纬 距离</b><br>' + '  地球 0.1角秒 0.1角秒 0.1d, 水星 0.2角秒 0.2角秒 0.2d<br>' + '  金星 0.2角秒 0.2角秒 0.2d, 火星 0.5角秒 0.5角秒 1.0d<br>' + '  木星 0.5角秒 0.5角秒 3.0d, 土星 0.5角秒 0.5角秒 5.0d<br>' + '  天王 1.0角秒 1.0角秒 20 d, 海王 1.0角秒 1.0角秒 40d<br>' + ' <b>精度比对(2008-Jan-01 00:00 TT 火星)</b><br>' + ' JPL  视赤经 05h 59m 27.4967s 视赤纬+26°56\'27.538 光行距 0.607248116601418 AU<br>' + ' 本软件 视赤经 05h 59m 27.50s  视赤纬 26°56\'27.55 光行距 0.60724808 AU<br>' + '     误差      0s           0.012    0.00000003 AU<br>';
}
if(f == 5) {
s = ' 升降交点:当日平分点黄纬为零,并显示平分点黄经<br>' + ' 行星合日指视黄经相合(2008中国天文年历521页),应注意中科院云南天文台给出的是视赤经合日http://www.ynao.ac.cn/sp/forecast';
}
if(f == 6) {
s = ' 1、输入表中RA为J2000平赤径,DEC为J2000平赤纬,自行1为赤经年自行(时秒/年),自行2为赤纬年自行(角秒/年)。<br>' + ' 2、输入表中带*号的行参与计算,不带*号的行不计算。<br>' + ' 3、周年视差单位是角秒。<br>' + ' 4、忽略短周期章动指不计算周期小于35天的章动项,以便与中国天文年历比对。<br>' + ' 5、星座资料包括:汉语、缩写、面积(平方度)、中心赤经 (时分)、中心赤纬(度分)、象限角、族、星座英文名';
}
help.style.display = 'block';
help.innerHTML = '<a href="javascript:showHelp(0)">关闭</a><br>' + s;
}
/** jd日数转日期时间格式 */
function GJ1_calc1() {
var jd = GJ1_jd.value - 0;
if(jd < 0)
GJ1_out.innerHTML = '不能为负';
else
GJ1_out.innerHTML = JD.JD2str(jd);
}
/** 日期时间转jd日数 */
function GJ1_calc2(fs) {
var jd = JD.JD(year2Ayear(GJ1_y.value), GJ1_m.value - 0, (GJ1_d.value - 0) + timeStr2hour(GJ1_t.value) / 24);
if(fs == 1) {
jd -= GJ1_jd.value - 0;
if(jd >= 0)
jd += '(' + JD.JD2str(jd) + ')';
}
if(fs == 2)
jd -= JD.JD(year2Ayear(GJ1_y.value), 1, 1.5) - 1;
if(fs == 3)
jd -= JD.JD(year2Ayear(GJ1_y2.value), GJ1_m2.value - 0, (GJ1_d2.value - 0) + timeStr2hour(GJ1_t2.value) / 24);
GJ1_out.innerHTML = jd;
}
function GJ2_pi1(fs) {
var st = '正弦迭代T=2-√(4-T)',
ct = '余弦迭代T=2+√T';
var i,
a,
T,
p,
s = '刘徽割圆,';
if(fs == 0)
a = 6, T = 1, s += '6边 T=1 p=3  ' + ct;
if(fs == 1)
a = 4, T = 0, s += '4边 T=0 p=2√2' + ct;
if(fs == 2)
a = 6, T = 1, s += '6边 T=1 p=3  ' + st;
if(fs == 3)
a = 4, T = 2, s += '4边 T=2 p=2√2' + st;
if(fs == 4)
a = 6, T = 1, s += '6边 T=1 补弧田p=(1+T/24)*3  ' + st;
if(fs == 5)
a = 4, T = 2, s += '6边 T=1 补弧田p=(1+T/24)*2√2' + st;
s += '<table><tr><td>割圆次数</td><td>边数</td><td>T</td><td>PI</td></tr>';
for(i = 0; i < 30; i++) {
a *= 2;
if(fs == 0 || fs == 1)
T = 2 + sqrt(T), p = a * sqrt(2 - sqrt(T)) / 2;
if(fs == 2 || fs == 3)
T /= 2 + sqrt(4 - T), p = a * sqrt(T) / 2;
if(fs == 4 || fs == 5)
T /= 2 + sqrt(4 - T), p = a * sqrt(T) * (1 + T / 24) / 2;
s += '<tr><td>' + (i + 1) + '</td><td>' + a + '</td><td>' + T + '</td><td>' + p + '</td></tr>';
}
s += '</table>';
GJ2_out.innerHTML = s;
}
function GJ2_jie(x, B) {
var m = Math.pow(10, floor(Math.log(x / B) / 2.3));
if(m < 1)
m = 1;
return floor(x / m + 0.5) * m;
}
function GJ2_pi2() {
var i,
R = GJ2_r.value - 0,
a = 6,
T = 1 * R * R;
var s = ' 从6边开始 T=R*R,正弦迭代T=2-√(4-T),弦长、差幂计算保留3位有效字就已足够用,计算PI=a*√(T/4)则采用全精度。<br>' + ' 如果祖冲之算出下表中的差幂ΔS=aR(H/4R)<sup>3</sup>,那么实际每行只需计算T,不必算PI就可得到差幂。如果祖冲之算出更精确的差幂是4ΔS/3,那么他只需割圆5次(192边)就得到3.1415926。<br>' + '<table><tr align=center><td>割圆次数<br>i</td><td>边数<br>a</td><td>迭代变量<br>T</td><td>弦长<br>H=sqrt(T)</td><td>差幂<br>ΔS</td><td>精差幂<br>ΔJ</td><td>圆周率<br>PI(毫)</td></tr>';
for(i = 0; i < 25; i++) {
a *= 2;
T /= 2 + sqrt(4 * R * R - T) / R,
T = GJ2_jie(T, R);
if(T < R)
break;
var H = GJ2_jie(sqrt(T), 100);
var dS = GJ2_jie(H * H * H / 64 * a / R / R, 100);
var dJ = GJ2_jie(dS * 4 / 3, 100);
p = a * sqrt(T) / 2,
p = floor(p + 0.5);
s += '<tr align=right><td>' + (i + 1) + '</td><td>' + a + '</td><td>' + T + '</td><td>' + H + '</td><td>' + dS + '</td><td>' + dJ + '</td><td>' + p + '</td></tr>';
}
s += '</table>';
GJ2_out.innerHTML = s;
}
function GJ2_pi() {
var N = GJ2_N.value - 0 + 1,
a = new Array();
var i = Math.round(3.4 * N),
b = 2 * i + 1,
j,
f;
for(j = 0; j < N; j++)
a[j] = 0;
for(; i > 0; i--, b -= 2, a[0] += 2)
for(j = 0, f = 0; j < N; j++) {
f = a[j] * i + f * 10;
a[j] = Math.floor(f / b);
f %= b;
}
for(i = N - 1; i > 0; i--)
a[i - 1] += Math.floor(a[i] / 10), a[i] %= 10;
a[0] = '<br>';
for(i = 1; i < N; i++) {
if(i % 10 == 0)
a[i] += ' ';
if(i % 100 == 0)
a[i] += '<br>';
}
GJ2_out.innerHTML = '本算法为低速算法,计算位数不宜过大,否则计算时间太长。<br>' + '以下计算圆周率,计算公式:PI/2=1+1/3+1*2/(1*3*5)+1*2*3/(1*3*5*7)+...<br>' + '通过提取公因子得连分式形式:PI=2+1/3(2+2/5(2+3/7(2+...,这样只需迭代计算a=2+a*n/(2n+1),n=N,…3,,2,1即可得到a=PI<br>' + '最后5位可能有错:<font color=red>PI=3.' + a.join('') + '</font>';
}
function GJ2_cls() {
GJ2_out.innerHTML = '';
}
</script>
</head>
<body>
<table width=770 cellspacing=0 cellpadding=2>
<tr>
<td width="100%" align=right>
<!--本地时间-->
<span id=Clock1 style='color:red;font-weight:bold'></span>
<!--时区选择-->
<select id=Sel_zhou onchange="change_zhou()"></select>
<select id=Sel_dq onchange="change_dq()"></select>
<!--外地时间-->
<span id=Sel_sqsm></span>&nbsp;<span id=Clock2 style='font-weight:bold;color:blue'></span>
</td>
</tr>
<tr>
<td width="100%" bgcolor="#E0E0FF">
<!--软件版本-->
<!-- <span style='font-family:楷体_GB2312;font-size:16px;color:#FF0000;font-weight:bold'>寿星</span><span style='font-size:12px;font-weight:bold'><i>天文历(V5.10p)</i></span> -->
<span style='font-family:楷体_GB2312;font-size:16px;color:#FF0000;font-weight:bold'>天文</span><span style='font-size:12px;font-weight:bold'><i>万年历法</i></span>
<!--经纬选择-->
<select id=Sel1 onchange="change(0)" style="width:80px"></select>
<select id=Sel2 onchange="change2()"></select>
<!--经度纬度-->
<span id=Cal_zdzb></span>
</td>
</tr>
<tr>
<td>
<input type=button onclick="showPage(1)" value="月历">
<input type=button onclick="showPage(2)" value="年历">
<input type=button onclick="showPage(3)" value="日月食">
<input type=button onclick="showPage(4)" value="地方食">
<input type=button onclick="showPage(5)" value="星历">
<a href='javascript:showPage(6)'>天象</a>
<a href='javascript:showPage(7)'>恒星</a>
<a href='javascript:showPage(8)'>气朔</a>
<a href='javascript:showPage(9)'>升降</a>
<input type=button onclick="showPage(10)" value="日食概略">
<a href='javascript:showPage(11)'>八字</a>
<a href='javascript:showPage(12)'>工具</a>
<a href='javascript:showPage(13)'>常数</a>
<a href='javascript:showHelp(1);'>帮助</a>
</td>
</tr>
</table>
<table width=770 class=bd1 cellpadding=0 cellspacing=0>
<!--帮助-->
<tr>
<td class=dBot2 colspan=2 id=help style="display:none"></td>
</tr>
<!--月历表-->
<tr id=page1>
<td width="35%" valign=top style='line-height: 150%' class=dRig>
<br><b> 提示:</b>如果按住ctrl键不放,再将鼠标移出日历区,即可保持该日信息摘要不变; 日月升降是本地时间,气朔时刻是北京时间;输入公元前212年方法是B212或*212或-211;BC4713至9999年有效,
<font color=red><b><i>BC722年以后与实历相符。</i></b></font>
<br><br>
<!--日月出没-->
<div align=center id=Cal5></div>
<br>
<!--月相节气-->
<div align=center id=Cal4></div>
</td>
<td width="65%" valign=top>
<!--月历表-->
<table width="100%" cellspacing=0 cellpadding=0>
<tr>
<td>
公元<input type=text id=Cal_y size=4 value=2008>
<input type=text maxlength=2 id=Cal_m size=2 value=1>
<input type=button value="确定" onclick='getLunar()'>
<input type=button value="年↑" onclick='changeYear(0)'>
<input type=button value="年↓" onclick='changeYear(1)'>
<input type=button value="月↑" onclick='changeMonth(0)'>
<input type=button value="月↓" onclick='changeMonth(1)'>
<input type=button onclick='changeMonth(2)' value='今'>
<br>
<div id=Cal2></div>
</td>
</tr>
</table>
</td>
</tr>
<!--年历表-->
<tr id=page2 style="display:none">
<td class=dBot2 colspan=2>
公元<input type=text size=4 id=Cp2_y value=2008>
<input type=checkbox id=Cp2_tg checked>时刻/干支
<input type=button onclick="getNianLi(0)" value="确定">
<input type=button onclick="getNianLi(-1)" value="年↑">
<input type=button onclick="getNianLi(1)" value="年↓"> 年数
<input type=text size=2 id=Cp2_n value=2>
<input type=button onclick="getNianLiN()" value="多年">
<div id=Cal7></div>
</td>
</tr>
<!--日月食图表-->
<tr id=page3 style="display:none">
<td width=270 valign=top style='line-height: 150%' class=dRig>
<div align=center>暂停<input id=Cal_pause type=checkbox checked></div>
<br>
<div id=Cal_zb></div>
</td>
<td width=500 valign=top>
<table width="100%" cellspacing=0 cellpadding=0>
<tr>
<td>
经度<input id=Cb_J type=text size=11 value=0> 纬度
<input id=Cb_W type=text size=9 value=0> 海拔
<input id=Cb_high type=text size=2 value=0>km 北/南
<input id=Cb_bei type=checkbox> 时角坐标
<input id=Cb_sjzb type=checkbox>
<a href="javascript:showHelp(2)">帮助</a><br> 公元
<input id=Cb_y type=text size=4 value=2008>
<input id=Cb_m type=text size=2 value=8 maxleng=2>
<input id=Cb_d type=text size=2 value=1>
<input id=Cb_t type=text size=8 value="18:17:15">UTC/TD
<input id=Cb_ut type=checkbox checked> NASA
<input id=Cb_nasa type=checkbox>
<input type=button value="今" onclick="tu_calc(0)">
<br> 朔望粗定位
<input type=button value="&lt;-" onclick="tu_calc(4)">
<input type=button value="朔" onclick="tu_calc(5)">
<input type=button value="+&gt;" onclick="tu_calc(6)">
<input type=button value="&lt;-" onclick="tu_calc(7)">
<input type=button value="望" onclick="tu_calc(8)">
<input type=button value="+&gt;" onclick="tu_calc(9)"> 步长
<input type=text id=Cb_step size=3 value=300>
<input type=button value="&lt;-" onclick="tu_calc(1)">
<input type=button value="确定" onclick="tu_calc(2)">
<input type=button value="+&gt;" onclick="tu_calc(3)"> 日食路径
<input id=Cb_phSave type=checkbox>
</td>
</tr>
<tr>
<td id=Cb_zb></td>
</tr>
<tr>
<td align=center><canvas id="Can1" width="480" height="350"></canvas></td>
</tr>
<tr>
<td align=center>
<font color=red>本图表中,天坐标(横坐标方位角,纵坐标高度角)与地坐标合用,括号内为地标。</font>
</td>
</tr>
<tr>
<td>
<table width="100%" cellspacing=0 cellpadding=0>
<tr>
<!--日食界线表-->
<td id=Cb_b1 width="50%"></td>
<!--日月食时刻表-->
<td id=Cb_b2 width="50%"></td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<!--地方日食表-->
<tr id=page4 style="display:none">
<td class=dBot2 colspan=2 align=center>
公元<input id=Cc_y type=text size=4 value=2008>
<input id=Cc_m type=text size=2 value=8 maxleng=2>
<input id=Cc_d type=text size=2 value=1>
<input type=button value="&lt;-" onclick="dfRS(1)">
<input type=button value="朔" onclick="dfRS(0)">
<input type=button value="+&gt;" onclick="dfRS(2)"> NASA
<input id=Cc_nasa type=checkbox><br>
<textarea cols=107 rows=15 id=Cc_db>*地名,纬度,经度,海拔(米)
北京, 39.93, 116.37, 31 # 天津, 39.14, 117.19, 3 # 太原, 37.87, 112.56, 778
沈阳, 41.78, 123.41, 41 # 长春, 43.89, 125.31, 237 # 上海, 31.23, 121.46, 5
南京, 32.05, 118.76, 9 # 杭州, 30.29, 120.17, 42 # 拉萨, 29.66, 91.13,3658
莆田, 25.43, 119.02, 30 # 西安, 34.27, 108.95, 397 # 银川, 38.46, 106.26,1112
香港, 22.28, 114.15, 32 # 乌市, 43.79, 87.61, 918 # 洛阳, 34.62, 112.45, 353
开封, 34.80, 114.30, 75 # 安阳, 36.10, 114.38, 800 # 咸阳, 34.33, 108.70, 386
曲阜, 35.58, 116.98, 150 # 成都, 30.67, 104.07, 506 # 重庆, 29.57, 106.55, 260
武汉, 30.60, 114.30, 25 # 广州, 23.13, 113.27, 7 # 昆明, 25.05, 102.72,1891
台北, 25.03, 121.50, 9 # 哈市, 45.80, 126.53, 150
</textarea>
<br>
<textarea cols=107 rows=15 id=Cc_tb></textarea><br> P1指两圆相初亏切点的方位,从日面北点起算(赤道坐标系中,日面顶点),向东测量。日面在我们的视觉平面上,按上北下南左东右西确定方向。
<br> P2指复圆方位角。V1,V2也是切点方位,起算点从地平坐标中的日面顶点开始。
<br> 食分中的*号表示日没食分,食甚发生在日没后;#号表示日出食分,食甚发生在日出前。
</td>
</tr>
<!--行星星历表-->
<tr id=page5 style="display:none">
<td class=dBot2 colspan=2 align=center>
<select id=Cd_xt>
<option value=1 selected>水星</option>
<option value=2>金星</option>
<option value=3>火星</option>
<option value=4>木星</option>
<option value=5>土星</option>
<option value=6>天王</option>
<option value=7>海王</option>
<option value=8>冥王</option>
<option value=9>太阳</option>
<option value=10>月亮</option>
</select>
<input id=Cd_y type=text size=4 value=2008>
<input id=Cd_m type=text size=2 value=1 maxleng=2>
<input id=Cd_d type=text size=2 value=1>
<input id=Cd_t type=text size=8 value="00:00:00"> UTC/TD
<input id=Cd_ut type=checkbox checked>
<a href="javascript:showHelp(4)">帮助</a>
<br> 经度
<input id=Cd_J type=text size=10 value=0> 纬度
<input id=Cd_W type=text size=8 value=0> 间隔
<input id=Cd_dt type=text size=4 value=1>(天) 个数
<input id=Cd_n type=text size=4 value=10>
<input type=button value="确定" onclick="pCalc()">
<br>
<textarea cols=64 rows=20 id=Cd_tab></textarea><br>
</td>
</tr>
<!--天象表-->
<tr id=page6 style="display:none">
<td class=dBot2 colspan=2 align=center>
<input id=Ce_y type=text size=4 value=2008>
<input id=Ce_m type=text size=2 value=1 maxleng=2>
<input id=Ce_d type=text size=2 value=1>日 TD 个数
<input id=Ce_n type=text size=4 value=10>
<a href="javascript:showHelp(5)">帮助</a><br>
<a href="javascript:tianXiang(1,0)">月亮近点</a>
<a href="javascript:tianXiang(2,0)">月亮远点</a>
<a href="javascript:tianXiang(3,0)">月亮升交</a>
<a href="javascript:tianXiang(4,0)">月亮降交</a>
<a href="javascript:tianXiang(5,0)">地球近日</a>
<a href="javascript:tianXiang(6,0)">地球远日</a>
<br>
<a href="javascript:tianXiang(7,0)">水东大距</a>
<a href="javascript:tianXiang(8,0)">水西大距</a>
<a href="javascript:tianXiang(9,0)">金东大距</a>
<a href="javascript:tianXiang(10,0)">金西大距</a>
<br>[赤经合月]
<a href="javascript:tianXiang(11,1)"></a>
<a href="javascript:tianXiang(11,2)"></a>
<a href="javascript:tianXiang(11,3)"></a>
<a href="javascript:tianXiang(11,4)"></a>
<a href="javascript:tianXiang(11,5)"></a>
<a href="javascript:tianXiang(11,6)"></a>
<a href="javascript:tianXiang(11,7)"></a>
<br>[黄经合日]
<a href="javascript:tianXiang(12,1)">水上</a>
<a href="javascript:tianXiang(12,2)">金上</a>
<a href="javascript:tianXiang(12,3)"></a>
<a href="javascript:tianXiang(12,4)"></a>
<a href="javascript:tianXiang(12,5)"></a>
<a href="javascript:tianXiang(12,6)"></a>
<a href="javascript:tianXiang(12,7)"></a>
[行星顺留]
<a href="javascript:tianXiang(14,1)"></a>
<a href="javascript:tianXiang(14,2)"></a>
<a href="javascript:tianXiang(14,3)"></a>
<a href="javascript:tianXiang(14,4)"></a>
<a href="javascript:tianXiang(14,5)"></a>
<a href="javascript:tianXiang(14,6)"></a>
<a href="javascript:tianXiang(14,7)"></a>
<br>[黄经冲日]
<a href="javascript:tianXiang(13,1)">水下</a>
<a href="javascript:tianXiang(13,2)">金下</a>
<a href="javascript:tianXiang(13,3)"></a>
<a href="javascript:tianXiang(13,4)"></a>
<a href="javascript:tianXiang(13,5)"></a>
<a href="javascript:tianXiang(13,6)"></a>
<a href="javascript:tianXiang(13,7)"></a>
[行星逆留]
<a href="javascript:tianXiang(15,1)"></a>
<a href="javascript:tianXiang(15,2)"></a>
<a href="javascript:tianXiang(15,3)"></a>
<a href="javascript:tianXiang(15,4)"></a>
<a href="javascript:tianXiang(15,5)"></a>
<a href="javascript:tianXiang(15,6)"></a>
<a href="javascript:tianXiang(15,7)"></a>
<br>
<textarea cols=64 rows=20 id=Ce_tab></textarea><br>
</td>
</tr>
<!--恒星星历表-->
<tr id=page7 style="display:none">
<td class=dBot2 colspan=2 align=center>
<select id=Cf_xk onchange='javascript:showHXK(this.options[this.selectedIndex].value)'>
</select>
<select id=Cf_lx>
<option value=0>视位置</option>
<option value=1>站坐标</option>
<option value=2>平位置</option>
</select>
<input id=Cf_y type=text size=4 value=2008>
<input id=Cf_m type=text size=2 value=1 maxleng=2>
<input id=Cf_d type=text size=2 value=1>
<input id=Cf_t type=text size=8 value="00:00:00"> UTC/TD
<input id=Cf_ut type=checkbox checked> 略短章
<input id=Cf_nsn type=checkbox>
<br> 经度
<input id=Cf_J type=text size=10 value=0> 纬度
<input id=Cf_W type=text size=8 value=0> 间隔
<input id=Cf_dt type=text size=4 value=10>(天) 个数
<input id=Cf_n type=text size=4 value=10>
<input type=button value="确定" onclick="aCalc()">
<a href="javascript:showHelp(6)">帮助</a><br>
<textarea cols=75 rows=15 id=Cf_db style="font-family:宋体;font-size: 12px" wrap=off></textarea>
<br>
<textarea cols=75 rows=15 id=Cf_xl style="font-size: 12px"></textarea>
<br>
</td>
</tr>
<!--气朔表-->
<tr id=page8 style="display:none">
<td class=dBot2 colspan=2>
<input id=Cp8_y type=text size=4 value=2008>
<input id=Cp8_n type=text size=4 value=24>
<input type=button value="定朔" onclick="suoCalc(0)">
<input type=button value="定望" onclick="suoCalc(180)">
<input type=button value="上弦" onclick="suoCalc(90)">
<input type=button value="下弦" onclick="suoCalc(270)">
<input type=button value="任意" onclick="suoCalc(-1)">
<input type=button value="定气" onclick="qiCalc()">
<input type=button value="定候" onclick="houCalc()">
<div id=Cp8_out></div>
</td>
</tr>
<!--升降表-->
<tr id=page9 style="display:none">
<td class=dBot2 colspan=2>
经度<input id=Cp9_J type=text size=10 value="0"> 纬度
<input id=Cp9_W type=text size=8 value="0">
<input id=Cp9_y type=text size=4 value=2008>
<input id=Cp9_m type=text size=2 value=1 maxleng=2>
<input id=Cp9_d type=text size=2 value=1>
<input type=button value="确定" onclick="shengjiang()">
<input type=button value="太阳升降" onclick="shengjiang2()">
<input type=button value="时差表" onclick="shengjiang3()">
<br>
<div id=Cp9_out></div>
</td>
</tr>
<!--日食概略图-->
<tr id=page10 style="display:none">
<td class=dBot2 colspan=2>
<table width="100%" cellspacing=0 cellpadding=0>
<tr>
<td>
公元<input id=Cp10_y type=text size=4 value=2008>
<input id=Cp10_m type=text size=2 value=8 maxleng=2>月 月数
<input type=text id=Cp10_an size=3 value=200>
<input type=button value="搜索" onclick="tuGL_search(0)">
<input type=button value="精搜索" onclick="tuGL_search(1)">
<div id=Cp10_b1></div>
<font color=red><b>选定时间:</b></font><span id=Cp10_jdstr>2008-08-01 10:14:30</span>TD
<b>JDE</b>=<input id=Cp10_jd type=text size=14 value=2454679.926741> 步长(可负)
<input type=text id=Cp10_step size=7 value=6585.32>
<select onchange='javascript:document.all.Cp10_step.value=this.options[this.selectedIndex].value'>
<option value=6585.32>默认</option>
<option value=29.5306>朔望</option>
<option value=6585.32>沙罗</option>
<option value=346.620>食年</option>
</select>
界线<input type=checkbox id=Cp10_showJX checked>
<input type=button value="&lt;-" onclick="tu2_calc(3)">
<input type=button value="特征" onclick="tu2_calc(2)">
<input type=button value="+&gt;" onclick="tu2_calc(4)">
<input type=button value="界线表" onclick="tu2_jxb()">
<hr> 黄/赤
<input type=checkbox id=Cp10_hc> 步数
<input type=text id=Cp10_bn size=3 value=10>
<input type=button value="确定" onclick="tu2_calc(5)">
</td>
</tr>
<tr>
<td id=Cp10_tz></td>
</tr>
<tr>
<td align=center><canvas id="Can2" width="480" height="420"></canvas></td>
</tr>
<tr>
<td id=Can3_pan>
平面中心:经<input type=textbox id=Cp10_J0 value="0" size=5><input type=textbox id=Cp10_W0 value="0" size=5> 球半径
<input type=textbox id=Cp10_eR value="250" size=5>
<select id=Cp10_tylx>
<option value=0>斜轴正射方位投影</option>
<option value=1>斜轴等距方位投影</option>
<option value=2>斜轴等积方位投影</option>
<option value=3>斜轴等角方位投影</option>
<option value=4>摩尔威特等积投影</option>
<option value=5>正轴等距圆柱投影</option>
<option value=6>正轴等角圆柱投影</option>
<option value=7>正轴多圆锥投影</option>
<option value=8>中国灯笼投影</option>
</select>
<input type=button value="经+" onclick="tu3_xz(0)">
<input type=button value="经-" onclick="tu3_xz(1)">
<input type=button value="纬+" onclick="tu3_xz(2)">
<input type=button value="纬-" onclick="tu3_xz(3)">
<input type=button value="确定" onclick="tu3_xz(4)">
<br>
<b>JDE</b>=<input id=Cp10_jd2 type=text size=13 value=2454679.926741>
<b>步长</b><input id=Cp10_step2 type=text size=4 value="180">
<input type=button value="-" onclick="tu3_yingzi(1)">
<input type=button value="影子" onclick="tu3_yingzi(0)">
<input type=button value="+" onclick="tu3_yingzi(2)">
<b>局部显示(0.1球半径为单位)</b> x0
<input id=Cp10_x0 type=text size=3 value="0"> y0
<input id=Cp10_y0 type=text size=3 value="0"> dx
<input id=Cp10_dx type=text size=3 value="10"> dy
<input id=Cp10_dy type=text size=3 value="10">
</td>
</tr>
<tr>
<td align=center><canvas id="Can3" width="700" height="520"></canvas></td>
</tr>
<tr>
<td>
<hr> 小圆点为北极,北极向阳高亮,背阳变黑,只显示最后一条线的北极。 站在日心观测,斜线为白道,水平线为赤道(用户可选黄道),竖直线过地心自转轴(或黄轴), 大圆是贝塞尔基面上的地球圆面。方位角给出大阳的地平坐标。全的食分为月日视径比,食带宽的单位是千米。
<br> 类型:T全食,T0无中心全食,T1有中心全食但本影没有完全进入,A环食,A0无中心环食, A1有中心环食但伪本影没有全部进入地球,P偏食,H环全环,H2全全环,H3环全全。 因为只采用二点线性插值,所以P类型(γ值较大时)的精度稍差一些。
</td>
</tr>
</table>
</td>
</tr>
<!--命理八字-->
<tr id=page11 style="display:none">
<td class=dBot2 colspan=2>
经度<input id=Cp11_J type=text size=10 value="0"> 公元
<input type=text id=Cml_y size=4 maxlength=5 value='2008'>
<input type=text id=Cml_m size=2 maxlength=2 value='01'>
<input type=text id=Cml_d size=2 maxlength=2 value='01'>
<input type=text id=Cml_his size=8 value='12:00:00'>
<input type=button value="确定" onclick='ML_calc()'>
<input type=button value="此刻" onclick='ML_settime()'>
<div id=Cal6></div>
</td>
</tr>
<!--工具-->
<tr id=page12 style="display:none">
<td class=dBot2 colspan=2>
儒略日计算1: JD <input id=GJ1_jd type=text size=10 value="2451545">
<input type=button value="确定" onclick='GJ1_calc1()'>
<span id=GJ1_out style="font-size:16;color:red"></span><br> 儒略日计算2:公元
<input id=GJ1_y type=text size=4 value=2008>
<input id=GJ1_m type=text size=2 value=1 maxleng=2>
<input id=GJ1_d type=text size=2 value=1>
<input id=GJ1_t type=text size=8 value="12:00:00">
<input type=button value="转儒略日" onclick='GJ1_calc2(0)'>
<input type=button value="减去上行" onclick='GJ1_calc2(1)'>
<input type=button value="年内积日" onclick='GJ1_calc2(2)'>
<br> 儒略日计算3:公元
<input id=GJ1_y2 type=text size=4 value=2000>
<input id=GJ1_m2 type=text size=2 value=1 maxleng=2>
<input id=GJ1_d2 type=text size=2 value=1>
<input id=GJ1_t2 type=text size=8 value="12:00:00">
<input type=button value="两行相减" onclick='GJ1_calc2(3)'>
<hr>
<input type=button value="6边C" onclick='GJ2_pi1(0)'>
<input type=button value="4边C" onclick='GJ2_pi1(1)'>
<input type=button value="6边S" onclick='GJ2_pi1(2)'>
<input type=button value="4边S" onclick='GJ2_pi1(3)'>
<input type=button value="6边快速" onclick='GJ2_pi1(4)'>
<input type=button value="4边快速" onclick='GJ2_pi1(5)'> &nbsp; 半径R
<input type=text id=GJ2_r size=10 value='100000000'>
<input type=button value="祖冲之" onclick='GJ2_pi2()'>
<br>
<input type=text id=GJ2_N size=4 maxlength=5 value='100'>
<input type=button value="现代" onclick='GJ2_pi()'>
<input type=button value="现代2" onclick='GJ2_machin.pi()'>
<input type=button value="清除" onclick='GJ2_cls()'>
<div id=GJ2_out></div>
</td>
</tr>
<!--常数表等-->
<tr id=page13 style="display:none">
<td class=dBot2 colspan=2>
<b>定义常数</b><br> 儒略日:d = 86400秒<br> 儒略年:y = 365.25d<br> 儒略世纪:cy = 36525d<br> 儒略千年:ty = 365250d<br> 高斯引力常数:k = 0.017202098950000 (AU<sup>3</sup>/儒略日<sup>2</sup>)<sup>1/2</sup><br> 光速:c = 299792458米/秒<br>
<font color=red>注意:</font>J2000.0 = 2451545.0, J2001.0 = J2000.0 + 365.25, 其它类推。<br>
<b>初始常数</b><br> 一AU的光行时间:499.004783806(±0.00000001)秒
<br> 地球赤道半径:6378136.6米
<br> 地球形状引力因子:J
<sub>2</sub> = 0.0010826359<br> 地心引力常数:GE = 3.986004418*10<sup>14</sup><sup>3</sup>/秒<sup>2</sup><br> 引力常数:G = 6.67259(±0.00030)*10<sup>-11</sup><sup>3</sup>/(千克·秒<sup>2</sup>)<br> 黄经总岁差(标准历元2000年 IAU):
<I>p</I> = 5028".7969288/儒略世纪<br> 黄经总岁差积累:p =
<I>p</I>*t + 1".11113*t*t,t为儒略世纪数,近五十年内足够精确。<br> 黄赤交角(标准历元2000年):ε
<sub>0</sub> = 84381".448 IAU1976或IAU2000<br> 黄赤交角(标准历元2000年):ε
<sub>0</sub> = 84381".406 J2000赤道&J2000惯性黄道,常用<br> 黄赤交角(其它历元归算):ε = ε<sub>0</sub> - 46".836769*t,t为儒略世纪数,近百年内足够精确。<br> 黄赤交角:ε
<sub>0</sub> = 84381".409 DE405赤道&J2000惯性黄道<br> 月地质量比:μ = 0.0123000383 = 1/81.300560<br>
<b>推导常数</b><br> 一AU长度:1.49597870691*10
<sup>11</sup>米(±3米)<br> 章动常数(标准历元2000年):N = 9".2052331<br> 太阳视差:π = 8".794144<br> 光行差常数(标准历元2000年):κ = 20".49552<br> 地球扁率: f = 0.00335281 = 1/298.25642<br> 日心引力常数:GS = 1.32712442076*10<sup>20</sup><sup>3</sup>/秒<sup>2</sup><br> 太阳质量:S = GS/G = 1.9888*10<sup>30</sup>千克<br> 日地质量比:S/E = 332946.050895<br>
<b>行星质量系统(太阳与行星质量比)</b><br> 太阳:1         水星:6023600(±250)
<br> 金星:408523.71(±0.06) 地月:328900.561400
<br> 火星:3098708 (±9)   木星:1047.3486(±0.0008)<br> 土星:3497.898(±0.018) 海王:22902.98 (±0.03)<br> 天王:19412.24(±0.04)  冥王:1.352*10<sup>8</sup><br> 根据IAU,2006年第26届大会有关决议,冥王星被定义为矮行星。
<br>
<b>年长度</b><br> 回归年:365.24218968 - 0.0000000616(t-2000) = 365天05时48分45.1秒 at 2008.0<br> 恒星年:365.25636306 + 0.0000000010(t-2000) = 365天06时09分09.8秒 at 2008.0<br> 近点年:365.25963586 + 0.0000000317(t-2000) = 365天06时13分52.6秒 at 2008.0<br> 食 年:346.62007598 + 0.0000003240(t-2000) = 346天14时52分54.8秒 at 2008.0<br>
<b>月长度</b><br> 朔望月:29.53058885 + 0.0000000022(t-2000) = 29天12时44分02.9秒 at 2008.0<br> 回归月:27.32158224 + 0.0000000015(t-2000) = 27天07时43分04.7秒 at 2008.0<br> 恒星月:27.32166155 + 0.0000000019(t-2000) = 27天07时43分11.6秒 at 2008.0<br> 近点月:27.55454988 - 0.0000000104(t-2000) = 27天13时18分33.1秒 at 2008.0<br> 交点月:27.21222082 + 0.0000000038(t-2000) = 27天05时05分35.9秒 at 2008.0<br>
<b>说明</b><br> 年月长度的解析表达取自《2008年中国天文年历》,这些数据通常与早期IAU推荐值有关,常做为教科书标准参考值,本软件实际星历计算采用更理想的解析表达,以便与实际星历计算相符。行星质量系统取自JPL数值积分的初始值。黄经总岁差的IAU2000采用值与其它理论采用值几乎相同,每世纪一般只相差几个毫角秒。
</td>
</tr>
<!--版权区-->
<tr>
<td class=dTop2 colspan=2 align=center>
<!-- <font color=red> 邮箱 xunmeng04@163.com 许剑伟(福建莆田第十中学)保留版权<br/>
郑彦山(黑龙江.双鸭山) 增补制作于2014.05.13-2020.04.19(谷雨日) &copy; 2008-2020
</font> -->
</td>
</tr>
</table>
<div id=Cal_pan style="font-size:12px; position:absolute; z-index:1; width:160;FILTER: shadow(color=#333333,direction=135);display:none">
<div id=Cal_pan_in style="background-color:#5555A0;width:150;text-align:center;line-height: 150%; color:#FFFFFF; display:block;filter:Alpha(opacity=90)">
abc
</div>
<br>
</div>
<script>
//月历全局对象
var lun = new Lunar();
//现在日期
var curJD;
//当前时区
var curTZ;
//显示恒星库名称例表
function showHXK0() {
var i,
n;
for(i = 0; i < HXK.length; i++) {
n = HXK[i].indexOf('#');
addOp(document.all.Cf_xk, i, HXK[i].substr(0, n));
}
for(i = 0; i < xz88.length; i += 5) {
addOp(document.all.Cf_xk, i + 1000, xz88[i].substr(0, 3));
}
}
//显示恒星库
function showHXK(ind) {
ind -= 0;
var bt = ' RA(时分秒) DEC(度分秒) 自行1 自行2 视差 星等 星名 星座',
r = '';
if(ind < 100) {
r = HXK[ind];
var n = r.indexOf('#');
//去除第一行
r = r.substr(n, r.length - n);
} else if(ind >= 1000) {
r = schHXK(xz88[ind - 1000].substr(3, 3));
}
Cf_db.value = bt + r.replace(/\#/g, '\r\n');
}
showHXK0();
showHXK(0);
//恒星计算
function aCalc() {
//取屏幕时间
var jd = JD.JD(year2Ayear(Cf_y.value), Cf_m.value - 0, (Cf_d.value - 0) + timeStr2hour(Cf_t.value) / 24) - J2000;
//转为力学时
if(Cf_ut.checked)
jd += curTZ / 24 + dt_T(jd);
var dt = Cf_dt.value - 0,
n = Cf_n.value - 0;
//小于35天的称短周期项
var Q = Cf_nsn.checked ? 35 : 0;
//坐标类型
var lx = Cf_lx.options[Cf_lx.selectedIndex].value - 0;
//地标
var L = Cf_J.value / 180 * Math.PI;
var fa = Cf_W.value / 180 * Math.PI;
var i,
s = '',
F = getHXK(Cf_db.value, 0);
for(i = 0; i < n; i++, jd += dt)
s += hxCalc(jd / 36525, F, Q, lx, L, fa);
Cf_xl.value = s;
}
//天象时间格式化输出
function txFormatT(t) {
var t1 = t * 36525 + J2000;
var t2 = t1 - dt_T(t1 - J2000) - curTZ / 24;
return JD.JD2str(t1) + ' TD ' +
JD.JD2str(t2).substr(9, 11) + ' UT ';
}
function tianXiang(xm, xm2) {
//取屏幕时间
var jd = JD.JD(year2Ayear(Ce_y.value), Ce_m.value - 0, (Ce_d.value - 0)) - J2000;
var n = Ce_n.value - 0;
var s = '',
i,
re;
jd /= 36525;
//求月亮近远点
if(xm == 1 || xm == 2) {
for(i = 0; i < n; i++, jd = re[0] + 27.555 / 36525) {
//求近点
if(xm == 1)
re = XL.moonMinR(jd, 1);
//求远点
if(xm == 2)
re = XL.moonMinR(jd, 0);
s += txFormatT(re[0]) + re[1].toFixed(2) + '千米\r\n';
}
}
//求月亮升降交点
if(xm == 3 || xm == 4) {
for(i = 0; i < n; i++, jd = re[0] + 27.555 / 36525) {
//求升
if(xm == 3)
re = XL.moonNode(jd, 1);
//求降
if(xm == 4)
re = XL.moonNode(jd, 0);
s += txFormatT(re[0]) + rad2str(rad2mrad(re[1]), 0) + '\r\n';
}
}
//求地球近远点
if(xm == 5 || xm == 6) {
for(i = 0; i < n; i++, jd = re[0] + 365.259636 / 36525) {
//求近点
if(xm == 5)
re = XL.earthMinR(jd, 1);
//求远点
if(xm == 6)
re = XL.earthMinR(jd, 0);
s += txFormatT(re[0]) + re[1].toFixed(8) + ' AU\r\n';
}
}
//大距计算
if(xm == 7 || xm == 8) {
for(i = 0; i < n; i++, jd = re[0] + 115.8774777586 / 36525) {
//求水星东大距
if(xm == 7)
re = daJu(1, jd, 1);
//求水星东西距
if(xm == 8)
re = daJu(1, jd, 0);
s += txFormatT(re[0]) + (re[1] / Math.PI * 180).toFixed(5) + '度\r\n';
}
}
//大距计算
if(xm == 9 || xm == 10) {
for(i = 0; i < n; i++, jd = re[0] + 583.9213708245 / 36525) {
//求水星东大距
if(xm == 9)
re = daJu(2, jd, 1);
//求水星东西距
if(xm == 10)
re = daJu(2, jd, 0);
s += txFormatT(re[0]) + (re[1] / Math.PI * 180).toFixed(5) + '度\r\n';
}
}
//合月计算
if(xm == 11) {
s = '合月时间(TD UT) 星月赤纬差(小于1度可能月掩星,由视差决定)\r\n';
for(i = 0; i < n; i++, jd = re[0] + 28 / 36525) {
re = xingHY(xm2, jd);
s += txFormatT(re[0]) + (-re[1] / Math.PI * 180).toFixed(5) + '度\r\n';
}
}
if(xm == 12 || xm == 13) {
if(xm == 12)
s = xxName[xm2] + '合日(地内行星上合)\r\n';
if(xm == 13)
s = xxName[xm2] + '冲日(地内行星下合)\r\n';
s += '黄经合/冲日时间(TD UT) 星日赤纬差\r\n';
for(i = 0; i < n; i++, jd = re[0] + cs_xxHH[xm2 - 1] / 36525) {
if(xm == 12)
re = xingHR(xm2, jd, 0);
if(xm == 13)
re = xingHR(xm2, jd, 1);
s += txFormatT(re[0]) + (-re[1] / Math.PI * 180).toFixed(5) + '度\r\n';
}
}
//顺留
if(xm == 14 || xm == 15) {
if(xm == 14)
s = xxName[xm2] + '顺留\r\n';
if(xm == 15)
s = xxName[xm2] + '逆留\r\n';
s += '留时间(TD UT)\r\n';
for(i = 0; i < n; i++, jd = re + cs_xxHH[xm2 - 1] / 36525) {
if(xm == 14)
re = xingLiu(xm2, jd, 1);
if(xm == 15)
re = xingLiu(xm2, jd, 0);
s += txFormatT(re) + '\r\n';
}
}
Ce_tab.value = s;
}
//行星星历计算
function pCalc(xm) {
//取屏幕时间
var jd = JD.JD(year2Ayear(Cd_y.value), Cd_m.value - 0, (Cd_d.value - 0) + timeStr2hour(Cd_t.value) / 24) - J2000;
//转为力学时
if(Cd_ut.checked)
jd += curTZ / 24 + dt_T(jd);
var xt = Cd_xt.options[Cd_xt.selectedIndex].value;
var dt = Cd_dt.value - 0,
n = Cd_n.value - 0;
//地标
var L = Cd_J.value / 180 * Math.PI;
var fa = Cd_W.value / 180 * Math.PI;
if(n > 1000) {
alert("个数太多了");
return;
}
var s = '',
i;
//求星历
for(i = 0; i < n; i++, jd += dt) {
var jd2 = jd + 2451545;
s += JD.JD2str(jd2) + 'TD, JED = ' + jd2.toFixed(7) + ' ' + '\r\n';
s += xingX(xt, jd, L, fa) + '\r\n';
}
Cd_tab.value = s;
}
//=============日月食图表===========
//即时坐标计算
function zb_calc() {
if(Cal_pause.checked)
return;
var now = new Date();
//J2000起算的儒略日数
var jd = now / 86400000 - 10957.5;
jd += dt_T(jd);
//传入力学时间(J2000.0起算)
msc.calc(jd, Cb_J.value / radd, Cb_W.value / radd, 0);
Cal_zb.innerHTML = msc.toHTML(0);
}
//复制某时刻中心食地标,并计算该处日食
function zxsCopy(J, W) {
Cb_J.value = J;
Cb_W.value = W;
tu_calc(2);
}
//ly是取时间的方式,xm是计算的项目
function tu_calc(ly) {
//画布初始化
tu1.init(Can1);
tu1.showzb();
//J2000起算的儒略日数(当地时间)
var jd;
var vJ = Cb_J.value / radd;
var vW = Cb_W.value / radd;
//取屏幕时间
jd = JD.JD(year2Ayear(Cb_y.value), Cb_m.value - 0, (Cb_d.value - 0) + timeStr2hour(Cb_t.value) / 24) - J2000;
//取现在时间(UTC)
if(ly == 0)
jd = (new Date()) / 86400000 - 10957.5 - curTZ / 24, Cb_ut.checked = true;
if(ly == 1)
jd -= Cb_step.value / 86400;
//常规取时间
if(ly == 2);
if(ly == 3)
jd += Cb_step.value / 86400;
if(ly == 4)
jd -= 29.53;
if(ly == 5);
if(ly == 6)
jd += 29.53;
if(ly == 7)
jd -= 29.53;
if(ly == 8);
if(ly == 9)
jd += 29.53;
if(ly == 4 || ly == 5 || ly == 6)
jd = XL.MS_aLon_t2(Math.floor((jd + 8) / 29.5306) * pi2) * 36525;
if(ly == 7 || ly == 8 || ly == 9)
jd = XL.MS_aLon_t2(Math.floor((jd - 4) / 29.5306) * pi2 + Math.PI) * 36525;
if(ly >= 4 && ly <= 9) {
if(Cb_ut.checked)
jd -= curTZ / 24 + dt_T(jd);
}
//置时间
var ts = JD.JD2str(jd + J2000);
Cb_y.value = ts.substr(0, 5) - 0;
Cb_m.value = ts.substr(6, 2);
Cb_d.value = ts.substr(9, 2);
Cb_t.value = ts.substr(12, 8);
//转为力学时
if(Cb_ut.checked)
jd += curTZ / 24 + dt_T(jd);
var i;
msc.calc(jd, vJ, vW, Cb_high.value - 0);
//显示坐标
Cal_zb.innerHTML = msc.toHTML(1);
if(Cb_sjzb.checked) {
tu1.draw1b('sun', msc.sCJ, msc.sCW, msc.gst);
tu1.draw1b('moon', msc.mCJ, msc.mCW, msc.gst);
} else {
tu1.draw1('sun', msc.sPJ, msc.sPW, Cb_bei.checked);
tu1.draw1('moon', msc.mPJ, msc.mPW, Cb_bei.checked);
}
var msHJ = rad2mrad(msc.mHJ - msc.sHJ);
var s = '',
J1,
W1,
J2,
W2,
sr,
mr,
er,
Er,
d0,
d1,
d2;
//日食图表放大计算
if(msHJ < 3 / radd || msHJ > 357 / radd) {
//用未做大气折射的来计算日食
J1 = msc.mCJ2,
W1 = msc.mCW2,
J2 = msc.sCJ2,
W2 = msc.sCW2;
sr = msc.sRad,
mr = msc.mRad;
d1 = j1_j2(J1, W1, J2, W2) * rad,
d0 = mr + sr;
tu1.draw2a(J1, W1, J2, W2, mr, sr);
tu1.draw3(msc.zx_J, msc.zx_W, Cb_phSave.checked);
s2 = '此刻月亮本影中心线不经过地球。';
if(msc.zx_W != 100) {
var zxsJ = (msc.zx_J / Math.PI * 180).toFixed(5);
var zxsW = (msc.zx_W / Math.PI * 180).toFixed(5);
s2 = '食中心地标:经 ' + zxsJ + ' 纬 ' + zxsW +
' <a href="javascript:zxsCopy(' + zxsJ + ',' + zxsW + ')">此地</a>';
}
s = '日月测站视半径 ' + m2fm(sr, 2, 0) + '及' + m2fm(mr, 2, 0) + ' <font color=red>' + s2 + '</font><br>' +
'日月中心视距 ' + m2fm(d1, 2, 0) + ' 日月半径和 ' + m2fm(d0, 2, 0) + ' 半径差 ' + m2fm(sr - mr, 2, 0) + ' 距外切 ' + m2fm(d1 - d0, 2, 0);
Cb_zb.innerHTML = s;
//显示南北界数据
//视径选择
rsPL.nasa_r = 0;
if(Cb_nasa.checked)
rsPL.nasa_r = 1;
s = JD.JD2str(jd + J2000) + ' TD<br>南北界点:经度    纬度<br>',
mc = new Array('食中心点', '本影北界', '本影南界', '半影北界', '半影南界');
rsPL.nbj(jd);
for(i = 0; i < 5; i++) {
s += mc[i] + ':';
if(rsPL.V[i * 2 + 1] == 100) {
s += '无     无<br>';
continue;
}
s += (rsPL.V[i * 2] * radd).toFixed(5) + ' ' + (rsPL.V[i * 2 + 1] * radd).toFixed(5) + '<br>';
}
s += '中心类型:' + rsPL.Vc + '食<br>';
s += '本影南北界距约' + rsPL.Vb;
Cb_b1.innerHTML = s;
//显示食甚等时间
//视径选择
rsPL.nasa_r = 0;
if(Cb_nasa.checked)
rsPL.nasa_r = 1;
var td = ' TD',
mc = new Array('初亏', '食甚', '复圆', '食既', '生光');
rsPL.secMax(jd, vJ, vW, Cb_high.value - 0);
//环食没有食既和生光
if(rsPL.LX == '环')
mc[3] = '环食始', mc[4] = '环食终';
var s = '时间表 (日' + rsPL.LX + '食)<br>'
for(i = 0; i < 5; i++) {
jd = rsPL.sT[i];
if(!jd)
continue;
//转为UTC(本地时间)
if(Cb_ut.checked)
jd -= curTZ / 24 + dt_T(jd), td = ' UTC';
s += mc[i] + ':' + JD.JD2str(jd + J2000) + td + '<br>';
}
s += '时长: ' + m2fm(rsPL.dur * 86400, 1, 1) + '<br>';
s += '食分: ' + rsPL.sf.toFixed(5) + rsPL.sflx + '<br>';
s += '月日视径比: ' + rsPL.b1.toFixed(5) + '(全或环食分)<br>';
s += '是否NASA径比(1是,0否): ' + rsPL.nasa_r + '<br>';
s += '食分指日面直径被遮比例';
Cb_b2.innerHTML = s;
return;
}
//月食图表放大计算
if(msHJ > 170 / radd && msHJ < 190 / radd) {
J1 = msc.mCJ,
W1 = msc.mCW,
J2 = msc.sCJ + Math.PI,
W2 = -msc.sCW;
//用未做大气折射的来计算日食
er = msc.eShadow,
Er = msc.eShadow2,
mr = msc.e_mRad;
d1 = j1_j2(J1, W1, J2, W2) * rad,
d0 = mr + er,
d2 = mr + Er;
tu1.draw2b(J1, W1, J2, W2, mr, er, Er);
s = '本影半径 ' + m2fm(er, 2, 0) + ' 半影半径 ' + m2fm(Er, 2, 0) + ' 月亮地心视半径 ' + m2fm(mr, 2, 0) + '<br>' +
'影月中心距 ' + m2fm(d1, 2, 0) + ' 影月半径和 ' + m2fm(d0, 2, 0) + ' 距相切 <font color=red>' + m2fm(d1 - d0, 2, 0) + '</font> 距第二相切 ' + m2fm(d1 - d2, 2, 0);
Cb_zb.innerHTML = s;
//显示月食食甚等
var td = ' TD',
mc = new Array('初亏', '食甚', '复圆', '半影食始', '半影食终', '食既', '生光');
ysPL.lecMax(jd);
var s = '时间表(月' + ysPL.LX + '食)<br>';
for(i = 0; i < 7; i++) {
jd = ysPL.lT[i];
if(!jd)
continue;
//转为UTC(本地时间)
if(Cb_ut.checked)
jd -= curTZ / 24 + dt_T(jd), td = ' UTC';
s += mc[i] + ':' + JD.JD2str(jd + J2000) + td + '<br>';
}
s += '食分:' + ysPL.sf.toFixed(5) + '<br>';
s += '食分指月面直径被遮比例';
Cb_b2.innerHTML = s;
Cb_b1.innerHTML = '';
return;
}
Cb_zb.innerHTML = Cb_b1.innerHTML = Cb_b2.innerHTML = '';
}
//==================日食概略图=================
//显示界线表
function tu2_jxb() {
//取屏幕时间
var jd = Cp10_jd.value - J2000;
//归朔
jd = XL.MS_aLon_t2(int2((jd + 8) / 29.5306) * Math.PI * 2) * 36525;
rsGS.init(jd, 7);
Cp10_tz.innerHTML = rsGS.jieX3(jd);
}
//转到详细日食图表页面
function tu2_xx(jd) {
//置时间
var ts = JD.JD2str(jd + J2000);
Cb_y.value = ts.substr(0, 5) - 0;
Cb_m.value = ts.substr(6, 2);
Cb_d.value = ts.substr(9, 2);
Cb_t.value = ts.substr(12, 8);
Cb_ut.checked = false;
showPage(3);
}
//查找日食
function tuGL_search(fs) {
var i,
k,
r,
s = '',
s2 = '',
n = Cp10_an.value - 0;
//取屏幕时间
var jd = JD.JD(year2Ayear(Cp10_y.value), Cp10_m.value - 0, 0) - J2000;
//定朔
jd = XL.MS_aLon_t2(int2((jd + 8) / 29.5306) * Math.PI * 2) * 36525;
for(i = 0, k = 0; i < n; i++) {
//低精度高速搜索
r = ecFast(jd);
//排除不可能的情况,加速计算
if(r.lx == 'NN') {
jd += 29.5306;
continue;
}
if(!r.ac) {
//低精度
if(fs == 0)
rsGS.init(jd, 2);
//高精度
if(fs == 1)
rsGS.init(jd, 7);
r = rsGS.feature(jd);
}
if(r.lx != 'N') {
s += '<a href="javascript:tu2_calc(1,' + r.jd + ');">' + JD.JD2str(r.jd + J2000).substr(0, 11) + '</a>';
s += r.lx;
k++;
if(k % 10 == 0)
s += '<br>';
if(k % 100 == 0)
s2 += s, s = '';
}
jd = r.jd + 29.5306;
}
Cp10_b1.innerHTML = s2 + s;
}
var tu3_buff = 0;
function tu2_calc(fs, jd0) {
tu2.init(Can2);
if(fs == 0)
return;
var step = Cp10_step.value - 0;
//取屏幕时间
var jd = Cp10_jd.value - J2000;
if(fs == 1)
jd = jd0;
//保持时间不变
if(fs == 2);
if(fs == 3)
jd -= step;
if(fs == 4)
jd += step;
//归朔
jd = XL.MS_aLon_t2(int2((jd + 8) / 29.5306) * Math.PI * 2) * 36525;
//保存在屏幕上
Cp10_jd.value = Cp10_jd2.value = (jd + J2000).toFixed(6);
//显示时间串
Cp10_jdstr.innerHTML = JD.JD2str(jd + J2000);
//计算单个日食
if(fs == 1 || fs == 2 || fs == 3 || fs == 4) {
rsGS.init(jd, 7);
//特征计算
var r = rsGS.feature(jd);
var lxb = {
T: '全食',
A: '环食',
P: '偏食',
T0: '无中心全食',
T1: '部分本影有中心全食',
A0: '无中心环食',
A1: '部分伪本影有中心全食',
H: '全环全',
H2: '全全环',
H3: '环全全'
};
if(r.lx == 'N')
Cp10_tz.innerHTML = '无日食';
else
Cp10_tz.innerHTML = '<table><tr>' +
'<td class=dRB><b>本次日食概述(力学时)</b><br>'
+
'偏食始:' + JD.JD2str(r.gk3[2] + J2000) + ' ' + rad2str2(r.gk3[0]) + ',' + rad2str2(r.gk3[1]) + '<br>' +
(r.gk1[2] != 0 ? '中心始:' + JD.JD2str(r.gk1[2] + J2000) + ' ' + rad2str2(r.gk1[0]) + ',' + rad2str2(r.gk1[1]) + '<br>' : '') +
(r.gk5[1] != 100 ? '视午食:' + JD.JD2str(r.gk5[2] + J2000) + ' ' + rad2str2(r.gk5[0]) + ',' + rad2str2(r.gk5[1]) + '<br>' : '') +
(r.gk2[2] != 0 ? '中心终:' + JD.JD2str(r.gk2[2] + J2000) + ' ' + rad2str2(r.gk2[0]) + ',' + rad2str2(r.gk2[1]) + '<br>' : '') +
'偏食终:' + JD.JD2str(r.gk4[2] + J2000) + ' ' + rad2str2(r.gk4[0]) + ',' + rad2str2(r.gk4[1]) + '</td>'
+
'<td class=dRB><b>中心点特征</b><br>' +
'影轴地心距 γ = ' + r.D.toFixed(4) + '<br>' +
'中心地标 (经,纬) = ' + (r.zxJ * radd).toFixed(2) + ',' + (r.zxW * radd).toFixed(2) + '<br>' +
'中心时刻 tm = ' + JD.JD2str(r.jd + J2000) + '<br>' +
'太阳方位 (经,纬) = ' + (r.Sdp[0] * radd).toFixed(0) + ',' + (r.Sdp[1] * radd).toFixed(0) + '<br>' +
'日食类型 LX = ' + r.lx + ' ' + lxb[r.lx] + '<br>' +
'食分=' + r.sf.toFixed(4) + ', 食延=' + m2fm(r.tt * 86400, 0, 2) + ', 食带=' + r.dw.toFixed(0) + 'km<br>' +
'</td>' +
'</tr></table>';
if(Cp10_showJX.checked) {
Can2.style.display = 'none';
Can3.style.display = 'block';
Can3_pan.style.display = 'block';
tu3.init(Can3);
//取界线
tu3_buff = rsGS.jieX(jd);
var J0 = (tu3_buff.zxJ * radd).toFixed(0);
var W0 = (tu3_buff.zxW * radd).toFixed(0);
Cp10_J0.value = J0;
Cp10_W0.value = W0;
var jb = [Cp10_x0.value / 10, Cp10_y0.value / 10, Cp10_dx.value / 10, Cp10_dy.value / 10];
tu3.draw(tu3_buff, J0 / radd, W0 / radd, Cp10_eR.value - 0, jb, Cp10_tylx.options.selectedIndex);
} else {
Can2.style.display = 'block';
Can3.style.display = 'none';
Can3_pan.style.display = 'none';
tu2.line1([r], Cp10_hc.checked);
}
return;
}
//计算多个日食
if(fs == 5) {
Can2.style.display = 'block';
Can3.style.display = 'none';
Can3_pan.style.display = 'none';
//并设置为多步
var i,
r,
rr = [],
bn = Cp10_bn.value - 0;
var s = '<table border="0" width="100%" cellpadding="0" cellspacing="0">' +
'<tr align=center bgcolor="#EEFFEE"><td>力学时</td><td>γ</td><td></td><td>中心地标</td><td>方位角</td><td>食分</td><td>食带</td><td>食延</td><td>详表</td></tr>';
for(i = 0; i < bn; i++, jd += step) {
//中精度计算
rsGS.init(jd, 3);
r = rsGS.feature(jd);
if(r.lx == 'N')
continue;
s += '<tr align=center><td>' +
JD.JD2str(r.jd + J2000) + '</td><td>' + r.D.toFixed(4) + '</td><td>' + r.lx + '</td><td>' +
(r.zxJ * radd).toFixed(2) + ',' + (r.zxW * radd).toFixed(2) + '</td><td>' +
(r.Sdp[0] * radd).toFixed(0) + ',' + (r.Sdp[1] * radd).toFixed(0) + '</td><td>' +
r.sf.toFixed(4) + '</td><td>' + r.dw.toFixed(0) + '</td><td>' + m2fm(r.tt * 86400, 0, 2) + '</td><td>' +
'<a href="javascript:tu2_xx(' + r.jd + ');">详细</a>' + '</td><td>' +
'</td></tr>';
rr[rr.length] = r;
}
tu2.line1(rr, Cp10_hc.checked);
s += '</table>';
Cp10_tz.innerHTML = s;
}
}
//旋转图3
function tu3_xz(xm) {
if(!tu3_buff) {
alert('请把“食界”钩上并计算');
return;
}
tu3.init(Can3);
var J0 = Cp10_J0.value - 0,
W0 = Cp10_W0.value - 0;
if(xm == 0)
J0 += 15;
if(xm == 1)
J0 -= 15;
if(xm == 2)
W0 += 15;
if(xm == 3)
W0 -= 15;
//保持不变
if(xm == 4);
Cp10_J0.value = J0,
Cp10_W0.value = W0;
var jb = [Cp10_x0.value / 10, Cp10_y0.value / 10, Cp10_dx.value / 10, Cp10_dy.value / 10];
tu3.draw(tu3_buff, J0 / radd, W0 / radd, Cp10_eR.value - 0, jb, Cp10_tylx.options.selectedIndex);
}
//显示影子
function tu3_yingzi(xm) {
//取屏幕时间
var jd = Cp10_jd2.value - J2000;
if(xm == 1)
jd -= Cp10_step2.value / 86400;
if(xm == 2)
jd += Cp10_step2.value / 86400;
Cp10_jd2.value = (jd + J2000).toFixed(4);
rsGS.init(jd, 7);
var r = rsGS.jieX2(jd);
tu3.draw2(r);
}
//地方日食表生成
function dfRS(ly) {
//取屏幕时间
var jd = JD.JD(year2Ayear(Cc_y.value), Cc_m.value - 0, (Cc_d.value - 0)) - J2000;
if(ly == 1)
jd -= 29.53;
if(ly == 2)
jd += 29.53;
jd = XL.MS_aLon_t2(Math.floor((jd + 8) / 29.5306) * pi2) * 36525;
//置时间
var ts = JD.JD2str(jd + J2000 - curTZ / 24 - dt_T(jd));
Cc_y.value = ts.substr(0, 5) - 0;
Cc_m.value = ts.substr(6, 2);
Cc_d.value = ts.substr(9, 2);
//视径选择
rsPL.nasa_r = 0;
if(Cc_nasa.checked)
rsPL.nasa_r = 1;
var i,
j,
t,
c,
ou = '地名 食分 初亏 食甚 复圆 食既 生光 日出 日落 P1,V1 P2,V2\r\n';
var s = Cc_db.value;
s = s.replace(/\n/g, '#').replace(/[ \r]/g, '');
s = s.split('#');
for(i = 0; i < s.length; i++) {
c = s[i];
if(c.length == 0 || c.substr(0, 1) == '*')
continue;
c = c.split(',');
if(c.length <= 3)
continue;
//经纬度
c[2] /= radd,
c[1] /= radd;
//日食计算
rsPL.secMax(jd, c[2], c[1], c[3] / 1000);
ou += c[0] + '[' + rsPL.LX + ']';
//食分
ou += ' ' + rsPL.sf.toFixed(5);
ou += rsPL.sflx;
//初亏,食甚,复圆,食既,生光
for(j = 0; j < 5; j++) {
t = rsPL.sT[j];
if(!t) {
ou += ' --:--:--';
continue;
}
//转为UTC(本地时间)
t = t - curTZ / 24 - dt_T(t) + J2000;
ou += ' ' + JD.JD2str(t).substr(12, 8);
}
ou += ' ' + JD.timeStr(rsPL.sun_s - curTZ / 24 + J2000);
ou += ' ' + JD.timeStr(rsPL.sun_j - curTZ / 24 + J2000);
ou += ' ' + (rsPL.P1 * radd).toFixed(0) + ',' + (rsPL.V1 * radd).toFixed(0);
ou += ' ' + (rsPL.P2 * radd).toFixed(0) + ',' + (rsPL.V2 * radd).toFixed(0);
ou += '\r\n';
}
Cc_tb.value = ou;
}
//====================升降表===================
function shengjiang() {
//设置站点参数
SZJ.L = Cp9_J.value / radd;
SZJ.fa = Cp9_W.value / radd;
//取屏幕时间
var jd = JD.JD(year2Ayear(Cp9_y.value), Cp9_m.value - 0, (Cp9_d.value - 0) + 0.5) - J2000;
var sq = SZJ.L / pi2 * 24;
var s = "<font color=red>北京时间(转为格林尼治时间请减8小时):</font><br>",
r,
c = J2000 + 8 / 24;
r = SZJ.St(jd - sq / 24);
s += "太阳升起 " + JD.JD2str(r.s + c) + " 太阳降落 " + JD.JD2str(r.j + c) + "<br>";
s += "日上中天 " + JD.JD2str(r.z + c) + " 日下中天 " + JD.JD2str(r.x + c) + "<br>";
s += "民用天亮 " + JD.JD2str(r.c + c) + " 民用天黑 " + JD.JD2str(r.h + c) + "<br>";
s += "航海天亮 " + JD.JD2str(r.c2 + c) + " 航海天黑 " + JD.JD2str(r.h2 + c) + "<br>";
s += "天文天亮 " + JD.JD2str(r.c3 + c) + " 天文天黑 " + JD.JD2str(r.h3 + c) + "<br>";
s += "日照长度 " + JD.timeStr(r.j - r.s - 0.5) + " 日光长度 " + JD.timeStr(r.h - r.c - 0.5) + "<br>";
if(r.sm)
s += '注:' + r.sm + '<br>';
r = SZJ.Mt(jd - sq / 24);
s += "月亮升起 " + JD.JD2str(r.s + c) + " 月亮降落 " + JD.JD2str(r.j + c) + "<br>";
s += "月上中天 " + JD.JD2str(r.z + c) + " 月下中天 " + JD.JD2str(r.x + c) + "<br>";
Cp9_out.innerHTML = s;
}
//太阳升降快算
function shengjiang2() {
//设置站点参数
var L = Cp9_J.value / radd;
var fa = Cp9_W.value / radd;
//取屏幕时间
var jd = JD.JD(year2Ayear(Cp9_y.value), 1, 1.5) - J2000;
var i,
t,
s = '',
s2 = '';
for(i = 0; i < 368; i++) {
t = sunShengJ(jd + i, L, fa, -1) + J2000 + 8 / 24;
s2 += '<font color=red>' + JD.JD2str(t).substr(6, 14) + '</font>,';
t = sunShengJ(jd + i, L, fa, 1) + J2000 + 8 / 24;
s2 += JD.timeStr(t) + '<br>';
if(i == 91 || i == 275)
s += '<td>' + s2 + '<td>', s2 = '';
if(i == 183 || i == 367)
s += '<td>' + s2 + '<td>', s2 = '';
}
Cp9_out.innerHTML = '<b>太阳年度升降表</b><table><tr>' + s + s2 + '</tr></table>';
}
//年度时差
function shengjiang3() {
//取屏幕时间
var jd = JD.JD(year2Ayear(Cp9_y.value), 1, 1.5);
var i,
t,
D,
s = '',
s2 = '';
for(i = 0; i < 368; i++) {
D = jd + i - 8 / 24 - J2000,
D += dt_T(D);
t = pty_zty(D / 36525);
s2 += JD.JD2str(jd + i).substr(0, 11) + ' <font color=red>' + m2fm(t * 86400, 2, 2) + '</font><br>';
if(i == 91 || i == 275)
s += '<td>' + s2 + '<td>', s2 = '';
if(i == 183 || i == 367)
s += '<td>' + s2 + '<td>', s2 = '';
}
Cp9_out.innerHTML = '<b>太阳时差表(所用时间为北京时间每日12点)<br</b><table><tr>' + s + s2 + '</tr></table>';
}
//====================气朔表===================
//定朔测试函数
function suoCalc(jiao) {
if(jiao == -1)
jiao = prompt("请输入角度(0朔,90上弦,180望,270下弦,或其它):", 0) - 0;
var i,
r,
T,
s = "月-日黄经差" + jiao + "<br>",
s2 = "";
var y = year2Ayear(Cp8_y.value) - 2000;
var n = Cp8_n.value - 0;
//截止当年首经历朔望的个数
var n0 = int2(y * (365.2422 / 29.53058886));
for(i = 0; i < n; i++) {
//精确时间计算,入口参数是当年各朔望黄经
T = XL.MS_aLon_t((n0 + i + jiao / 360) * 2 * Math.PI);
//计算月亮
r = XL1_calc(2, T, -1);
//日期转为字串
s2 += JD.JD2str(T * 36525 + J2000 + 8 / 24 - dt_T(T * 36525)) + ' ' + r.toFixed(2) + "千米<br>";
if(i % 50 == 0)
s += s2, s2 = "";
}
Cp8_out.innerHTML = s + s2;
}
//定气测试函数
function qiCalc() {
var i,
T,
s = "",
s2 = "";
var y = year2Ayear(Cp8_y.value) - 2000;
var n = Cp8_n.value - 0;
for(i = 0; i < n; i++) {
//精确节气时间计算
T = XL.S_aLon_t((y + i * 15 / 360 + 1) * 2 * Math.PI);
//日期转为字串
s2 += JD.JD2str(T * 36525 + J2000 + 8 / 24 - dt_T(T * 36525)) + obb.jqmc[(i + 6) % 24];
if(i % 2 == 1)
s2 += ' 视黄经' + (i * 15) + '<br>';
else
s2 += ' '
if(i % 50 == 0)
s += s2, s2 = "";
}
Cp8_out.innerHTML = s + s2;
}
//定候测试函数
function houCalc() {
var i,
T,
s = '初候            二候         三候',
s2 = '';
var y = year2Ayear(Cp8_y.value) - 2000;
var n = Cp8_n.value - 0;
for(i = 0; i < n * 3; i++) {
//精确节气时间计算
T = XL.S_aLon_t((y + i * 5 / 360 + 1) * 2 * Math.PI);
if(i % 3 == 0)
s2 += '<br>' + obb.jqmc[(i / 3 + 6) % 24];
else
s2 += ' ';
//日期转为字串
s2 += JD.JD2str(T * 36525 + J2000 + 8 / 24 - dt_T(T * 36525));
if(i % 50 == 0)
s += s2, s2 = "";
}
Cp8_out.innerHTML = s + s2;
}
//==========================
//页面生成有关的函数
//==========================
//关闭可能已打开的帮助页面
function showPage(pg) {
showHelp(0);
Cal_pause.checked = true;
page1.style.display = 'none';
page2.style.display = 'none';
page3.style.display = 'none';
page4.style.display = 'none';
page5.style.display = 'none';
page6.style.display = 'none';
page7.style.display = 'none';
page8.style.display = 'none';
page9.style.display = 'none';
page10.style.display = 'none';
page11.style.display = 'none';
page12.style.display = 'none';
page13.style.display = 'none';
if(pg == 1)
page1.style.display = 'block';
//年历
if(pg == 2) {
page2.style.display = 'block';
getNianLi(0);
}
//图表
if(pg == 3) {
page3.style.display = 'block';
tu_calc(2);
}
//地方日食
if(pg == 4)
page4.style.display = 'block';
//行星星历
if(pg == 5)
page5.style.display = 'block';
//行星天象
if(pg == 6)
page6.style.display = 'block';
//恒星星历
if(pg == 7)
page7.style.display = 'block';
//气朔表
if(pg == 8)
page8.style.display = 'block';
//升降表
if(pg == 9)
page9.style.display = 'block';
//食概
if(pg == 10)
page10.style.display = 'block';
//命理八字
if(pg == 11)
page11.style.display = 'block';
//工具
if(pg == 12)
page12.style.display = 'block';
//常数表
if(pg == 13)
page13.style.display = 'block';
}
/********************
当前时间初始化,在屏幕上显示时间、保存本地时区信息等
*********************/
//把当前时间置于屏幕的便入框之中
function set_date_screen(fw) {
var now = new Date();
//时区 -8为北京时
curTZ = now.getTimezoneOffset() / 60;
//J2000起算的儒略日数(当前本地时间)
curJD = now / 86400000 - 10957.5 - curTZ / 24;
JD.setFromJD(curJD + J2000);
if(!fw || fw == 1) {
Cml_y.value = JD.Y;
Cml_m.value = JD.M;
Cml_d.value = JD.D;
Cml_his.value = JD.h + ':' + JD.m + ':' + JD.s.toFixed(0);
}
if(!fw || fw == 2) {
Cal_y.value = JD.Y;
Cal_m.value = JD.M;
}
curJD = int2(curJD + 0.5);
}
set_date_screen(0);
/****************
外地时间选择
****************/
//国家或地区改变
function change_dq() {
var i,
v = Sel_dq.options[Sel_dq.selectedIndex].value;
v = v.split('#');
//地区时差
Sel_dq.v = v[0];
//日光节约参数
Sel_dq.rg = v[1];
//时区说明
Sel_sqsm.innerHTML = v[2];
}
//洲别改变
function change_zhou() {
//某洲数组
var i,
ob = SQv[Sel_zhou.options[Sel_zhou.selectedIndex].value - 0];
Sel_dq.length = 0;
for(i = 1; i < ob.length; i += 2)
addOp(Sel_dq, ob[i + 1], ob[i]);
change_dq();
}
for(i = 0; i < SQv.length; i++){
addOp(document.all.Sel_zhou, i, SQv[i][0]);
}
change_zhou();
//显示时钟,传入日期对象
function show_clock(t) {
var h = Sel_dq.v - 0,
rg = '';
var v = Sel_dq.rg;
//J2000起算的儒略日数(当地时间)
var jd = t / 86400000 - 10957.5 + h / 24;
Clock1.innerHTML = t.toLocaleString2();
if(v) {
//该时所在年份
var y1 = JD.Y,
y2 = y1;
var m1 = v.substr(0, 2) - 0,
m2 = v.substr(5, 2) - 0;
if(m2 < m1)
y2++;
//nnweek(y,m,n,w)求y年m月第n个星期w的jd
var J1 = JD.nnweek(y1, m1, v.substr(2, 1), v.substr(3, 1) - 0) - 0.5 - J2000 + (v.charCodeAt(4) - 97) / 24;
var J2 = JD.nnweek(y2, m2, v.substr(7, 1), v.substr(8, 1) - 0) - 0.5 - J2000 + (v.charCodeAt(9) - 97) / 24;
//夏令时
if(jd >= J1 && jd < J2)
jd += 1 / 24, rg = '<font color=red>¤</font>';
}
JD.setFromJD(jd + J2000);
//分格式转为88
var mm = JD.m < 10 ? '0' + JD.m : JD.m;
//秒格式转为88
var ss = int2(JD.s) < 10 ? '0' + int2(JD.s) : int2(JD.s);
//Clock2.innerHTML = JD.D+'日 '+JD.h+':'+JD.m+':'+int2(JD.s) + rg; //为了与clock1同步,秒数取整而不四舍五入
//为了与clock1同步,秒数取整而不四舍五入
Clock2.innerHTML = h + '时区  ' + JD.D + '日 ' + JD.h + ':' + mm + ':' + ss + rg;
}
/****************
地理经纬度选择的页面控制函数
****************/
function change2() {
var v = new JWdecode(Sel2.options[Sel2.selectedIndex].value);
Sel2.vJ = v.J;
Sel2.vW = v.W;
Cb_J.value = (v.J / Math.PI * 180).toFixed(6),
Cb_W.value = (v.W / Math.PI * 180).toFixed(6);
Cf_J.value = Cd_J.value = Cp9_J.value = Cb_J.value;
Cf_W.value = Cd_W.value = Cp9_W.value = Cb_W.value;
Cp11_J.value = Cb_J.value;
Cal_zdzb.innerHTML = '经 ' + rad2str2(v.J) + ' 纬 ' + rad2str2(v.W);
showMessD(-2);
storageL.setItem('Sel1', Sel1.selectedIndex, 1000);
storageL.setItem('Sel2', Sel2.selectedIndex, 1000);
}
function change() {
Sel2.length = 0;
var i,
ob = JWv[Sel1.options[Sel1.selectedIndex].value - 0];
for(i = 1; i < ob.length; i++)
addOp(Sel2, ob[i].substr(0, 4), ob[i].substr(4, ob[i].length - 4));
change2();
}
for(var i = 0; i < JWv.length; i++){
addOp(document.all.Sel1, i, JWv[i][0]);
}
var seI1 = storageL.getItem('Sel1');
var seI2 = storageL.getItem('Sel2');
Sel1.selectedIndex = seI1;
change();
Sel2.selectedIndex = seI2;
change2();
//本地平太阳时计算。secs为本日过去的秒数,J为本地经度.
function bdptys(secs, J, Gs) {
//标准时间发出地经度
var bzjd0 = 120;
//平太阳时,每经度时差4分钟
var ptys = int2(secs + 4 * (J - bzjd0) * 60);
//平太阳时化为日数
var ptysds = ptys / 3600 / 24;
//负值时转为前一日
if(ptys < 0)
ptys = 24 * 3600 + ptys;
//平小时
var ptysh = int2(ptys / 3600);
//平分钟
var ptysm = int2((ptys - ptysh * 3600) / 60);
//平秒
var ptyss = int2(ptys - ptysh * 3600 - ptysm * 60);
//平小时
if(ptysh < 10)
ptysh = '0' + ptysh;
//平分钟
if(ptysm < 10)
ptysm = '0' + ptysm;
//平秒
if(ptyss < 10)
ptyss = '0' + ptyss;
if(Gs == 'd') {
return ptysds;
} else {
//返回平太阳时串
return ptysh + ':' + ptysm + ':' + ptyss;
}
}
/**********************
命理八字计算
**********************/
function ML_calc() {
var ob = new Object();
var t = timeStr2hour(Cml_his.value);
//计算平太阳时
//今天已过秒数
var sec_to = t * 3600;
//计算本地平太阳时
ob.bz_pty = bdptys(sec_to, Cp11_J.value);
var jd = JD.JD(year2Ayear(Cml_y.value), Cml_m.value - 0, Cml_d.value - 0 + t / 24);
//八字计算
obb.mingLiBaZi(jd + curTZ / 24 - J2000, Cp11_J.value / radd, ob);
Cal6.innerHTML =
'<font color=red> <b>[日标]:</b></font>' +
'公历 ' + Cml_y.value + '-' + Cml_m.value + '-' + Cml_d.value +
' 儒略日数 ' + int2(jd + 0.5) + ' 距2000年首' + int2(jd + 0.5 - J2000) + '日<br>' +
'<font color=red ><b>[八字]:</b></font><b style="font-size:18px;">' + ob.bz_jn + '年 ' + ob.bz_jy + '月 ' + ob.bz_jr + '日 ' +
ob.bz_js + '时</b> 真太阳 <font color=red>' + ob.bz_zty + '</font> 平太阳 <font color=blue>' + ob.bz_pty + '</font><br>' +
'<font color=red ><b>[纳音]:</b></font>' + ob.bz_jnny + ' ' + ob.bz_jyny + ' ' + ob.bz_jrny + ' ' + ob.bz_jsny + '<br>' +
'<font color=green><b>[纪时]:</b></font><i>' + ob.bz_JS + '</i><br>' +
'<font color=green><b>[时标]:</b></font><i>' + '23  01  03  05  07  09  11  13  15  17  19  21  23';
}
// ML_calc(); //在时间、地标初始化完成后就可执行
function ML_settime() {
set_date_screen(1);
ML_calc();
}
/**********************
月历的年、月跳转控制函数
**********************/
//跳到上(或下)一年
function changeYear(ud) {
var y = year2Ayear(Cal_y.value);
if(y == -10000)
return;
if(ud == 0) {
if(y <= -10000) {
alert('到顶了!');
return;
}
Cal_y.value = Ayear2year(y - 1);
} else {
if(y >= 9999) {
alert('到顶了!');
return;
}
Cal_y.value = Ayear2year(y + 1);
}
getLunar();
}
//跳到上(或下)下月
function changeMonth(ud) {
var y,
m;
y = year2Ayear(Cal_y.value);
m = Cal_m.value - 0;
if(ud == 0) {
if(m <= 1 && y <= -10000) {
alert('到顶了!');
return;
}
if(m <= 1)
Cal_m.value = 12, Cal_y.value = Ayear2year(y - 1);
else
Cal_m.value = m - 1;
}
if(ud == 1) {
if(m >= 12 && y >= 9999) {
alert('到顶了!');
return;
}
if(m >= 12)
Cal_m.value = 1, Cal_y.value = Ayear2year(y + 1);
else
Cal_m.value = m + 1;
}
if(ud == 2)
set_date_screen(2);
getLunar();
}
/********************
升降计算等
*********************/
function RTS1(jd, vJ, vW, tz) {
//升降计算,使用北时时间,tz=-8指东8区,jd+tz应在当地正午左右(误差数小时不要紧)
SZJ.calcRTS(jd, 1, vJ, vW, tz);
var s,
ob = SZJ.rts[0];
// JD.setFromJD(jd+J2000);
s = '日出 <font color=red>' + ob.s + '</font> 日落 ' + ob.j + ' 中天 ' + ob.z + '<br>';
s += '月出 ' + ob.Ms + ' 月落 ' + ob.Mj + ' 月中 ' + ob.Mz + '<br>';
s += '晨起天亮 ' + ob.c + ' 晚上天黑 ' + ob.h + '<br>';
s += '日照时间 ' + ob.sj + ' 白天时间 ' + ob.ch + '<br>';
return s;
}
/**********************
日历(某日)信息页面生成
**********************/
//显时本月第n日的摘要信息。调用前应先执月历页面生成,产生有效的lun对象
function showMessD(n) {
if(event) {
if(event.ctrlKey)
return;
}
if(!lun.dn || n >= lun.dn)
return;
var vJ = Sel2.vJ - 0,
vW = Sel2.vW - 0;
//鼠标移出日期上方
if(n == -1) {
Cal_pan.style.display = 'none';
Cal5.innerHTML = Cal5.bak;
}
if(n == -2)
Cal5.bak = Cal5.innerHTML = RTS1(curJD, vJ, vW, curTZ);
if(n < 0)
return;
//显示n指定的日期信息
var ob = lun.lun[n];
Cal5.innerHTML = RTS1(ob.d0, vJ, vW, curTZ);
//鼠标移过日期上方
if(window.event && window.event.srcElement.tagName == 'SPAN') {
var J = document.all.Cb_J.value / radd
//命理纳音计算,jd为格林尼治UT(J2000起算),J为本地经度,返回在物件ob中
obb.mingLiBaZi(ob.d0 + curTZ / 24, J, ob);
s = Ayear2year(ob.y) + '年' + ob.m + '月' + ob.d + '日<br>'
s += ob.Lyear3 + '年 星期' + JD.Weeks[ob.week] + ' ' + ob.XiZ + '<br>';
s += ob.Lyear4 + '年 ' + ob.Lleap + ob.Lmc + '月' + (ob.Ldn > 29 ? '大 ' : '小 ') + ob.Ldc + '<br>';
s += ob.Lyear2 + '年 ' + ob.Lmonth2 + '月 ' + ob.Lday2 + '日<br>';
s += ob.bz_jnny + ' ' + ob.bz_jyny + ' ' + ob.bz_jrny + '<br/>';
s += '回历[' + ob.Hyear + '年' + ob.Hmonth + '月' + ob.Hday + '日]<br>';
s += 'JD ' + (ob.d0 + J2000) + '(' + ob.d0 + ')<br>';
if(ob.yxmc)
s += ob.yxmc + ' ' + ob.yxsj + '<br/>';
if(ob.jqmc)
s += '定' + ob.jqmc + ' ' + ob.jqsj + '<br>';
//else { if(ob.Ljq) s += ob.Ljq+'<br>';}
//ob.dtpq明大统历平气交节时刻ob.Ljq实气
if(ob.Ljq)
s += '<br/>' + ob.dtpq + ' ';
if(ob.A)
s += ob.A + '<br>';
if(ob.B)
s += ob.B + '<br>';
if(ob.C)
s += ob.C;
//先显示再传值屏幕流畅
Cal_pan.style.display = 'block';
Cal_pan_in.innerHTML = s;
Cal_pan.style.left = window.event.x + document.body.scrollLeft + ((ob.week > 3) ? -180 : 20);
Cal_pan.style.top = window.event.y + document.body.scrollTop - ((ob.weeki < 2) ? 0 : 100);
}
}
/**********************
月历页面生成
**********************/
//月历页面生成
function getLunar() {
var By = year2Ayear(Cal_y.value);
var Bm = Cal_m.value - 0;
if(By == -10000)
return;
//月历未计算
if(!lun.dn || lun.y != By || lun.m != Bm) {
lun.yueLiHTML(By, Bm, curJD);
Cal2.innerHTML = lun.pg1;
Cal4.innerHTML = lun.pg2;
}
showMessD(-2);
}
//调用月历页面生成函数
getLunar();
/**********************
年历面页生成
**********************/
//dy起始年份偏移数
function getNianLi(dy) {
y = year2Ayear(Cp2_y.value);
//检查输入值
if(y == -10000)
return;
//加上偏移年数
y += dy;
Cp2_y.value = Ayear2year(y);
//检查输入值
if(y < -10000) {
alert('到底了');
return;
}
if(Cp2_tg.checked)
Cal7.innerHTML = Ayear2year(y) + '年<br>' + nianLiHTML(y, '');
else
Cal7.innerHTML = Ayear2year(y) + '年<br>' + nianLi2HTML(y);
}
//dy起始年份偏移数
function getNianLiN() {
y = year2Ayear(Cp2_y.value);
//检查输入值
if(y == -10000)
return;
n = Cp2_n.value - 0;
if(n < 1 || n > 500) {
alert("超出范围");
return;
}
var i,
s = '';
for(i = 0; i < n; i++) {
if(Cp2_tg.checked)
s += Ayear2year(y + i) + '年<br>' + nianLiHTML(y + i, '');
else
s += Ayear2year(y + i) + '年<br>' + nianLi2HTML(y + i);
}
Cal7.innerHTML = s;
}
/**********************
时钟1秒定时
**********************/
//即时坐标计算
function tick() {
var now = new Date();
show_clock(now);
zb_calc();
window.setTimeout("tick()", 1000);
}
//触发时钟
tick();
</script>
<!--
以下部分是工具函数等与日历无直接关系,如果不需要可以删除
1、测试工具
2、说明书
-->
<script>
function K_getJD() {
JD.Y = Iy.value - 0;
JD.M = Im.value - 0;
JD.D = Id.value - 0;
JD.h = Ih.value - 0;
JD.m = Ii.value - 0;
JD.s = Is.value - 0;
return JD.toJD();
}
function testDD(UT) { //坐标测试
var s = "",
T,
T2,
dt;
T = (K_getJD() - J2000); //力学时
if(UT) {
T += dt_T(T) - 8 / 24;
}
z = new Array(),
z2 = new Array(); //坐标数组
msc.calc(T, I_dlLon.value / 180 * Math.PI, I_dlLat.value / 180 * Math.PI, 0); //坐标测试
s += msc.toHTML(1);
//月球迭代算法测试
L = XL.M_Lon(T / 36525, -1); //正算
T2 = XL.M_Lon_t(L) * 36525; //反算
dt = (T2 - T) * 86400;
s += "<b>月球迭代算法测试:</b><br>";
s += "高速迭代法求指定Date平分点黄经的发生时刻。测试如下:<br>";
s += "输入时间(日数):" + T + "<br>";
s += "月球黄经(弧度):" + L + "<br>";
s += "反算时间(日数):" + T2 + "<br>";
s += "迭代误差(秒):" + dt + "<br><br>";
//地球迭代算法测试
L = XL.E_Lon(T / 36525, -1);
T2 = XL.E_Lon_t(L) * 36525;
dt = (T2 - T) * 86400;
s += "<b>地球迭代算法测试:</b><br>";
s += "输入时间(日数):" + T + "<br>";
s += "地球黄经(弧度):" + L + "<br>";
s += "反算时间(日数):" + T2 + "<br>";
s += "迭代误差(秒):" + dt + "<br><br>";
L = XL.MS_aLon(T / 36525, -1, 60); //-1表示月球序列全部计算,60表示地球序列只算60项就可以了
T2 = XL.MS_aLon_t(L) * 36525;
dt = (T2 - T) * 86400;
s += "月日黄经差返算迭代的时间误差(秒):" + dt + "<br><br>";
out.innerHTML = s;
}
function dingQi_cmp() { //定气误差测试
var i,
T,
maxT = 0;
var y = year.value - 2000;
var N = testN.value - 0;
for(i = 0; i < N; i++) {
W = (y + i / 24) * 2 * Math.PI;
T = XL.S_aLon_t2(W) - XL.S_aLon_t(W); //节气粗算与精算的差异
T = int2(Math.abs(T * 36525 * 86400));
if(T > maxT)
maxT = T;
}
out.innerHTML = (2000 + y) + "年之后" + N + "个节气粗算与精算的最大差异:" + maxT + "秒。";
out.innerHTML = '<font color=red>' + out.innerHTML + '</font>';
}
function dingSuo_cmp() { //定朔测试函数
var i,
T,
maxT = 0;
var y = year.value - 2000;
var N = testN.value - 0;
var n = int2(y * (365.2422 / 29.53058886)); //截止当年首经历朔望的个数
for(i = 0; i < N; i++) {
W = (n + i / 24) * 2 * Math.PI;
T = XL.MS_aLon_t2(W) - XL.MS_aLon_t(W); //合塑粗算与精算的差异
T = int2(Math.abs(T * 36525 * 86400));
if(T > maxT)
maxT = T;
}
out.innerHTML = (2000 + y) + "年之后" + N + "个朔日粗算与精算的最大差异:" + maxT + "秒。";
out.innerHTML = '<font color=red>' + out.innerHTML + '</font>';
}
function dingQi_v() { //定气计算速度测试
var d1 = new Date();
for(i = 0; i < 1000; i++)
XL.S_aLon_t(0);
var d2 = new Date();
for(i = 0; i < 1000; i++)
XL.S_aLon_t2(0);
var d3 = new Date();
out.innerHTML = "高精度:" + (d2 - d1) + "毫秒/千个<br>" +
"低精度:" + (d3 - d2) + "毫秒/千个<br>";
out.innerHTML = '<font color=red>' + out.innerHTML + '</font>';
}
function dingSuo_v() { //定朔计算速度测试
var d1 = new Date();
for(i = 0; i < 1000; i++)
XL.MS_aLon_t(0);
var d2 = new Date();
for(i = 0; i < 1000; i++)
XL.MS_aLon_t2(0);
var d3 = new Date();
out.innerHTML = "高精度:" + (d2 - d1) + "毫秒/千个<br>" +
"低精度:" + (d3 - d2) + "毫秒/千个<br>";
out.innerHTML = '<font color=red>' + out.innerHTML + '</font>';
}
function K_show(f) {
pan_1.style.display = 'none';
if(f == 1)
pan_1.style.display = 'block';
out.innerHTML = '';
}
</script>
<br>
<table width=770 border=0 cellpadding=3 cellspacing=0>
<tr>
<td align=center>
<a href="javascript:dingQi_v();">定气速度测试</a>
<a href="javascript:dingSuo_v();">定朔速度测试</a>] [
<a href='javascript:K_show(1)'>气朔计算</a>
<a href='javascript:K_show(0)'>清空</a>
</td>
</tr>
<tr>
<td>
<div id=pan_1 style='display:none'>
年首 <input type=text size=4 id=year value=2000> 个数 <input type=text size=3 id=testN value=10>
<input type=button value=粗定气误差 onclick=dingQi_cmp()>
<input type=button value=粗定朔误差 onclick=dingSuo_cmp()>
</div>
</td>
</tr>
<tr>
<td>
<div id=out></div>
</td>
</tr>
</table>
</body>
</html>