方位角和高度角
This commit is contained in:
42
pkg/producer/angle.go
Normal file
42
pkg/producer/angle.go
Normal file
@@ -0,0 +1,42 @@
|
||||
package producer
|
||||
|
||||
import (
|
||||
"math"
|
||||
"time"
|
||||
|
||||
"github.com/starainrt/astro/sun"
|
||||
)
|
||||
|
||||
// Azimuth 太阳方位角
|
||||
// 返回给定经纬度、对应date时区date时刻的太阳方位角(正北为0,向东增加)
|
||||
func SunAzimuth(date time.Time, lon, lat float64) float64 {
|
||||
return sun.Azimuth(date, lon, lat)
|
||||
}
|
||||
|
||||
// Zenith 太阳高度角
|
||||
// 返回给定经纬度、对应date时区date时刻的太阳高度角
|
||||
func SunZenith(date time.Time, lon, lat float64) float64 {
|
||||
return sun.Zenith(date, lon, lat)
|
||||
}
|
||||
|
||||
func SatAzimuth(lon, lat, lonSat, latSat float64) float64 {
|
||||
lon = lon * math.Pi / 180
|
||||
lat = lat * math.Pi / 180
|
||||
lonSat = lonSat * math.Pi / 180
|
||||
latSat = latSat * math.Pi / 180
|
||||
|
||||
beta := math.Acos(math.Cos(lat-latSat) * math.Cos(lon-lonSat))
|
||||
phi := math.Asin(math.Sin(lonSat-lon) / math.Sin(beta))
|
||||
return phi * 180 / math.Pi
|
||||
}
|
||||
|
||||
func SatZenith(lon, lat, lonSat, latSat float64) float64 {
|
||||
lon = lon * math.Pi / 180
|
||||
lat = lat * math.Pi / 180
|
||||
lonSat = lonSat * math.Pi / 180
|
||||
latSat = latSat * math.Pi / 180
|
||||
|
||||
beta := math.Acos(math.Cos(lat-latSat) * math.Cos(lon-lonSat))
|
||||
theta := math.Asin(42164.0 * math.Sin(beta) / math.Sqrt(1.8084*1e9-5.3725*1e8*math.Cos(beta)))
|
||||
return theta * 180 / math.Pi
|
||||
}
|
||||
Reference in New Issue
Block a user