717 lines
30 KiB
Go
717 lines
30 KiB
Go
|
|
package basic
|
||
|
|
|
||
|
|
import (
|
||
|
|
"math"
|
||
|
|
|
||
|
|
"b612.me/astro/planet"
|
||
|
|
. "b612.me/astro/tools"
|
||
|
|
)
|
||
|
|
|
||
|
|
// Exported N variants below keep the same jd semantics as the non-N APIs; n < 0 means full series.
|
||
|
|
type planetDeclinationFuncN func(float64, int) float64
|
||
|
|
|
||
|
|
func planetXYZN(planetIndex int, jd float64, n int) (float64, float64, float64) {
|
||
|
|
l := planet.WherePlanetN(planetIndex, 0, jd, n)
|
||
|
|
b := planet.WherePlanetN(planetIndex, 1, jd, n)
|
||
|
|
r := planet.WherePlanetN(planetIndex, 2, jd, n)
|
||
|
|
el := planet.WherePlanetN(-1, 0, jd, n)
|
||
|
|
eb := planet.WherePlanetN(-1, 1, jd, n)
|
||
|
|
er := planet.WherePlanetN(-1, 2, jd, n)
|
||
|
|
x := r*Cos(b)*Cos(l) - er*Cos(eb)*Cos(el)
|
||
|
|
y := r*Cos(b)*Sin(l) - er*Cos(eb)*Sin(el)
|
||
|
|
z := r*Sin(b) - er*Sin(eb)
|
||
|
|
return x, y, z
|
||
|
|
}
|
||
|
|
|
||
|
|
func planetApparentLoBoN(planetIndex int, jd float64, n int) (float64, float64) {
|
||
|
|
x, y, z := planetXYZN(planetIndex, jd, n)
|
||
|
|
to := 0.0057755183 * math.Sqrt(x*x+y*y+z*z)
|
||
|
|
x, y, z = planetXYZN(planetIndex, jd-to, n)
|
||
|
|
lo := math.Atan2(y, x)
|
||
|
|
bo := math.Atan2(z, math.Sqrt(x*x+y*y))
|
||
|
|
lo = Limit360(lo*180/math.Pi) + Nutation2000Bi(jd)
|
||
|
|
bo = bo * 180 / math.Pi
|
||
|
|
return lo, bo
|
||
|
|
}
|
||
|
|
|
||
|
|
func planetApparentRaManualN(planetIndex int, jd float64, n int) float64 {
|
||
|
|
lo, bo := planetApparentLoBoN(planetIndex, jd, n)
|
||
|
|
eps := TrueObliquity(jd)
|
||
|
|
ra := math.Atan2((Sin(lo)*Cos(eps) - Tan(bo)*Sin(eps)), Cos(lo))
|
||
|
|
return Limit360(ra * 180 / math.Pi)
|
||
|
|
}
|
||
|
|
|
||
|
|
func planetApparentDecManualN(planetIndex int, jd float64, n int) float64 {
|
||
|
|
lo, bo := planetApparentLoBoN(planetIndex, jd, n)
|
||
|
|
eps := TrueObliquity(jd)
|
||
|
|
return ArcSin(Sin(bo)*Cos(eps) + Cos(bo)*Sin(eps)*Sin(lo))
|
||
|
|
}
|
||
|
|
|
||
|
|
func planetApparentRaDecManualN(planetIndex int, jd float64, n int) (float64, float64) {
|
||
|
|
lo, bo := planetApparentLoBoN(planetIndex, jd, n)
|
||
|
|
eps := TrueObliquity(jd)
|
||
|
|
ra := math.Atan2((Sin(lo)*Cos(eps) - Tan(bo)*Sin(eps)), Cos(lo))
|
||
|
|
ra = ra * 180 / math.Pi
|
||
|
|
dec := ArcSin(Sin(bo)*Cos(eps) + Cos(bo)*Sin(eps)*Sin(lo))
|
||
|
|
return Limit360(ra), dec
|
||
|
|
}
|
||
|
|
|
||
|
|
func planetEarthAwayN(planetIndex int, jd float64, n int) float64 {
|
||
|
|
x, y, z := planetXYZN(planetIndex, jd, n)
|
||
|
|
return math.Sqrt(x*x + y*y + z*z)
|
||
|
|
}
|
||
|
|
|
||
|
|
func planetHeightN(jde, lon, lat, timezone float64, n int, apparentRaDec func(float64, int) (float64, float64)) float64 {
|
||
|
|
utcJde := jde - timezone/24.0
|
||
|
|
ra, dec := apparentRaDec(TD2UT(utcJde, true), n)
|
||
|
|
st := Limit360(ApparentSiderealTime(utcJde)*15 + lon)
|
||
|
|
H := Limit360(st - ra)
|
||
|
|
sinHeight := Sin(lat)*Sin(dec) + Cos(dec)*Cos(lat)*Cos(H)
|
||
|
|
return ArcSin(sinHeight)
|
||
|
|
}
|
||
|
|
|
||
|
|
func planetAzimuthN(jde, lon, lat, timezone float64, n int, apparentRaDec func(float64, int) (float64, float64)) float64 {
|
||
|
|
utcJde := jde - timezone/24.0
|
||
|
|
ra, dec := apparentRaDec(TD2UT(utcJde, true), n)
|
||
|
|
st := Limit360(ApparentSiderealTime(utcJde)*15 + lon)
|
||
|
|
H := Limit360(st - ra)
|
||
|
|
tanAzimuth := Sin(H) / (Cos(H)*Sin(lat) - Tan(dec)*Cos(lat))
|
||
|
|
azimuth := ArcTan(tanAzimuth)
|
||
|
|
if azimuth < 0 {
|
||
|
|
if H/15 < 12 {
|
||
|
|
return azimuth + 360
|
||
|
|
}
|
||
|
|
return azimuth + 180
|
||
|
|
}
|
||
|
|
if H/15 < 12 {
|
||
|
|
return azimuth + 180
|
||
|
|
}
|
||
|
|
return azimuth
|
||
|
|
}
|
||
|
|
|
||
|
|
func planetHourAngleN(jd, lon, timezone float64, n int, apparentRa func(float64, int) float64) float64 {
|
||
|
|
siderealLongitude := Limit360(ApparentSiderealTime(jd-timezone/24)*15 + lon)
|
||
|
|
hourAngle := siderealLongitude - apparentRa(TD2UT(jd-timezone/24.0, true), n)
|
||
|
|
if hourAngle < 0 {
|
||
|
|
hourAngle += 360
|
||
|
|
}
|
||
|
|
return hourAngle
|
||
|
|
}
|
||
|
|
|
||
|
|
func planetCulminationTimeN(jde, lon, timezone float64, n int, hourAngle func(float64, float64, float64, int) float64) float64 {
|
||
|
|
jde = math.Floor(jde) + 0.5
|
||
|
|
estimateJD := jde + Limit360(360-hourAngle(jde, lon, timezone, n))/15.0/24.0*0.99726851851851851851
|
||
|
|
normalizedHourAngle := func(jde, lon, timezone float64) float64 {
|
||
|
|
currentHourAngle := hourAngle(jde, lon, timezone, n)
|
||
|
|
if currentHourAngle < 180 {
|
||
|
|
currentHourAngle += 360
|
||
|
|
}
|
||
|
|
return currentHourAngle
|
||
|
|
}
|
||
|
|
for {
|
||
|
|
prevJD := estimateJD
|
||
|
|
hourAngleDelta := normalizedHourAngle(prevJD, lon, timezone) - 360
|
||
|
|
hourAngleSlope := (normalizedHourAngle(prevJD+0.000005, lon, timezone) - normalizedHourAngle(prevJD-0.000005, lon, timezone)) / 0.00001
|
||
|
|
estimateJD = prevJD - hourAngleDelta/hourAngleSlope
|
||
|
|
if math.Abs(estimateJD-prevJD) <= 0.00001 {
|
||
|
|
break
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return estimateJD
|
||
|
|
}
|
||
|
|
|
||
|
|
func planetRiseDownN(jd, lon, lat, timezone, aeroCorrection, observerHeight float64, isRise bool, n int, culmination func(float64, float64, float64, int) float64, height func(float64, float64, float64, float64, int) float64, declination planetDeclinationFuncN) (float64, error) {
|
||
|
|
jd = math.Floor(jd) + 0.5
|
||
|
|
localTimezone := math.Round(lon / 15)
|
||
|
|
targetAltitude := StandardAltitudePlanet(aeroCorrection, observerHeight, lat)
|
||
|
|
culminationJD := culmination(jd, lon, localTimezone, n)
|
||
|
|
if height(culminationJD, lon, lat, localTimezone, n) < targetAltitude {
|
||
|
|
return 0, ErrNeverRise
|
||
|
|
}
|
||
|
|
if height(culminationJD-0.5, lon, lat, localTimezone, n) > targetAltitude {
|
||
|
|
return 0, ErrNeverSet
|
||
|
|
}
|
||
|
|
dec := declination(TD2UT(culminationJD-localTimezone/24, true), n)
|
||
|
|
cosHourAngle := (Sin(targetAltitude) - Sin(dec)*Sin(lat)) / (Cos(dec) * Cos(lat))
|
||
|
|
var eventJD float64
|
||
|
|
if math.Abs(cosHourAngle) <= 1 {
|
||
|
|
hourOffset := ArcCos(cosHourAngle) / 15
|
||
|
|
if isRise {
|
||
|
|
eventJD = culminationJD - hourOffset/24 - 25.0/24.0/60.0
|
||
|
|
} else {
|
||
|
|
eventJD = culminationJD + hourOffset/24 - 25.0/24.0/60.0
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
eventJD = culminationJD
|
||
|
|
steps := 0
|
||
|
|
for height(eventJD, lon, lat, localTimezone, n) > targetAltitude {
|
||
|
|
steps++
|
||
|
|
if isRise {
|
||
|
|
eventJD -= 15.0 / 60.0 / 24.0
|
||
|
|
} else {
|
||
|
|
eventJD += 15.0 / 60.0 / 24.0
|
||
|
|
}
|
||
|
|
if steps > 48 {
|
||
|
|
break
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
estimateJD := eventJD
|
||
|
|
for {
|
||
|
|
prevJD := estimateJD
|
||
|
|
altitudeDelta := height(prevJD, lon, lat, localTimezone, n) - targetAltitude
|
||
|
|
altitudeSlope := (height(prevJD+0.000005, lon, lat, localTimezone, n) - height(prevJD-0.000005, lon, lat, localTimezone, n)) / 0.00001
|
||
|
|
estimateJD = prevJD - altitudeDelta/altitudeSlope
|
||
|
|
if math.Abs(estimateJD-prevJD) <= 0.00001 {
|
||
|
|
break
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return estimateJD - localTimezone/24 + timezone/24, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// MercuryApparentLoN 水星视黄经(截断版) / truncated apparent ecliptic longitude of Mercury.
|
||
|
|
func MercuryApparentLoN(jd float64, n int) float64 {
|
||
|
|
lo, _ := planetApparentLoBoN(1, jd, n)
|
||
|
|
return lo
|
||
|
|
}
|
||
|
|
|
||
|
|
// MercuryApparentBoN 水星视黄纬(截断版) / truncated apparent ecliptic latitude of Mercury.
|
||
|
|
func MercuryApparentBoN(jd float64, n int) float64 {
|
||
|
|
_, bo := planetApparentLoBoN(1, jd, n)
|
||
|
|
return bo
|
||
|
|
}
|
||
|
|
|
||
|
|
// MercuryApparentLoBoN 水星视黄经黄纬(截断版) / truncated apparent ecliptic longitude and latitude of Mercury.
|
||
|
|
func MercuryApparentLoBoN(jd float64, n int) (float64, float64) {
|
||
|
|
return planetApparentLoBoN(1, jd, n)
|
||
|
|
}
|
||
|
|
|
||
|
|
// MercuryApparentRaN 水星视赤经(截断版) / truncated apparent right ascension of Mercury.
|
||
|
|
func MercuryApparentRaN(jd float64, n int) float64 {
|
||
|
|
lo, bo := MercuryApparentLoBoN(jd, n)
|
||
|
|
return LoToRa(jd, lo, bo)
|
||
|
|
}
|
||
|
|
|
||
|
|
// MercuryApparentDecN 水星视赤纬(截断版) / truncated apparent declination of Mercury.
|
||
|
|
func MercuryApparentDecN(jd float64, n int) float64 {
|
||
|
|
lo, bo := MercuryApparentLoBoN(jd, n)
|
||
|
|
eps := TrueObliquity(jd)
|
||
|
|
return ArcSin(Sin(bo)*Cos(eps) + Cos(bo)*Sin(eps)*Sin(lo))
|
||
|
|
}
|
||
|
|
|
||
|
|
// MercuryApparentRaDecN 水星视赤经赤纬(截断版) / truncated apparent right ascension and declination of Mercury.
|
||
|
|
func MercuryApparentRaDecN(jd float64, n int) (float64, float64) {
|
||
|
|
lo, bo := MercuryApparentLoBoN(jd, n)
|
||
|
|
return LoBoToRaDec(jd, lo, bo)
|
||
|
|
}
|
||
|
|
|
||
|
|
// EarthMercuryAwayN 地水距离(截断版) / truncated Earth-Mercury distance.
|
||
|
|
func EarthMercuryAwayN(jd float64, n int) float64 {
|
||
|
|
return planetEarthAwayN(1, jd, n)
|
||
|
|
}
|
||
|
|
|
||
|
|
// MercuryMagN 水星视星等(截断版) / truncated apparent magnitude of Mercury.
|
||
|
|
func MercuryMagN(jd float64, n int) float64 {
|
||
|
|
awaySun := planet.WherePlanetN(1, 2, jd, n)
|
||
|
|
awayEarth := EarthMercuryAwayN(jd, n)
|
||
|
|
away := planet.WherePlanetN(-1, 2, jd, n)
|
||
|
|
i := (awaySun*awaySun + awayEarth*awayEarth - away*away) / (2 * awaySun * awayEarth)
|
||
|
|
i = ArcCos(i)
|
||
|
|
mag := -0.42 + 5*math.Log10(awaySun*awayEarth) + 0.0380*i - 0.000273*i*i + 0.000002*i*i*i
|
||
|
|
return FloatRound(mag, 2)
|
||
|
|
}
|
||
|
|
|
||
|
|
// MercuryHeightN 水星高度角(截断版) / truncated altitude of Mercury.
|
||
|
|
func MercuryHeightN(jde, lon, lat, timezone float64, n int) float64 {
|
||
|
|
return planetHeightN(jde, lon, lat, timezone, n, MercuryApparentRaDecN)
|
||
|
|
}
|
||
|
|
|
||
|
|
// MercuryAzimuthN 水星方位角(截断版) / truncated azimuth of Mercury.
|
||
|
|
func MercuryAzimuthN(jde, lon, lat, timezone float64, n int) float64 {
|
||
|
|
return planetAzimuthN(jde, lon, lat, timezone, n, MercuryApparentRaDecN)
|
||
|
|
}
|
||
|
|
|
||
|
|
// MercuryHourAngleN 水星时角(截断版) / truncated hour angle of Mercury.
|
||
|
|
func MercuryHourAngleN(jd, lon, timezone float64, n int) float64 {
|
||
|
|
return planetHourAngleN(jd, lon, timezone, n, MercuryApparentRaN)
|
||
|
|
}
|
||
|
|
|
||
|
|
// MercuryCulminationTimeN 水星中天时间(截断版) / truncated culmination time of Mercury.
|
||
|
|
func MercuryCulminationTimeN(jde, lon, timezone float64, n int) float64 {
|
||
|
|
return planetCulminationTimeN(jde, lon, timezone, n, MercuryHourAngleN)
|
||
|
|
}
|
||
|
|
|
||
|
|
// MercuryRiseTimeN 水星升起时间(截断版) / truncated rise time of Mercury.
|
||
|
|
func MercuryRiseTimeN(jd, lon, lat, timezone, aeroCorrection, observerHeight float64, n int) (float64, error) {
|
||
|
|
return planetRiseDownN(jd, lon, lat, timezone, aeroCorrection, observerHeight, true, n, MercuryCulminationTimeN, MercuryHeightN, MercuryApparentDecN)
|
||
|
|
}
|
||
|
|
|
||
|
|
// MercurySetTimeN 水星落下时间(截断版) / truncated set time of Mercury.
|
||
|
|
func MercurySetTimeN(jd, lon, lat, timezone, aeroCorrection, observerHeight float64, n int) (float64, error) {
|
||
|
|
return planetRiseDownN(jd, lon, lat, timezone, aeroCorrection, observerHeight, false, n, MercuryCulminationTimeN, MercuryHeightN, MercuryApparentDecN)
|
||
|
|
}
|
||
|
|
|
||
|
|
// VenusApparentLoN 金星视黄经(截断版) / truncated apparent ecliptic longitude of Venus.
|
||
|
|
func VenusApparentLoN(jd float64, n int) float64 {
|
||
|
|
lo, _ := planetApparentLoBoN(2, jd, n)
|
||
|
|
return lo
|
||
|
|
}
|
||
|
|
|
||
|
|
// VenusApparentBoN 金星视黄纬(截断版) / truncated apparent ecliptic latitude of Venus.
|
||
|
|
func VenusApparentBoN(jd float64, n int) float64 {
|
||
|
|
_, bo := planetApparentLoBoN(2, jd, n)
|
||
|
|
return bo
|
||
|
|
}
|
||
|
|
|
||
|
|
// VenusApparentLoBoN 金星视黄经黄纬(截断版) / truncated apparent ecliptic longitude and latitude of Venus.
|
||
|
|
func VenusApparentLoBoN(jd float64, n int) (float64, float64) {
|
||
|
|
return planetApparentLoBoN(2, jd, n)
|
||
|
|
}
|
||
|
|
|
||
|
|
// VenusApparentRaN 金星视赤经(截断版) / truncated apparent right ascension of Venus.
|
||
|
|
func VenusApparentRaN(jd float64, n int) float64 {
|
||
|
|
return planetApparentRaManualN(2, jd, n)
|
||
|
|
}
|
||
|
|
|
||
|
|
// VenusApparentDecN 金星视赤纬(截断版) / truncated apparent declination of Venus.
|
||
|
|
func VenusApparentDecN(jd float64, n int) float64 {
|
||
|
|
return planetApparentDecManualN(2, jd, n)
|
||
|
|
}
|
||
|
|
|
||
|
|
// VenusApparentRaDecN 金星视赤经赤纬(截断版) / truncated apparent right ascension and declination of Venus.
|
||
|
|
func VenusApparentRaDecN(jd float64, n int) (float64, float64) {
|
||
|
|
return planetApparentRaDecManualN(2, jd, n)
|
||
|
|
}
|
||
|
|
|
||
|
|
// EarthVenusAwayN 地金距离(截断版) / truncated Earth-Venus distance.
|
||
|
|
func EarthVenusAwayN(jd float64, n int) float64 {
|
||
|
|
return planetEarthAwayN(2, jd, n)
|
||
|
|
}
|
||
|
|
|
||
|
|
// VenusMagN 金星视星等(截断版) / truncated apparent magnitude of Venus.
|
||
|
|
func VenusMagN(jd float64, n int) float64 {
|
||
|
|
awaySun := planet.WherePlanetN(2, 2, jd, n)
|
||
|
|
awayEarth := EarthVenusAwayN(jd, n)
|
||
|
|
away := planet.WherePlanetN(-1, 2, jd, n)
|
||
|
|
i := (awaySun*awaySun + awayEarth*awayEarth - away*away) / (2 * awaySun * awayEarth)
|
||
|
|
i = ArcCos(i)
|
||
|
|
mag := -4.40 + 5*math.Log10(awaySun*awayEarth) + 0.0009*i + 0.000239*i*i - 0.00000065*i*i*i
|
||
|
|
return FloatRound(mag, 2)
|
||
|
|
}
|
||
|
|
|
||
|
|
// VenusHeightN 金星高度角(截断版) / truncated altitude of Venus.
|
||
|
|
func VenusHeightN(jde, lon, lat, timezone float64, n int) float64 {
|
||
|
|
return planetHeightN(jde, lon, lat, timezone, n, VenusApparentRaDecN)
|
||
|
|
}
|
||
|
|
|
||
|
|
// VenusAzimuthN 金星方位角(截断版) / truncated azimuth of Venus.
|
||
|
|
func VenusAzimuthN(jde, lon, lat, timezone float64, n int) float64 {
|
||
|
|
return planetAzimuthN(jde, lon, lat, timezone, n, VenusApparentRaDecN)
|
||
|
|
}
|
||
|
|
|
||
|
|
// VenusHourAngleN 金星时角(截断版) / truncated hour angle of Venus.
|
||
|
|
func VenusHourAngleN(jd, lon, timezone float64, n int) float64 {
|
||
|
|
return planetHourAngleN(jd, lon, timezone, n, VenusApparentRaN)
|
||
|
|
}
|
||
|
|
|
||
|
|
// VenusCulminationTimeN 金星中天时间(截断版) / truncated culmination time of Venus.
|
||
|
|
func VenusCulminationTimeN(jde, lon, timezone float64, n int) float64 {
|
||
|
|
return planetCulminationTimeN(jde, lon, timezone, n, VenusHourAngleN)
|
||
|
|
}
|
||
|
|
|
||
|
|
// VenusRiseTimeN 金星升起时间(截断版) / truncated rise time of Venus.
|
||
|
|
func VenusRiseTimeN(jd, lon, lat, timezone, aeroCorrection, observerHeight float64, n int) (float64, error) {
|
||
|
|
return planetRiseDownN(jd, lon, lat, timezone, aeroCorrection, observerHeight, true, n, VenusCulminationTimeN, VenusHeightN, VenusApparentDecN)
|
||
|
|
}
|
||
|
|
|
||
|
|
// VenusSetTimeN 金星落下时间(截断版) / truncated set time of Venus.
|
||
|
|
func VenusSetTimeN(jd, lon, lat, timezone, aeroCorrection, observerHeight float64, n int) (float64, error) {
|
||
|
|
return planetRiseDownN(jd, lon, lat, timezone, aeroCorrection, observerHeight, false, n, VenusCulminationTimeN, VenusHeightN, VenusApparentDecN)
|
||
|
|
}
|
||
|
|
|
||
|
|
// MarsApparentLoN 火星视黄经(截断版) / truncated apparent ecliptic longitude of Mars.
|
||
|
|
func MarsApparentLoN(jd float64, n int) float64 {
|
||
|
|
lo, _ := planetApparentLoBoN(3, jd, n)
|
||
|
|
return lo
|
||
|
|
}
|
||
|
|
|
||
|
|
// MarsApparentBoN 火星视黄纬(截断版) / truncated apparent ecliptic latitude of Mars.
|
||
|
|
func MarsApparentBoN(jd float64, n int) float64 {
|
||
|
|
_, bo := planetApparentLoBoN(3, jd, n)
|
||
|
|
return bo
|
||
|
|
}
|
||
|
|
|
||
|
|
// MarsApparentLoBoN 火星视黄经黄纬(截断版) / truncated apparent ecliptic longitude and latitude of Mars.
|
||
|
|
func MarsApparentLoBoN(jd float64, n int) (float64, float64) {
|
||
|
|
return planetApparentLoBoN(3, jd, n)
|
||
|
|
}
|
||
|
|
|
||
|
|
// MarsApparentRaN 火星视赤经(截断版) / truncated apparent right ascension of Mars.
|
||
|
|
func MarsApparentRaN(jd float64, n int) float64 {
|
||
|
|
return planetApparentRaManualN(3, jd, n)
|
||
|
|
}
|
||
|
|
|
||
|
|
// MarsApparentDecN 火星视赤纬(截断版) / truncated apparent declination of Mars.
|
||
|
|
func MarsApparentDecN(jd float64, n int) float64 {
|
||
|
|
return planetApparentDecManualN(3, jd, n)
|
||
|
|
}
|
||
|
|
|
||
|
|
// MarsApparentRaDecN 火星视赤经赤纬(截断版) / truncated apparent right ascension and declination of Mars.
|
||
|
|
func MarsApparentRaDecN(jd float64, n int) (float64, float64) {
|
||
|
|
return planetApparentRaDecManualN(3, jd, n)
|
||
|
|
}
|
||
|
|
|
||
|
|
// EarthMarsAwayN 地火距离(截断版) / truncated Earth-Mars distance.
|
||
|
|
func EarthMarsAwayN(jd float64, n int) float64 {
|
||
|
|
return planetEarthAwayN(3, jd, n)
|
||
|
|
}
|
||
|
|
|
||
|
|
// MarsMagN 火星视星等(截断版) / truncated apparent magnitude of Mars.
|
||
|
|
func MarsMagN(jd float64, n int) float64 {
|
||
|
|
awaySun := planet.WherePlanetN(3, 2, jd, n)
|
||
|
|
awayEarth := EarthMarsAwayN(jd, n)
|
||
|
|
away := planet.WherePlanetN(-1, 2, jd, n)
|
||
|
|
i := (awaySun*awaySun + awayEarth*awayEarth - away*away) / (2 * awaySun * awayEarth)
|
||
|
|
i = ArcCos(i)
|
||
|
|
mag := -1.52 + 5*math.Log10(awaySun*awayEarth) + 0.016*i
|
||
|
|
return FloatRound(mag, 2)
|
||
|
|
}
|
||
|
|
|
||
|
|
// MarsHeightN 火星高度角(截断版) / truncated altitude of Mars.
|
||
|
|
func MarsHeightN(jde, lon, lat, timezone float64, n int) float64 {
|
||
|
|
return planetHeightN(jde, lon, lat, timezone, n, MarsApparentRaDecN)
|
||
|
|
}
|
||
|
|
|
||
|
|
// MarsAzimuthN 火星方位角(截断版) / truncated azimuth of Mars.
|
||
|
|
func MarsAzimuthN(jde, lon, lat, timezone float64, n int) float64 {
|
||
|
|
return planetAzimuthN(jde, lon, lat, timezone, n, MarsApparentRaDecN)
|
||
|
|
}
|
||
|
|
|
||
|
|
// MarsHourAngleN 火星时角(截断版) / truncated hour angle of Mars.
|
||
|
|
func MarsHourAngleN(jd, lon, timezone float64, n int) float64 {
|
||
|
|
return planetHourAngleN(jd, lon, timezone, n, MarsApparentRaN)
|
||
|
|
}
|
||
|
|
|
||
|
|
// MarsCulminationTimeN 火星中天时间(截断版) / truncated culmination time of Mars.
|
||
|
|
func MarsCulminationTimeN(jde, lon, timezone float64, n int) float64 {
|
||
|
|
return planetCulminationTimeN(jde, lon, timezone, n, MarsHourAngleN)
|
||
|
|
}
|
||
|
|
|
||
|
|
// MarsRiseTimeN 火星升起时间(截断版) / truncated rise time of Mars.
|
||
|
|
func MarsRiseTimeN(jd, lon, lat, timezone, aeroCorrection, observerHeight float64, n int) (float64, error) {
|
||
|
|
return planetRiseDownN(jd, lon, lat, timezone, aeroCorrection, observerHeight, true, n, MarsCulminationTimeN, MarsHeightN, MarsApparentDecN)
|
||
|
|
}
|
||
|
|
|
||
|
|
// MarsSetTimeN 火星落下时间(截断版) / truncated set time of Mars.
|
||
|
|
func MarsSetTimeN(jd, lon, lat, timezone, aeroCorrection, observerHeight float64, n int) (float64, error) {
|
||
|
|
return planetRiseDownN(jd, lon, lat, timezone, aeroCorrection, observerHeight, false, n, MarsCulminationTimeN, MarsHeightN, MarsApparentDecN)
|
||
|
|
}
|
||
|
|
|
||
|
|
// JupiterApparentLoN 木星视黄经(截断版) / truncated apparent ecliptic longitude of Jupiter.
|
||
|
|
func JupiterApparentLoN(jd float64, n int) float64 {
|
||
|
|
lo, _ := planetApparentLoBoN(4, jd, n)
|
||
|
|
return lo
|
||
|
|
}
|
||
|
|
|
||
|
|
// JupiterApparentBoN 木星视黄纬(截断版) / truncated apparent ecliptic latitude of Jupiter.
|
||
|
|
func JupiterApparentBoN(jd float64, n int) float64 {
|
||
|
|
_, bo := planetApparentLoBoN(4, jd, n)
|
||
|
|
return bo
|
||
|
|
}
|
||
|
|
|
||
|
|
// JupiterApparentLoBoN 木星视黄经黄纬(截断版) / truncated apparent ecliptic longitude and latitude of Jupiter.
|
||
|
|
func JupiterApparentLoBoN(jd float64, n int) (float64, float64) {
|
||
|
|
return planetApparentLoBoN(4, jd, n)
|
||
|
|
}
|
||
|
|
|
||
|
|
// JupiterApparentRaN 木星视赤经(截断版) / truncated apparent right ascension of Jupiter.
|
||
|
|
func JupiterApparentRaN(jd float64, n int) float64 {
|
||
|
|
return planetApparentRaManualN(4, jd, n)
|
||
|
|
}
|
||
|
|
|
||
|
|
// JupiterApparentDecN 木星视赤纬(截断版) / truncated apparent declination of Jupiter.
|
||
|
|
func JupiterApparentDecN(jd float64, n int) float64 {
|
||
|
|
return planetApparentDecManualN(4, jd, n)
|
||
|
|
}
|
||
|
|
|
||
|
|
// JupiterApparentRaDecN 木星视赤经赤纬(截断版) / truncated apparent right ascension and declination of Jupiter.
|
||
|
|
func JupiterApparentRaDecN(jd float64, n int) (float64, float64) {
|
||
|
|
return planetApparentRaDecManualN(4, jd, n)
|
||
|
|
}
|
||
|
|
|
||
|
|
// EarthJupiterAwayN 地木距离(截断版) / truncated Earth-Jupiter distance.
|
||
|
|
func EarthJupiterAwayN(jd float64, n int) float64 {
|
||
|
|
return planetEarthAwayN(4, jd, n)
|
||
|
|
}
|
||
|
|
|
||
|
|
// JupiterMagN 木星视星等(截断版) / truncated apparent magnitude of Jupiter.
|
||
|
|
func JupiterMagN(jd float64, n int) float64 {
|
||
|
|
awaySun := planet.WherePlanetN(4, 2, jd, n)
|
||
|
|
awayEarth := EarthJupiterAwayN(jd, n)
|
||
|
|
away := planet.WherePlanetN(-1, 2, jd, n)
|
||
|
|
i := (awaySun*awaySun + awayEarth*awayEarth - away*away) / (2 * awaySun * awayEarth)
|
||
|
|
i = ArcCos(i)
|
||
|
|
mag := -9.40 + 5*math.Log10(awaySun*awayEarth) + 0.0005*i
|
||
|
|
return FloatRound(mag, 2)
|
||
|
|
}
|
||
|
|
|
||
|
|
// JupiterHeightN 木星高度角(截断版) / truncated altitude of Jupiter.
|
||
|
|
func JupiterHeightN(jde, lon, lat, timezone float64, n int) float64 {
|
||
|
|
return planetHeightN(jde, lon, lat, timezone, n, JupiterApparentRaDecN)
|
||
|
|
}
|
||
|
|
|
||
|
|
// JupiterAzimuthN 木星方位角(截断版) / truncated azimuth of Jupiter.
|
||
|
|
func JupiterAzimuthN(jde, lon, lat, timezone float64, n int) float64 {
|
||
|
|
return planetAzimuthN(jde, lon, lat, timezone, n, JupiterApparentRaDecN)
|
||
|
|
}
|
||
|
|
|
||
|
|
// JupiterHourAngleN 木星时角(截断版) / truncated hour angle of Jupiter.
|
||
|
|
func JupiterHourAngleN(jd, lon, timezone float64, n int) float64 {
|
||
|
|
return planetHourAngleN(jd, lon, timezone, n, JupiterApparentRaN)
|
||
|
|
}
|
||
|
|
|
||
|
|
// JupiterCulminationTimeN 木星中天时间(截断版) / truncated culmination time of Jupiter.
|
||
|
|
func JupiterCulminationTimeN(jde, lon, timezone float64, n int) float64 {
|
||
|
|
return planetCulminationTimeN(jde, lon, timezone, n, JupiterHourAngleN)
|
||
|
|
}
|
||
|
|
|
||
|
|
// JupiterRiseTimeN 木星升起时间(截断版) / truncated rise time of Jupiter.
|
||
|
|
func JupiterRiseTimeN(jd, lon, lat, timezone, aeroCorrection, observerHeight float64, n int) (float64, error) {
|
||
|
|
return planetRiseDownN(jd, lon, lat, timezone, aeroCorrection, observerHeight, true, n, JupiterCulminationTimeN, JupiterHeightN, JupiterApparentDecN)
|
||
|
|
}
|
||
|
|
|
||
|
|
// JupiterSetTimeN 木星落下时间(截断版) / truncated set time of Jupiter.
|
||
|
|
func JupiterSetTimeN(jd, lon, lat, timezone, aeroCorrection, observerHeight float64, n int) (float64, error) {
|
||
|
|
return planetRiseDownN(jd, lon, lat, timezone, aeroCorrection, observerHeight, false, n, JupiterCulminationTimeN, JupiterHeightN, JupiterApparentDecN)
|
||
|
|
}
|
||
|
|
|
||
|
|
// SaturnApparentLoN 土星视黄经(截断版) / truncated apparent ecliptic longitude of Saturn.
|
||
|
|
func SaturnApparentLoN(jd float64, n int) float64 {
|
||
|
|
lo, _ := planetApparentLoBoN(5, jd, n)
|
||
|
|
return lo
|
||
|
|
}
|
||
|
|
|
||
|
|
// SaturnApparentBoN 土星视黄纬(截断版) / truncated apparent ecliptic latitude of Saturn.
|
||
|
|
func SaturnApparentBoN(jd float64, n int) float64 {
|
||
|
|
_, bo := planetApparentLoBoN(5, jd, n)
|
||
|
|
return bo
|
||
|
|
}
|
||
|
|
|
||
|
|
// SaturnApparentLoBoN 土星视黄经黄纬(截断版) / truncated apparent ecliptic longitude and latitude of Saturn.
|
||
|
|
func SaturnApparentLoBoN(jd float64, n int) (float64, float64) {
|
||
|
|
return planetApparentLoBoN(5, jd, n)
|
||
|
|
}
|
||
|
|
|
||
|
|
// SaturnApparentRaN 土星视赤经(截断版) / truncated apparent right ascension of Saturn.
|
||
|
|
func SaturnApparentRaN(jd float64, n int) float64 {
|
||
|
|
return planetApparentRaManualN(5, jd, n)
|
||
|
|
}
|
||
|
|
|
||
|
|
// SaturnApparentDecN 土星视赤纬(截断版) / truncated apparent declination of Saturn.
|
||
|
|
func SaturnApparentDecN(jd float64, n int) float64 {
|
||
|
|
return planetApparentDecManualN(5, jd, n)
|
||
|
|
}
|
||
|
|
|
||
|
|
// SaturnApparentRaDecN 土星视赤经赤纬(截断版) / truncated apparent right ascension and declination of Saturn.
|
||
|
|
func SaturnApparentRaDecN(jd float64, n int) (float64, float64) {
|
||
|
|
return planetApparentRaDecManualN(5, jd, n)
|
||
|
|
}
|
||
|
|
|
||
|
|
// EarthSaturnAwayN 地土距离(截断版) / truncated Earth-Saturn distance.
|
||
|
|
func EarthSaturnAwayN(jd float64, n int) float64 {
|
||
|
|
return planetEarthAwayN(5, jd, n)
|
||
|
|
}
|
||
|
|
|
||
|
|
// SaturnMagN 土星视星等(截断版) / truncated apparent magnitude of Saturn.
|
||
|
|
func SaturnMagN(jd float64, n int) float64 {
|
||
|
|
awaySun := planet.WherePlanetN(5, 2, jd, n)
|
||
|
|
awayEarth := EarthSaturnAwayN(jd, n)
|
||
|
|
ringB, _, _, deltaU, _, _ := SaturnRingParametersN(jd, n)
|
||
|
|
ringB = math.Abs(ringB)
|
||
|
|
mag := -8.68 + 5*math.Log10(awaySun*awayEarth) + 0.044*deltaU - 2.6*Sin(ringB) + 1.25*Sin(ringB)*Sin(ringB)
|
||
|
|
return FloatRound(mag, 2)
|
||
|
|
}
|
||
|
|
|
||
|
|
// SaturnHeightN 土星高度角(截断版) / truncated altitude of Saturn.
|
||
|
|
func SaturnHeightN(jde, lon, lat, timezone float64, n int) float64 {
|
||
|
|
return planetHeightN(jde, lon, lat, timezone, n, SaturnApparentRaDecN)
|
||
|
|
}
|
||
|
|
|
||
|
|
// SaturnAzimuthN 土星方位角(截断版) / truncated azimuth of Saturn.
|
||
|
|
func SaturnAzimuthN(jde, lon, lat, timezone float64, n int) float64 {
|
||
|
|
return planetAzimuthN(jde, lon, lat, timezone, n, SaturnApparentRaDecN)
|
||
|
|
}
|
||
|
|
|
||
|
|
// SaturnHourAngleN 土星时角(截断版) / truncated hour angle of Saturn.
|
||
|
|
func SaturnHourAngleN(jd, lon, timezone float64, n int) float64 {
|
||
|
|
return planetHourAngleN(jd, lon, timezone, n, SaturnApparentRaN)
|
||
|
|
}
|
||
|
|
|
||
|
|
// SaturnCulminationTimeN 土星中天时间(截断版) / truncated culmination time of Saturn.
|
||
|
|
func SaturnCulminationTimeN(jde, lon, timezone float64, n int) float64 {
|
||
|
|
return planetCulminationTimeN(jde, lon, timezone, n, SaturnHourAngleN)
|
||
|
|
}
|
||
|
|
|
||
|
|
// SaturnRiseTimeN 土星升起时间(截断版) / truncated rise time of Saturn.
|
||
|
|
func SaturnRiseTimeN(jd, lon, lat, timezone, aeroCorrection, observerHeight float64, n int) (float64, error) {
|
||
|
|
return planetRiseDownN(jd, lon, lat, timezone, aeroCorrection, observerHeight, true, n, SaturnCulminationTimeN, SaturnHeightN, SaturnApparentDecN)
|
||
|
|
}
|
||
|
|
|
||
|
|
// SaturnSetTimeN 土星落下时间(截断版) / truncated set time of Saturn.
|
||
|
|
func SaturnSetTimeN(jd, lon, lat, timezone, aeroCorrection, observerHeight float64, n int) (float64, error) {
|
||
|
|
return planetRiseDownN(jd, lon, lat, timezone, aeroCorrection, observerHeight, false, n, SaturnCulminationTimeN, SaturnHeightN, SaturnApparentDecN)
|
||
|
|
}
|
||
|
|
|
||
|
|
// UranusApparentLoN 天王星视黄经(截断版) / truncated apparent ecliptic longitude of Uranus.
|
||
|
|
func UranusApparentLoN(jd float64, n int) float64 {
|
||
|
|
lo, _ := planetApparentLoBoN(6, jd, n)
|
||
|
|
return lo
|
||
|
|
}
|
||
|
|
|
||
|
|
// UranusApparentBoN 天王星视黄纬(截断版) / truncated apparent ecliptic latitude of Uranus.
|
||
|
|
func UranusApparentBoN(jd float64, n int) float64 {
|
||
|
|
_, bo := planetApparentLoBoN(6, jd, n)
|
||
|
|
return bo
|
||
|
|
}
|
||
|
|
|
||
|
|
// UranusApparentLoBoN 天王星视黄经黄纬(截断版) / truncated apparent ecliptic longitude and latitude of Uranus.
|
||
|
|
func UranusApparentLoBoN(jd float64, n int) (float64, float64) {
|
||
|
|
return planetApparentLoBoN(6, jd, n)
|
||
|
|
}
|
||
|
|
|
||
|
|
// UranusApparentRaN 天王星视赤经(截断版) / truncated apparent right ascension of Uranus.
|
||
|
|
func UranusApparentRaN(jd float64, n int) float64 {
|
||
|
|
return planetApparentRaManualN(6, jd, n)
|
||
|
|
}
|
||
|
|
|
||
|
|
// UranusApparentDecN 天王星视赤纬(截断版) / truncated apparent declination of Uranus.
|
||
|
|
func UranusApparentDecN(jd float64, n int) float64 {
|
||
|
|
return planetApparentDecManualN(6, jd, n)
|
||
|
|
}
|
||
|
|
|
||
|
|
// UranusApparentRaDecN 天王星视赤经赤纬(截断版) / truncated apparent right ascension and declination of Uranus.
|
||
|
|
func UranusApparentRaDecN(jd float64, n int) (float64, float64) {
|
||
|
|
return planetApparentRaDecManualN(6, jd, n)
|
||
|
|
}
|
||
|
|
|
||
|
|
// EarthUranusAwayN 地天距离(截断版) / truncated Earth-Uranus distance.
|
||
|
|
func EarthUranusAwayN(jd float64, n int) float64 {
|
||
|
|
return planetEarthAwayN(6, jd, n)
|
||
|
|
}
|
||
|
|
|
||
|
|
// UranusMagN 天王星视星等(截断版) / truncated apparent magnitude of Uranus.
|
||
|
|
func UranusMagN(jd float64, n int) float64 {
|
||
|
|
awaySun := planet.WherePlanetN(6, 2, jd, n)
|
||
|
|
awayEarth := EarthUranusAwayN(jd, n)
|
||
|
|
away := planet.WherePlanetN(-1, 2, jd, n)
|
||
|
|
i := (awaySun*awaySun + awayEarth*awayEarth - away*away) / (2 * awaySun * awayEarth)
|
||
|
|
i = ArcCos(i)
|
||
|
|
mag := -7.19 + 5*math.Log10(awaySun*awayEarth) + 0.016*i
|
||
|
|
return FloatRound(mag, 2)
|
||
|
|
}
|
||
|
|
|
||
|
|
// UranusHeightN 天王星高度角(截断版) / truncated altitude of Uranus.
|
||
|
|
func UranusHeightN(jde, lon, lat, timezone float64, n int) float64 {
|
||
|
|
return planetHeightN(jde, lon, lat, timezone, n, UranusApparentRaDecN)
|
||
|
|
}
|
||
|
|
|
||
|
|
// UranusAzimuthN 天王星方位角(截断版) / truncated azimuth of Uranus.
|
||
|
|
func UranusAzimuthN(jde, lon, lat, timezone float64, n int) float64 {
|
||
|
|
return planetAzimuthN(jde, lon, lat, timezone, n, UranusApparentRaDecN)
|
||
|
|
}
|
||
|
|
|
||
|
|
// UranusHourAngleN 天王星时角(截断版) / truncated hour angle of Uranus.
|
||
|
|
func UranusHourAngleN(jd, lon, timezone float64, n int) float64 {
|
||
|
|
return planetHourAngleN(jd, lon, timezone, n, UranusApparentRaN)
|
||
|
|
}
|
||
|
|
|
||
|
|
// UranusCulminationTimeN 天王星中天时间(截断版) / truncated culmination time of Uranus.
|
||
|
|
func UranusCulminationTimeN(jde, lon, timezone float64, n int) float64 {
|
||
|
|
return planetCulminationTimeN(jde, lon, timezone, n, UranusHourAngleN)
|
||
|
|
}
|
||
|
|
|
||
|
|
// UranusRiseTimeN 天王星升起时间(截断版) / truncated rise time of Uranus.
|
||
|
|
func UranusRiseTimeN(jd, lon, lat, timezone, aeroCorrection, observerHeight float64, n int) (float64, error) {
|
||
|
|
return planetRiseDownN(jd, lon, lat, timezone, aeroCorrection, observerHeight, true, n, UranusCulminationTimeN, UranusHeightN, UranusApparentDecN)
|
||
|
|
}
|
||
|
|
|
||
|
|
// UranusSetTimeN 天王星落下时间(截断版) / truncated set time of Uranus.
|
||
|
|
func UranusSetTimeN(jd, lon, lat, timezone, aeroCorrection, observerHeight float64, n int) (float64, error) {
|
||
|
|
return planetRiseDownN(jd, lon, lat, timezone, aeroCorrection, observerHeight, false, n, UranusCulminationTimeN, UranusHeightN, UranusApparentDecN)
|
||
|
|
}
|
||
|
|
|
||
|
|
// NeptuneApparentLoN 海王星视黄经(截断版) / truncated apparent ecliptic longitude of Neptune.
|
||
|
|
func NeptuneApparentLoN(jd float64, n int) float64 {
|
||
|
|
lo, _ := planetApparentLoBoN(7, jd, n)
|
||
|
|
return lo
|
||
|
|
}
|
||
|
|
|
||
|
|
// NeptuneApparentBoN 海王星视黄纬(截断版) / truncated apparent ecliptic latitude of Neptune.
|
||
|
|
func NeptuneApparentBoN(jd float64, n int) float64 {
|
||
|
|
_, bo := planetApparentLoBoN(7, jd, n)
|
||
|
|
return bo
|
||
|
|
}
|
||
|
|
|
||
|
|
// NeptuneApparentLoBoN 海王星视黄经黄纬(截断版) / truncated apparent ecliptic longitude and latitude of Neptune.
|
||
|
|
func NeptuneApparentLoBoN(jd float64, n int) (float64, float64) {
|
||
|
|
return planetApparentLoBoN(7, jd, n)
|
||
|
|
}
|
||
|
|
|
||
|
|
// NeptuneApparentRaN 海王星视赤经(截断版) / truncated apparent right ascension of Neptune.
|
||
|
|
func NeptuneApparentRaN(jd float64, n int) float64 {
|
||
|
|
return planetApparentRaManualN(7, jd, n)
|
||
|
|
}
|
||
|
|
|
||
|
|
// NeptuneApparentDecN 海王星视赤纬(截断版) / truncated apparent declination of Neptune.
|
||
|
|
func NeptuneApparentDecN(jd float64, n int) float64 {
|
||
|
|
return planetApparentDecManualN(7, jd, n)
|
||
|
|
}
|
||
|
|
|
||
|
|
// NeptuneApparentRaDecN 海王星视赤经赤纬(截断版) / truncated apparent right ascension and declination of Neptune.
|
||
|
|
func NeptuneApparentRaDecN(jd float64, n int) (float64, float64) {
|
||
|
|
return planetApparentRaDecManualN(7, jd, n)
|
||
|
|
}
|
||
|
|
|
||
|
|
// EarthNeptuneAwayN 地海距离(截断版) / truncated Earth-Neptune distance.
|
||
|
|
func EarthNeptuneAwayN(jd float64, n int) float64 {
|
||
|
|
return planetEarthAwayN(7, jd, n)
|
||
|
|
}
|
||
|
|
|
||
|
|
// NeptuneMagN 海王星视星等(截断版) / truncated apparent magnitude of Neptune.
|
||
|
|
func NeptuneMagN(jd float64, n int) float64 {
|
||
|
|
awaySun := planet.WherePlanetN(7, 2, jd, n)
|
||
|
|
awayEarth := EarthNeptuneAwayN(jd, n)
|
||
|
|
mag := -6.87 + 5*math.Log10(awaySun*awayEarth)
|
||
|
|
return FloatRound(mag, 2)
|
||
|
|
}
|
||
|
|
|
||
|
|
// NeptuneHeightN 海王星高度角(截断版) / truncated altitude of Neptune.
|
||
|
|
func NeptuneHeightN(jde, lon, lat, timezone float64, n int) float64 {
|
||
|
|
return planetHeightN(jde, lon, lat, timezone, n, NeptuneApparentRaDecN)
|
||
|
|
}
|
||
|
|
|
||
|
|
// NeptuneAzimuthN 海王星方位角(截断版) / truncated azimuth of Neptune.
|
||
|
|
func NeptuneAzimuthN(jde, lon, lat, timezone float64, n int) float64 {
|
||
|
|
return planetAzimuthN(jde, lon, lat, timezone, n, NeptuneApparentRaDecN)
|
||
|
|
}
|
||
|
|
|
||
|
|
// NeptuneHourAngleN 海王星时角(截断版) / truncated hour angle of Neptune.
|
||
|
|
func NeptuneHourAngleN(jd, lon, timezone float64, n int) float64 {
|
||
|
|
return planetHourAngleN(jd, lon, timezone, n, NeptuneApparentRaN)
|
||
|
|
}
|
||
|
|
|
||
|
|
// NeptuneCulminationTimeN 海王星中天时间(截断版) / truncated culmination time of Neptune.
|
||
|
|
func NeptuneCulminationTimeN(jde, lon, timezone float64, n int) float64 {
|
||
|
|
return planetCulminationTimeN(jde, lon, timezone, n, NeptuneHourAngleN)
|
||
|
|
}
|
||
|
|
|
||
|
|
// NeptuneRiseTimeN 海王星升起时间(截断版) / truncated rise time of Neptune.
|
||
|
|
func NeptuneRiseTimeN(jd, lon, lat, timezone, aeroCorrection, observerHeight float64, n int) (float64, error) {
|
||
|
|
return planetRiseDownN(jd, lon, lat, timezone, aeroCorrection, observerHeight, true, n, NeptuneCulminationTimeN, NeptuneHeightN, NeptuneApparentDecN)
|
||
|
|
}
|
||
|
|
|
||
|
|
// NeptuneSetTimeN 海王星落下时间(截断版) / truncated set time of Neptune.
|
||
|
|
func NeptuneSetTimeN(jd, lon, lat, timezone, aeroCorrection, observerHeight float64, n int) (float64, error) {
|
||
|
|
return planetRiseDownN(jd, lon, lat, timezone, aeroCorrection, observerHeight, false, n, NeptuneCulminationTimeN, NeptuneHeightN, NeptuneApparentDecN)
|
||
|
|
}
|