// Position computes apparent position angle and angular distance of // components of a binary star. // // e is eccentricity of the true orbit // a is angular apparent semimajor axis // i is inclination relative to the line of sight // Ω is position angle of the ascending node // ω is longitude of periastron // E is eccentric anomaly, computed for example with package kepler // and the mean anomaly as returned by function M in this package. // // Return value θ is the apparent position angle, ρ is the angular distance. func Position(e float64, a, i, Ω, ω, E unit.Angle) (θ, ρ unit.Angle) { r := a.Mul(1 - e*E.Cos()) ν := unit.Angle(2 * math.Atan(math.Sqrt((1+e)/(1-e))*E.Div(2).Tan())) sνω, cνω := (ν + ω).Sincos() ci := i.Cos() num := sνω * ci θ = (unit.Angle(math.Atan2(num, cνω)) + Ω).Mod1() ρ = r.Mul(math.Sqrt(num*num + cνω*cνω)) return }
// True returns true anomaly ν for given eccentric anomaly E. // // Argument e is eccentricity. E must be in radians. func True(E unit.Angle, e float64) unit.Angle { // (30.1) p. 195 return unit.Angle(2 * math.Atan(math.Sqrt((1+e)/(1-e))*E.Mul(.5).Tan())) }