improve rise/down calc
This commit is contained in:
+44
-10
@@ -1443,19 +1443,36 @@ func GetMoonRiseTime(JD, Lon, Lat, TZ, ZS, HEI float64) float64 {
|
||||
if math.Abs(now-180) > 0.5 {
|
||||
JD1 += (180 - now) * 4.0 / 60.0 / 24.0
|
||||
}
|
||||
hei := MoonHeight(JD1, Lon, Lat, TZ)
|
||||
hei := HMoonHeight(JD1, Lon, Lat, TZ)
|
||||
if !(hei < -10 && math.Abs(Lat) < 60) {
|
||||
if hei > An {
|
||||
return -1 //拱
|
||||
}
|
||||
if MoonHeight(JD1+12/24+6/15/24, Lon, Lat, TZ) < An {
|
||||
reJde := JD1 + 12.0/24.0 + 6.0/15.0/24.0
|
||||
mag := MoonTimeAngle(reJde, Lon, Lat, TZ)
|
||||
if mag < 90 {
|
||||
mag += 360
|
||||
}
|
||||
reJde += (360 - mag) * 4.0 / 60.0 / 24.0
|
||||
if HMoonHeight(reJde, Lon, Lat, TZ) < An {
|
||||
return -2 //沉
|
||||
}
|
||||
}
|
||||
dec := MoonSeeDec(JD1, Lon, Lat, TZ)
|
||||
SJ := (180 - ArcCos(-Tan(Lat)*Tan(dec))) / 15
|
||||
JD1 += SJ/24.00 + SJ/33.00/15.00
|
||||
|
||||
tmp := (Sin(An) - Sin(dec)*Sin(Lat)) / (Cos(dec) * Cos(Lat))
|
||||
if math.Abs(tmp) <= 1 && Lat < 85 {
|
||||
SJ := (180 - ArcCos(tmp)) / 15
|
||||
JD1 += SJ/24.00 + SJ/33.00/15.00
|
||||
} else {
|
||||
i := 0
|
||||
for MoonHeight(JD1, Lon, Lat, TZ) < An {
|
||||
i++
|
||||
JD1 += 15.0 / 60.0 / 24.0
|
||||
if i > 48 {
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
for {
|
||||
JD0 := JD1
|
||||
stDegree := HMoonHeight(JD0, Lon, Lat, TZ) - An
|
||||
@@ -1487,10 +1504,11 @@ func GetMoonDownTime(JD, Lon, Lat, TZ, ZS, HEI float64) float64 {
|
||||
}
|
||||
An = An - HeightDegreeByLat(HEI, Lat)
|
||||
moonang := MoonTimeAngle(JD, Lon, Lat, TZ)
|
||||
if moonheight < 0 { //月亮在地平线上或在落下与下中天之间
|
||||
if moonheight < 0 {
|
||||
tms = (360 - moonang) / 15
|
||||
JD1 += (tms/24 + (tms/24.0*12.0)/15.0/24.0)
|
||||
}
|
||||
//月亮在地平线上或在落下与下中天之间
|
||||
if moonheight > 0 && moonang < 180 {
|
||||
tms = (-moonang) / 15
|
||||
JD1 += (tms/24.0 + (tms/24.0*12.0)/15.0/24.0)
|
||||
@@ -1505,18 +1523,34 @@ func GetMoonDownTime(JD, Lon, Lat, TZ, ZS, HEI float64) float64 {
|
||||
if math.Abs(now-360) > 0.5 {
|
||||
JD1 += (360 - now) * 4.0 / 60.0 / 24.0
|
||||
}
|
||||
hei := MoonHeight(JD1, Lon, Lat, TZ)
|
||||
//JD1=月球中天时间
|
||||
hei := HMoonHeight(JD1, Lon, Lat, TZ)
|
||||
if !(hei > 10 && math.Abs(Lat) < 60) {
|
||||
if hei < An {
|
||||
return -2 //沉
|
||||
}
|
||||
if MoonHeight(JD1+12.0/24.0+6.0/15.0/24.0, Lon, Lat, TZ) > An {
|
||||
reJde := JD1 + 12.0/24.0 + 6.0/15.0/24.0
|
||||
sub := 180 - MoonTimeAngle(reJde, Lon, Lat, TZ)
|
||||
reJde += sub * 4.0 / 60.0 / 24.0
|
||||
if HMoonHeight(reJde, Lon, Lat, TZ) > An {
|
||||
return -1 //拱
|
||||
}
|
||||
}
|
||||
dec := MoonSeeDec(JD1, Lon, Lat, TZ)
|
||||
SJ := (ArcCos(-Tan(Lat) * Tan(dec))) / 15.0
|
||||
JD1 += SJ/24 + SJ/33.0/15.0
|
||||
tmp := (Sin(An) - Sin(dec)*Sin(Lat)) / (Cos(dec) * Cos(Lat))
|
||||
if math.Abs(tmp) <= 1 && Lat < 85 {
|
||||
SJ := (ArcCos(tmp)) / 15.0
|
||||
JD1 += SJ/24 + SJ/33.0/15.0
|
||||
} else {
|
||||
i := 0
|
||||
for MoonHeight(JD1, Lon, Lat, TZ) > An {
|
||||
i++
|
||||
JD1 += 15.0 / 60.0 / 24.0
|
||||
if i > 48 {
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
for {
|
||||
JD0 := JD1
|
||||
stDegree := HMoonHeight(JD0, Lon, Lat, TZ) - An
|
||||
|
||||
Reference in New Issue
Block a user