code: def Ellipsoid(pos=(0, 0, 0), axis1=(1, 0, 0), axis2=(0, 2, 0), axis3=(0, 0, 3),
                c="c", alpha=1, res=24):
      
      elliSource = vtk.vtkSphereSource()
      elliSource.SetThetaResolution(res)
      elliSource.SetPhiResolution(res)
      elliSource.Update()
      l1 = np.linalg.norm(axis1)
      l2 = np.linalg.norm(axis2)
      l3 = np.linalg.norm(axis3)
      axis1 = np.array(axis1) / l1
      axis2 = np.array(axis2) / l2
      axis3 = np.array(axis3) / l3
      angle = np.arcsin(np.dot(axis1, axis2))
      theta = np.arccos(axis3[2])
      phi = np.arctan2(axis3[1], axis3[0])
  
      t = vtk.vtkTransform()
      t.PostMultiply()
      t.Scale(l1, l2, l3)
      t.RotateX(angle * 57.3)
      t.RotateY(theta * 57.3)
      t.RotateZ(phi * 57.3)
      tf = vtk.vtkTransformPolyDataFilter()
      tf.SetInputData(elliSource.GetOutput())
      tf.SetTransform(t)
      tf.Update()
      pd = tf.GetOutput()
  
      actor = Actor(pd, c=c, alpha=alpha)
      actor.GetProperty().BackfaceCullingOn()
      actor.GetProperty().SetInterpolationToPhong()
      actor.SetPosition(pos)
      actor.base = -np.array(axis1) / 2 + pos
      actor.top = np.array(axis1) / 2 + pos
      settings.collectable_actors.append(actor)
      return actor
docs: Build a 3D ellipsoid centered at position `pos`.
      
      .. note:: `axis1` and `axis2` are only used to define sizes and one azimuth angle.
      
      |projectsphere|