package basic

import (
	"math"

	. "b612.me/astro/tools"
)

// ParallacticAngleByHourAngle 返回视差角（天顶方向角）/ parallactic angle.
//
// hourAngle 为目标时角，dec 为赤纬，lat 为观测者纬度，单位均为度。
// 返回值是 atan2 公式给出的有符号结果，范围通常为 [-180, 180] 度。
// hourAngle may be signed or normalized to [0, 360); the trigonometric
// formula handles either representation.
func ParallacticAngleByHourAngle(hourAngle, dec, lat float64) float64 {
	return math.Atan2(
		Sin(hourAngle),
		Tan(lat)*Cos(dec)-Sin(dec)*Cos(hourAngle),
	) * 180 / math.Pi
}

// StarParallacticAngle 返回星体在给定观测条件下的视差角（天顶方向角）/ parallactic angle.
func StarParallacticAngle(jde, ra, dec, lon, lat, timezone float64) float64 {
	return ParallacticAngleByHourAngle(StarHourAngle(jde, ra, lon, timezone), dec, lat)
}
