code: def bezier_point(p, t):
      
  
      # begin arc support block ########################
      try:
          p.large_arc
          return p.point(t)
      except:
          pass
      # end arc support block ##########################
  
      deg = len(p) - 1
      if deg == 3:
          return p[0] + t*(
              3*(p[1] - p[0]) + t*(
                  3*(p[0] + p[2]) - 6*p[1] + t*(
                      -p[0] + 3*(p[1] - p[2]) + p[3])))
      elif deg == 2:
          return p[0] + t*(
              2*(p[1] - p[0]) + t*(
                  p[0] - 2*p[1] + p[2]))
      elif deg == 1:
          return p[0] + t*(p[1] - p[0])
      elif deg == 0:
          return p[0]
      else:
          bern = bernstein(deg, t)
          return sum(bern[k]*p[k] for k in range(deg+1))
docs: Evaluates the Bezier curve given by it's control points, p, at t.
      Note: Uses Horner's rule for cubic and lower order Bezier curves.
      Warning:  Be concerned about numerical stability when using this function
      with high order curves.