68 lines
2.2 KiB
Python
68 lines
2.2 KiB
Python
from . import vallado_cpp
|
|
|
|
class Satrec(vallado_cpp.Satrec):
|
|
"""High-speed computation of satellite positions and velocities."""
|
|
|
|
__slots__ = ()
|
|
|
|
def sgp4_array(self, jd, fr):
|
|
"""Compute positions and velocities for the times in a NumPy array.
|
|
|
|
Given NumPy arrays ``jd`` and ``fr`` of the same length that
|
|
supply the whole part and the fractional part of one or more
|
|
Julian dates, return a tuple ``(e, r, v)`` of three vectors:
|
|
|
|
* ``e``: nonzero for any dates that produced errors, 0 otherwise.
|
|
* ``r``: position vectors in kilometers.
|
|
* ``v``: velocity vectors in kilometers per second.
|
|
|
|
"""
|
|
jd = jd.astype('float64', copy=False)
|
|
fr = fr.astype('float64', copy=False)
|
|
|
|
eshape = jd.shape
|
|
fshape = eshape[0], 3
|
|
|
|
array = type(jd)
|
|
e = array(eshape, 'uint8')
|
|
r = array(fshape, 'float64')
|
|
v = array(fshape, 'float64')
|
|
self._sgp4(jd, fr, e, r, v)
|
|
return e, r, v
|
|
|
|
class SatrecArray(vallado_cpp.SatrecArray):
|
|
"""High-speed satellite array for computing positions and velocities."""
|
|
|
|
__slots__ = ()
|
|
|
|
def sgp4(self, jd, fr):
|
|
"""Compute positions and velocities for the satellites in this array.
|
|
|
|
Given NumPy scalars or arrays ``jd`` and ``fr`` supplying the
|
|
whole part and the fractional part of one or more Julian dates,
|
|
return a tuple ``(e, r, v)`` of three vectors:
|
|
|
|
* ``e``: nonzero for any dates that produced errors, 0 otherwise.
|
|
* ``r``: position vectors in kilometers.
|
|
* ``v``: velocity vectors in kilometers per second.
|
|
|
|
The first dimension of each output vector has the same length as
|
|
this satellite array, the second dimension the same length as
|
|
the input date arrays, and the third dimension has length 3.
|
|
|
|
"""
|
|
jd = jd.astype('float64', copy=False)
|
|
fr = fr.astype('float64', copy=False)
|
|
|
|
ilength = len(self)
|
|
jlength, = jd.shape
|
|
eshape = ilength, jlength
|
|
fshape = ilength, jlength, 3
|
|
|
|
array = type(jd)
|
|
e = array(eshape, 'uint8')
|
|
r = array(fshape, 'float64')
|
|
v = array(fshape, 'float64')
|
|
self._sgp4(jd, fr, e, r, v)
|
|
return e, r, v
|