Пример #1
0
    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)
Пример #2
0
    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)
Пример #3
0
    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)
Пример #4
0
    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)