class_docstr: The fly camera provides a way to explore 3D data using an
  interaction style that resembles a flight simulator.
  
  For this camera, the ``scale_factor`` indicates the speed of the
  camera in units per second, and the ``center`` indicates the
  position of the camera.
  
  Parameters
  ----------
  fov : float
      Field of view. Default 60.0.
  rotation : float | None
      Rotation to use.
  **kwargs : dict
      Keyword arguments to pass to `BaseCamera`.
  
  Notes
  -----
  Interacting with this camera might need a bit of practice.
  The reaction to key presses can be customized by modifying the
  keymap property.
  
  Moving:
  
    * arrow keys, or WASD to move forward, backward, left and right
    * F and C keys move up and down
    * Space bar to brake
  
  Viewing:
  
    * Use the mouse while holding down LMB to control the pitch and yaw.
    * Alternatively, the pitch and yaw can be changed using the keys
      IKJL
    * The camera auto-rotates to make the bottom point down, manual
      rolling can be performed using Q and E.
code: def _get_directions(self):
      # Get reference points in reference coordinates
      # p0 = Point(0,0,0)
      pf = (0, 0, -1)  # front
      pr = (1, 0, 0)  # right
      pl = (-1, 0, 0)  # left
      pu = (0, 1, 0)  # up
  
      # Get total rotation
      rotation = self.rotation.inverse()
  
      # Transform to real coordinates
      pf = rotation.rotate_point(pf)
      pr = rotation.rotate_point(pr)
      pl = rotation.rotate_point(pl)
      pu = rotation.rotate_point(pu)
  
      def _normalize(p):
          L = sum(x**2 for x in p) ** 0.5
          return np.array(p, "float64") / L
  
      pf = _normalize(pf)
      pr = _normalize(pr)
      pl = _normalize(pl)
      pu = _normalize(pu)
  
      return pf, pr, pl, pu
  
imports: from __future__ import division
  import math
  import numpy
  from ...app import Timer
  from ...util.quaternion import Quaternion
  from ...util import keys
  from .perspective import PerspectiveCamera
label_desc: Use image node_id 12 for calling the FlyCamera obj's underlying member method code with example usage: obj._get_directions() and returns: pf,  pr,  pl,  pu, unknown