code: def pt_on_bezier_curve(P=[(0.0, 0.0)], t=0.5):
      '''Return point at t on bezier curve defined by control points P.
      '''
      assert isinstance(P, list)
      assert len(P) > 0
      for p in P:
          assert isinstance(p, tuple)
          for i in p:
              assert len(p) > 1
              assert isinstance(i, float)
      assert isinstance(t, float)
      assert 0 <= t <= 1
      
      O = len(P) - 1 # Order of curve
  
      # Recurse down the orders calculating the next set of control points until
      #   there is only one left, which is the point we want.
      Q = P
      while O > 0:
          Q = [pt_between_pts(Q[l], Q[l+1], t) for l in range(O)]
          O -= 1
      
      assert len(Q) == 1
      return Q[0f pt_on_bezier_curve(P=[(0.0, 0.0)], t=0.5):
      '''Return point at t on bezier curve defined by control points P.
      '''
      assert isinstance(P, list)
      assert len(P) > 0
      for p in P:
          assert isinstance(p, tuple)
          for i in p:
              assert len(p) > 1
              assert isinstance(i, float)
      assert isinstance(t, float)
      assert 0 <= t <= 1
      
      O = len(P) - 1 # Order of curve
  
      # Recurse down the orders calculating the next set of control points until
      #   there is only one left, which is the point we want.
      Q = P
      while O > 0:
          Q = [pt_between_pts(Q[l], Q[l+1], t) for l in range(O)]
          O -= 1
      
      assert len(Q) == 1
      return Q[0]
docs: Return point at t on bezier curve defined by control points P.