docs: def plotDC(np1, size=200, xy=(0, 0), width=200):
      """
      Uses one nodal plane of a double couple to draw a beach ball plot.
  
      :param ax: axis object of a matplotlib figure
      :param np1: :class:`~NodalPlane`
  
      Adapted from MATLAB script
      `bb.m <http://www.ceri.memphis.edu/people/olboyd/Software/Software.html>`_
      written by Andy Michael and Oliver Boyd.
      """
      # check if one or two widths are specified (Circle or Ellipse)
      try:
          assert(len(width) == 2)
      except TypeError:
          width = (width, width)
      S1 = np1.strike
      D1 = np1.dip
      R1 = np1.rake
  
      M = 0
      if R1 > 180:
          R1 -= 180
          M = 1
      if R1 < 0:
          R1 += 180
          M = 1
  
      # Get azimuth and dip of second plane
      (S2, D2, _R2) = AuxPlane(S1, D1, R1)
  
      D = size / 2
  
      if D1 >= 90:
          D1 = 89.9999
      if D2 >= 90:
          D2 = 89.9999
  
      # arange checked for numerical stablility, np.pi is not multiple of 0.1
      phi = np.arange(0, np.pi, .01)
      l1 = np.sqrt(
          np.power(90 - D1, 2) / (
              np.power(np.sin(phi), 2) +
              np.power(np.cos(phi), 2) * np.power(90 - D1, 2) / np.power(90, 2)))
      l2 = np.sqrt(
          np.power(90 - D2, 2) / (
              np.power(np.sin(phi), 2) + np.power(np.cos(phi), 2) *
              np.power(90 - D2, 2) / np.power(90, 2)))
  
      inc = 1
      (X1, Y1) = Pol2Cart(phi + S1 * D2R, l1)
  
      if M == 1:
          lo = S1 - 180
          hi = S2
          if lo > hi:
              inc = -1
          th1 = np.arange(S1 - 180, S2, inc)
          (Xs1, Ys1) = Pol2Cart(th1 * D2R, 90 * np.ones((1, len(th1))))
          (X2, Y2) = Pol2Cart(phi + S2 * D2R, l2)
          th2 = np.arange(S2 + 180, S1, -inc)
      else:
          hi = S1 - 180
          lo = S2 - 180
          if lo > hi:
              inc = -1
          th1 = np.arange(hi, lo, -inc)
          (Xs1, Ys1) = Pol2Cart(th1 * D2R, 90 * np.ones((1, len(th1))))
          (X2, Y2) = Pol2Cart(phi + S2 * D2R, l2)
          X2 = X2[::-1]
          Y2 = Y2[::-1]
          th2 = np.arange(S2, S1, inc)
      (Xs2, Ys2) = Pol2Cart(th2 * D2R, 90 * np.ones((1, len(th2))))
      X = np.concatenate((X1, Xs1[0], X2, Xs2[0]))
      Y = np.concatenate((Y1, Ys1[0], Y2, Ys2[0]))
  
      X = X * D / 90
      Y = Y * D / 90
  
      # calculate resolution
      res = [value / float(size) for value in width]
  
      # construct the patches
      collect = [patches.Ellipse(xy, width=width[0], height=width[1])]
      collect.append(xy2patch(Y, X, res, xy))
      return ['b', 'w'], collect