Source code for orbitdeterminator.util.anom_conv

"""Vectorized anomaly conversion scripts"""

import numpy as np

[docs]def true_to_ecc(theta,e): """Converts true anomaly to eccentric anomaly. Args: theta(numpy array): array of true anomalies (in radians) e(float): eccentricity Returns: numpy array: array of eccentric anomalies (in radians) """ pi2=2*np.pi raw = np.arctan2((1-e**2)*np.sin(theta), e+np.cos(theta)) raw = raw%pi2 # revolution correction code correct = (theta//pi2)*pi2 raw = raw+correct correct = np.clip((raw-theta)//pi2,0,None)*pi2 return raw-correct
[docs]def ecc_to_mean(E,e): """Converts eccentric anomaly to mean anomaly. Args: E(numpy array): array of eccentric anomalies (in radians) e(float): eccentricity Returns: numpy array: array of mean anomalies (in radians) """ return E - e*np.sin(E)
[docs]def mean_to_t(M,a): """Converts mean anomaly to time elapsed. Args: M(numpy array): array of mean anomalies (in radians) a(float): semi-major axis Returns: numpy array: numpy array of time elapsed """ n = (a**3/398600.4405)**0.5 return n*(M-M[0])
if __name__ == "__main__": thetas = np.linspace(0,4*np.pi,21) e = 0.7151443 print(thetas) ecc = true_to_ecc(thetas,e) print(ecc) mean = ecc_to_mean(ecc,e) print(mean) t = mean_to_t(mean,26505.1836) print(t)