|
|
@ -1033,7 +1033,7 @@ func MoonAway(JD float64) float64 { //'月地距离
|
|
|
|
/*
|
|
|
|
/*
|
|
|
|
* @name 月球视黄经
|
|
|
|
* @name 月球视黄经
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
func MoonSeeLo(JD float64) float64 {
|
|
|
|
func MoonApparentLo(JD float64) float64 {
|
|
|
|
return MoonTrueLo(JD) + HJZD(JD)
|
|
|
|
return MoonTrueLo(JD) + HJZD(JD)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -1041,7 +1041,7 @@ func MoonSeeLo(JD float64) float64 {
|
|
|
|
* 月球真赤纬
|
|
|
|
* 月球真赤纬
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
func MoonTrueDec(JD float64) float64 {
|
|
|
|
func MoonTrueDec(JD float64) float64 {
|
|
|
|
MoonLo := MoonSeeLo(JD)
|
|
|
|
MoonLo := MoonApparentLo(JD)
|
|
|
|
MoonBo := MoonTrueBo(JD)
|
|
|
|
MoonBo := MoonTrueBo(JD)
|
|
|
|
tmp := Sin(MoonBo)*Cos(Sita(JD)) + Cos(MoonBo)*Sin(Sita(JD))*Sin(MoonLo)
|
|
|
|
tmp := Sin(MoonBo)*Cos(Sita(JD)) + Cos(MoonBo)*Sin(Sita(JD))*Sin(MoonLo)
|
|
|
|
res := ArcSin(tmp)
|
|
|
|
res := ArcSin(tmp)
|
|
|
@ -1052,7 +1052,7 @@ func MoonTrueDec(JD float64) float64 {
|
|
|
|
* 月球真赤经
|
|
|
|
* 月球真赤经
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
func MoonTrueRa(JD float64) float64 {
|
|
|
|
func MoonTrueRa(JD float64) float64 {
|
|
|
|
MoonLo := MoonSeeLo(JD)
|
|
|
|
MoonLo := MoonApparentLo(JD)
|
|
|
|
MoonBo := MoonTrueBo(JD)
|
|
|
|
MoonBo := MoonTrueBo(JD)
|
|
|
|
tmp := (Sin(MoonLo)*Cos(Sita(JD)) - Tan(MoonBo)*Sin(Sita(JD))) / Cos(MoonLo)
|
|
|
|
tmp := (Sin(MoonLo)*Cos(Sita(JD)) - Tan(MoonBo)*Sin(Sita(JD))) / Cos(MoonLo)
|
|
|
|
tmp = ArcTan(tmp)
|
|
|
|
tmp = ArcTan(tmp)
|
|
|
@ -1070,7 +1070,7 @@ func MoonTrueRa(JD float64) float64 {
|
|
|
|
*
|
|
|
|
*
|
|
|
|
传入世界时
|
|
|
|
传入世界时
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
func MoonSeeRa(JD, lon, lat float64, tz int) float64 {
|
|
|
|
func MoonApparentRa(JD, lon, lat float64, tz int) float64 {
|
|
|
|
jde := TD2UT(JD, true)
|
|
|
|
jde := TD2UT(JD, true)
|
|
|
|
ra := MoonTrueRa(jde - float64(tz)/24.000)
|
|
|
|
ra := MoonTrueRa(jde - float64(tz)/24.000)
|
|
|
|
dec := MoonTrueDec(jde - float64(tz)/24.000)
|
|
|
|
dec := MoonTrueDec(jde - float64(tz)/24.000)
|
|
|
@ -1079,7 +1079,7 @@ func MoonSeeRa(JD, lon, lat float64, tz int) float64 {
|
|
|
|
return nra
|
|
|
|
return nra
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func MoonSeeDec(JD, lon, lat, tz float64) float64 {
|
|
|
|
func MoonApparentDec(JD, lon, lat, tz float64) float64 {
|
|
|
|
jde := TD2UT(JD, true)
|
|
|
|
jde := TD2UT(JD, true)
|
|
|
|
ra := MoonTrueRa(jde - tz/24.0)
|
|
|
|
ra := MoonTrueRa(jde - tz/24.0)
|
|
|
|
dec := MoonTrueDec(jde - tz/24)
|
|
|
|
dec := MoonTrueDec(jde - tz/24)
|
|
|
@ -1090,8 +1090,8 @@ func MoonSeeDec(JD, lon, lat, tz float64) float64 {
|
|
|
|
|
|
|
|
|
|
|
|
func MoonLight(JD float64) float64 {
|
|
|
|
func MoonLight(JD float64) float64 {
|
|
|
|
MoonBo := HMoonTrueBo(JD)
|
|
|
|
MoonBo := HMoonTrueBo(JD)
|
|
|
|
SunLo := HSunSeeLo(JD)
|
|
|
|
SunLo := HSunApparentLo(JD)
|
|
|
|
MoonLo := HMoonSeeLo(JD)
|
|
|
|
MoonLo := HMoonApparentLo(JD)
|
|
|
|
tmp := Cos(MoonBo) * Cos(SunLo-MoonLo)
|
|
|
|
tmp := Cos(MoonBo) * Cos(SunLo-MoonLo)
|
|
|
|
R := RDJL(JD) * 149597870.691
|
|
|
|
R := RDJL(JD) * 149597870.691
|
|
|
|
i := R * Sin(ArcCos(tmp)) / (HMoonAway(JD) - R*tmp)
|
|
|
|
i := R * Sin(ArcCos(tmp)) / (HMoonAway(JD) - R*tmp)
|
|
|
@ -1107,7 +1107,7 @@ func MoonLight(JD float64) float64 {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func SunMoonSeek(JDE float64, degree float64) float64 {
|
|
|
|
func SunMoonSeek(JDE float64, degree float64) float64 {
|
|
|
|
p := HMoonSeeLo(JDE) - (HSunSeeLo(JDE)) - degree
|
|
|
|
p := HMoonApparentLo(JDE) - (HSunApparentLo(JDE)) - degree
|
|
|
|
for p < -180 {
|
|
|
|
for p < -180 {
|
|
|
|
p += 360
|
|
|
|
p += 360
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -1303,7 +1303,7 @@ func MoonAngle(JD, Lon, Lat, TZ float64) float64 {
|
|
|
|
ndec := ZhanXinDec(ra, dec, Lat, Lon, JD-TZ/24, away, 0)
|
|
|
|
ndec := ZhanXinDec(ra, dec, Lat, Lon, JD-TZ/24, away, 0)
|
|
|
|
nra := ZhanXinRa(ra, dec, Lat, Lon, JD-TZ/24, away, 0)
|
|
|
|
nra := ZhanXinRa(ra, dec, Lat, Lon, JD-TZ/24, away, 0)
|
|
|
|
calcjd = JD - TZ/24
|
|
|
|
calcjd = JD - TZ/24
|
|
|
|
st := Limit360(SeeStarTime(calcjd)*15 + Lon)
|
|
|
|
st := Limit360(ApparentSiderealTime(calcjd)*15 + Lon)
|
|
|
|
H := Limit360(st - nra)
|
|
|
|
H := Limit360(st - nra)
|
|
|
|
tmp2 := Sin(H) / (Cos(H)*Sin(Lat) - Tan(ndec)*Cos(Lat))
|
|
|
|
tmp2 := Sin(H) / (Cos(H)*Sin(Lat) - Tan(ndec)*Cos(Lat))
|
|
|
|
Angle := ArcTan(tmp2)
|
|
|
|
Angle := ArcTan(tmp2)
|
|
|
@ -1333,7 +1333,7 @@ func MoonHeight(JD, Lon, Lat, TZ float64) float64 {
|
|
|
|
ndec := ZhanXinDec(ra, dec, Lat, Lon, JD-TZ/24, away, 0)
|
|
|
|
ndec := ZhanXinDec(ra, dec, Lat, Lon, JD-TZ/24, away, 0)
|
|
|
|
nra := ZhanXinRa(ra, dec, Lat, Lon, JD-TZ/24, away, 0)
|
|
|
|
nra := ZhanXinRa(ra, dec, Lat, Lon, JD-TZ/24, away, 0)
|
|
|
|
calcjd = JD - TZ/24
|
|
|
|
calcjd = JD - TZ/24
|
|
|
|
st := Limit360(SeeStarTime(calcjd)*15 + Lon)
|
|
|
|
st := Limit360(ApparentSiderealTime(calcjd)*15 + Lon)
|
|
|
|
H := Limit360(st - nra)
|
|
|
|
H := Limit360(st - nra)
|
|
|
|
tmp2 := Sin(Lat)*Sin(ndec) + Cos(ndec)*Cos(Lat)*Cos(H)
|
|
|
|
tmp2 := Sin(Lat)*Sin(ndec) + Cos(ndec)*Cos(Lat)*Cos(H)
|
|
|
|
return ArcSin(tmp2)
|
|
|
|
return ArcSin(tmp2)
|
|
|
@ -1349,7 +1349,7 @@ func HMoonAngle(JD, Lon, Lat, TZ float64) float64 {
|
|
|
|
ndec := ZhanXinDec(ra, dec, Lat, Lon, JD-TZ/24, away, 0)
|
|
|
|
ndec := ZhanXinDec(ra, dec, Lat, Lon, JD-TZ/24, away, 0)
|
|
|
|
nra := ZhanXinRa(ra, dec, Lat, Lon, JD-TZ/24, away, 0)
|
|
|
|
nra := ZhanXinRa(ra, dec, Lat, Lon, JD-TZ/24, away, 0)
|
|
|
|
calcjd = JD - TZ/24
|
|
|
|
calcjd = JD - TZ/24
|
|
|
|
st := Limit360(SeeStarTime(calcjd)*15 + Lon)
|
|
|
|
st := Limit360(ApparentSiderealTime(calcjd)*15 + Lon)
|
|
|
|
H := Limit360(st - nra)
|
|
|
|
H := Limit360(st - nra)
|
|
|
|
tmp2 := Sin(H) / (Cos(H)*Sin(Lat) - Tan(ndec)*Cos(Lat))
|
|
|
|
tmp2 := Sin(H) / (Cos(H)*Sin(Lat) - Tan(ndec)*Cos(Lat))
|
|
|
|
Angle := ArcTan(tmp2)
|
|
|
|
Angle := ArcTan(tmp2)
|
|
|
@ -1376,7 +1376,7 @@ func HMoonHeight(JD, Lon, Lat, TZ float64) float64 {
|
|
|
|
away := HMoonAway(calcjd) / 149597870.7
|
|
|
|
away := HMoonAway(calcjd) / 149597870.7
|
|
|
|
nra, ndec := ZhanXinRaDec(ra, dec, Lat, Lon, calcjd, away, 0)
|
|
|
|
nra, ndec := ZhanXinRaDec(ra, dec, Lat, Lon, calcjd, away, 0)
|
|
|
|
calcjd = JD - TZ/24
|
|
|
|
calcjd = JD - TZ/24
|
|
|
|
st := Limit360(SeeStarTime(calcjd)*15 + Lon)
|
|
|
|
st := Limit360(ApparentSiderealTime(calcjd)*15 + Lon)
|
|
|
|
H := Limit360(st - nra)
|
|
|
|
H := Limit360(st - nra)
|
|
|
|
tmp2 := Sin(Lat)*Sin(ndec) + Cos(ndec)*Cos(Lat)*Cos(H)
|
|
|
|
tmp2 := Sin(Lat)*Sin(ndec) + Cos(ndec)*Cos(Lat)*Cos(H)
|
|
|
|
return ArcSin(tmp2)
|
|
|
|
return ArcSin(tmp2)
|
|
|
@ -1402,8 +1402,8 @@ func GetMoonTZTime(JD, Lon, Lat, TZ float64) float64 { //实际中天时间{
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func MoonTimeAngle(JD, Lon, Lat, TZ float64) float64 {
|
|
|
|
func MoonTimeAngle(JD, Lon, Lat, TZ float64) float64 {
|
|
|
|
startime := Limit360(SeeStarTime(JD-TZ/24)*15 + Lon)
|
|
|
|
startime := Limit360(ApparentSiderealTime(JD-TZ/24)*15 + Lon)
|
|
|
|
timeangle := startime - HMoonSeeRa(JD-TZ/24, Lon, Lat, TZ)
|
|
|
|
timeangle := startime - HMoonApparentRa(JD-TZ/24, Lon, Lat, TZ)
|
|
|
|
if timeangle < 0 {
|
|
|
|
if timeangle < 0 {
|
|
|
|
timeangle += 360
|
|
|
|
timeangle += 360
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -1458,7 +1458,7 @@ func GetMoonRiseTime(JD, Lon, Lat, TZ, ZS, HEI float64) float64 {
|
|
|
|
return -2 //沉
|
|
|
|
return -2 //沉
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
dec := MoonSeeDec(JD1, Lon, Lat, TZ)
|
|
|
|
dec := MoonApparentDec(JD1, Lon, Lat, TZ)
|
|
|
|
tmp := (Sin(An) - Sin(dec)*Sin(Lat)) / (Cos(dec) * Cos(Lat))
|
|
|
|
tmp := (Sin(An) - Sin(dec)*Sin(Lat)) / (Cos(dec) * Cos(Lat))
|
|
|
|
if math.Abs(tmp) <= 1 && Lat < 85 {
|
|
|
|
if math.Abs(tmp) <= 1 && Lat < 85 {
|
|
|
|
SJ := (180 - ArcCos(tmp)) / 15
|
|
|
|
SJ := (180 - ArcCos(tmp)) / 15
|
|
|
@ -1536,7 +1536,7 @@ func GetMoonDownTime(JD, Lon, Lat, TZ, ZS, HEI float64) float64 {
|
|
|
|
return -1 //拱
|
|
|
|
return -1 //拱
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
dec := MoonSeeDec(JD1, Lon, Lat, TZ)
|
|
|
|
dec := MoonApparentDec(JD1, Lon, Lat, TZ)
|
|
|
|
tmp := (Sin(An) - Sin(dec)*Sin(Lat)) / (Cos(dec) * Cos(Lat))
|
|
|
|
tmp := (Sin(An) - Sin(dec)*Sin(Lat)) / (Cos(dec) * Cos(Lat))
|
|
|
|
if math.Abs(tmp) <= 1 && Lat < 85 {
|
|
|
|
if math.Abs(tmp) <= 1 && Lat < 85 {
|
|
|
|
SJ := (ArcCos(tmp)) / 15.0
|
|
|
|
SJ := (ArcCos(tmp)) / 15.0
|
|
|
@ -1662,12 +1662,12 @@ func HMoonAway(JD float64) float64 { //'月地距离
|
|
|
|
/*
|
|
|
|
/*
|
|
|
|
* @name 月球视黄经
|
|
|
|
* @name 月球视黄经
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
func HMoonSeeLo(JD float64) float64 {
|
|
|
|
func HMoonApparentLo(JD float64) float64 {
|
|
|
|
return HMoonTrueLo(JD) + HJZD(JD)
|
|
|
|
return HMoonTrueLo(JD) + HJZD(JD)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func HMoonTrueRaDec(JD float64) (float64, float64) {
|
|
|
|
func HMoonTrueRaDec(JD float64) (float64, float64) {
|
|
|
|
MoonLo := HMoonSeeLo(JD)
|
|
|
|
MoonLo := HMoonApparentLo(JD)
|
|
|
|
MoonBo := HMoonTrueBo(JD)
|
|
|
|
MoonBo := HMoonTrueBo(JD)
|
|
|
|
tmp := Sin(MoonBo)*Cos(Sita(JD)) + Cos(MoonBo)*Sin(Sita(JD))*Sin(MoonLo)
|
|
|
|
tmp := Sin(MoonBo)*Cos(Sita(JD)) + Cos(MoonBo)*Sin(Sita(JD))*Sin(MoonLo)
|
|
|
|
res := ArcSin(tmp)
|
|
|
|
res := ArcSin(tmp)
|
|
|
@ -1687,7 +1687,7 @@ func HMoonTrueRaDec(JD float64) (float64, float64) {
|
|
|
|
* 月球真赤纬
|
|
|
|
* 月球真赤纬
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
func HMoonTrueDec(JD float64) float64 {
|
|
|
|
func HMoonTrueDec(JD float64) float64 {
|
|
|
|
MoonLo := HMoonSeeLo(JD)
|
|
|
|
MoonLo := HMoonApparentLo(JD)
|
|
|
|
MoonBo := HMoonTrueBo(JD)
|
|
|
|
MoonBo := HMoonTrueBo(JD)
|
|
|
|
tmp := Sin(MoonBo)*Cos(Sita(JD)) + Cos(MoonBo)*Sin(Sita(JD))*Sin(MoonLo)
|
|
|
|
tmp := Sin(MoonBo)*Cos(Sita(JD)) + Cos(MoonBo)*Sin(Sita(JD))*Sin(MoonLo)
|
|
|
|
res := ArcSin(tmp)
|
|
|
|
res := ArcSin(tmp)
|
|
|
@ -1698,7 +1698,7 @@ func HMoonTrueDec(JD float64) float64 {
|
|
|
|
* 月球真赤经
|
|
|
|
* 月球真赤经
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
func HMoonTrueRa(JD float64) float64 {
|
|
|
|
func HMoonTrueRa(JD float64) float64 {
|
|
|
|
MoonLo := HMoonSeeLo(JD)
|
|
|
|
MoonLo := HMoonApparentLo(JD)
|
|
|
|
MoonBo := HMoonTrueBo(JD)
|
|
|
|
MoonBo := HMoonTrueBo(JD)
|
|
|
|
tmp := (Sin(MoonLo)*Cos(Sita(JD)) - Tan(MoonBo)*Sin(Sita(JD))) / Cos(MoonLo)
|
|
|
|
tmp := (Sin(MoonLo)*Cos(Sita(JD)) - Tan(MoonBo)*Sin(Sita(JD))) / Cos(MoonLo)
|
|
|
|
tmp = ArcTan(tmp)
|
|
|
|
tmp = ArcTan(tmp)
|
|
|
@ -1716,7 +1716,7 @@ func HMoonTrueRa(JD float64) float64 {
|
|
|
|
*
|
|
|
|
*
|
|
|
|
传入世界时
|
|
|
|
传入世界时
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
func HMoonSeeRaDec(JD, lon, lat, tz float64) (float64, float64) {
|
|
|
|
func HMoonApparentRaDec(JD, lon, lat, tz float64) (float64, float64) {
|
|
|
|
jde := TD2UT(JD, true)
|
|
|
|
jde := TD2UT(JD, true)
|
|
|
|
ra := HMoonTrueRa(jde - tz/24)
|
|
|
|
ra := HMoonTrueRa(jde - tz/24)
|
|
|
|
dec := HMoonTrueDec(jde - tz/24)
|
|
|
|
dec := HMoonTrueDec(jde - tz/24)
|
|
|
@ -1725,7 +1725,7 @@ func HMoonSeeRaDec(JD, lon, lat, tz float64) (float64, float64) {
|
|
|
|
return nra, ndec
|
|
|
|
return nra, ndec
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func HMoonSeeRa(JD, lon, lat, tz float64) float64 {
|
|
|
|
func HMoonApparentRa(JD, lon, lat, tz float64) float64 {
|
|
|
|
jde := TD2UT(JD, true)
|
|
|
|
jde := TD2UT(JD, true)
|
|
|
|
ra := HMoonTrueRa(jde - tz/24)
|
|
|
|
ra := HMoonTrueRa(jde - tz/24)
|
|
|
|
dec := HMoonTrueDec(jde - tz/24)
|
|
|
|
dec := HMoonTrueDec(jde - tz/24)
|
|
|
@ -1733,7 +1733,7 @@ func HMoonSeeRa(JD, lon, lat, tz float64) float64 {
|
|
|
|
nra := ZhanXinRa(ra, dec, lat, lon, JD-tz/24, away, 0)
|
|
|
|
nra := ZhanXinRa(ra, dec, lat, lon, JD-tz/24, away, 0)
|
|
|
|
return nra
|
|
|
|
return nra
|
|
|
|
}
|
|
|
|
}
|
|
|
|
func HMoonSeeDec(JD, lon, lat, tz float64) float64 {
|
|
|
|
func HMoonApparentDec(JD, lon, lat, tz float64) float64 {
|
|
|
|
jde := TD2UT(JD, true)
|
|
|
|
jde := TD2UT(JD, true)
|
|
|
|
ra := HMoonTrueRa(jde - tz/24)
|
|
|
|
ra := HMoonTrueRa(jde - tz/24)
|
|
|
|
dec := HMoonTrueDec(jde - tz/24)
|
|
|
|
dec := HMoonTrueDec(jde - tz/24)
|
|
|
|