code: def _arcball(xy, wh):
      
      x, y = xy
      w, h = wh
      r = (w + h) / 2.
      x, y = -(2. * x - w) / r, (2. * y - h) / r
      h = np.sqrt(x*x + y*y)
      return (0., x/h, y/h, 0.) if h > 1. else (0., x, y, np.sqrt(1. - h*h))
docs: Convert x,y coordinates to w,x,y,z Quaternion parameters
  
      Adapted from:
  
      linalg library
  
      Copyright (c) 2010-2015, Renaud Blanch <rndblnch at gmail dot com>
      Licence at your convenience:
      GPLv3 or higher <http://www.gnu.org/licenses/gpl.html>
      BSD new <http://opensource.org/licenses/BSD-3-Clause>