def parabolic(cls, attractor, p, inc, raan, argp, nu, epoch=J2000, plane=Planes.EARTH_EQUATOR): """Return parabolic `Orbit`. Parameters ---------- attractor : Body Main attractor. p : ~astropy.units.Quantity Semilatus rectum or parameter. inc : ~astropy.units.Quantity, optional Inclination. raan : ~astropy.units.Quantity Right ascension of the ascending node. argp : ~astropy.units.Quantity Argument of the pericenter. nu : ~astropy.units.Quantity True anomaly. epoch: ~astropy.time.Time, optional Epoch, default to J2000. plane : ~poliastro.frames.Planes Fundamental plane of the frame. """ ss = classical.ClassicalState(attractor, p, 1.0 * u.one, inc, raan, argp, nu) return cls(ss, epoch, plane)
def from_classical(cls, attractor, a, ecc, inc, raan, argp, nu, epoch=J2000): """Return `Orbit` from classical orbital elements. Parameters ---------- attractor : Body Main attractor. a : ~astropy.units.Quantity Semi-major axis. ecc : ~astropy.units.Quantity Eccentricity. inc : ~astropy.units.Quantity Inclination raan : ~astropy.units.Quantity Right ascension of the ascending node. argp : ~astropy.units.Quantity Argument of the pericenter. nu : ~astropy.units.Quantity True anomaly. epoch : ~astropy.time.Time, optional Epoch, default to J2000. """ if ecc == 1.0 * u.one: raise ValueError("For parabolic orbits use Orbit.parabolic instead") if not 0 * u.deg <= inc <= 180 * u.deg: raise ValueError("Inclination must be between 0 and 180 degrees") if ecc > 1 and a > 0: raise ValueError("Hyperbolic orbits have negative semimajor axis") ss = classical.ClassicalState( attractor, a, ecc, inc, raan, argp, nu) return cls(ss, epoch)
def to_classical(self): p, ecc, inc, raan, argp, nu = mee2coe( self.p.to(u.km).value, self.f.to(u.rad).value, self.g.to(u.rad).value, self.h.to(u.rad).value, self.k.to(u.rad).value, self.L.to(u.rad).value) return classical.ClassicalState(self.attractor, p * u.km, ecc * u.one, inc * u.rad, raan * u.rad, argp * u.rad, nu * u.rad)
def to_classical(self): """Converts to classical orbital elements representation. """ (p, ecc, inc, raan, argp, nu) = rv2coe( self.attractor.k.to(u.km**3 / u.s**2).value, self.r.to(u.km).value, self.v.to(u.km / u.s).value) return classical.ClassicalState(self.attractor, p * u.km, ecc * u.one, inc * u.rad, raan * u.rad, argp * u.rad, nu * u.rad)