def vectors(self, pos, vel, roll=0.0, pitch=0.0, yaw=0.0):
        """Get unit vectors pointing to the different pixels.

        *pos* and *vel* are column vectors, or matrices of column
        vectors. Returns vectors as stacked rows.
        """
        # TODO: yaw steering mode !

        # Fake nadir: This is the intersection point between the satellite
        # looking down at the centre of the ellipsoid and the surface of the
        # ellipsoid. Nadir on the other hand is the point which vertical goes
        # through the satellite...
        # nadir = -pos / vnorm(pos)

        nadir = subpoint(-pos)
        nadir /= vnorm(nadir)

        # x is along track (roll)
        x = vel / vnorm(vel)

        # y is cross track (pitch)
        y = np.cross(nadir, vel, 0, 0, 0)
        y /= vnorm(y)

        # rotate first around x
        x_rotated = qrotate(nadir, x, self.fovs[0] + roll)
        # then around y
        xy_rotated = qrotate(x_rotated, y, self.fovs[1] + pitch)
        # then around z
        return qrotate(xy_rotated, nadir, yaw)
def vectors ( self , pos , vel , roll = 0.0 , pitch = 0.0 , yaw = 0.0 ) : nadir = subpoint ( - pos ) nadir /= vnorm ( nadir ) x = vel / vnorm ( vel ) y = np . cross ( nadir , vel , 0 , 0 , 0 ) y /= vnorm ( y ) x_rotated = qrotate ( nadir , x , self . fovs [ 0 ] + roll ) xy_rotated = qrotate ( x_rotated , y , self . fovs [ 1 ] + pitch ) return qrotate ( xy_rotated , nadir , yaw )
Get unit vectors pointing to the different pixels.

        *pos* and *vel* are column vectors, or matrices of column
        vectors. Returns vectors as stacked rows.