(degree, knot_vector, span, knot)
return N
Computes the non-vanishing basis functions for a single parameter.

    Implementation of Algorithm A2.2 from The NURBS Book by Piegl & Tiller.
    Uses recurrence to compute the basis functions, also known as Cox - de
    Boor recursion formula.

    :param degree: degree, :math:`p`
    :type degree: int
    :param knot_vector: knot vector, :math:`U`
    :type knot_vector: list, tuple
    :param span: knot span, :math:`i`
    :type span: int
    :param knot: knot or parameter, :math:`u`
    :type knot: float
    :return: basis functions
    :rtype: list
Computes the non-vanishing basis functions for a single parameter.
Computes the non - vanishing basis functions for a single parameter .
def basis_function(degree, knot_vector, span, knot):
    """ Computes the non-vanishing basis functions for a single parameter.

    Implementation of Algorithm A2.2 from The NURBS Book by Piegl & Tiller.
    Uses recurrence to compute the basis functions, also known as Cox - de
    Boor recursion formula.

    :param degree: degree, :math:`p`
    :type degree: int
    :param knot_vector: knot vector, :math:`U`
    :type knot_vector: list, tuple
    :param span: knot span, :math:`i`
    :type span: int
    :param knot: knot or parameter, :math:`u`
    :type knot: float
    :return: basis functions
    :rtype: list
    """
    left = [0.0 for _ in range(degree + 1)]
    right = [0.0 for _ in range(degree + 1)]
    N = [1.0 for _ in range(degree + 1)]  # N[0] = 1.0 by definition

    for j in range(1, degree + 1):
        left[j] = knot - knot_vector[span + 1 - j]
        right[j] = knot_vector[span + j] - knot
        saved = 0.0
        for r in range(0, j):
            temp = N[r] / (right[r + 1] + left[j - r])
            N[r] = saved + right[r + 1] * temp
            saved = left[j - r] * temp
        N[j] = saved

    return N
def basis_function ( degree , knot_vector , span , knot ) : left = [ 0.0 for _ in range ( degree + 1 ) ] right = [ 0.0 for _ in range ( degree + 1 ) ] N = [ 1.0 for _ in range ( degree + 1 ) ] # N[0] = 1.0 by definition for j in range ( 1 , degree + 1 ) : left [ j ] = knot - knot_vector [ span + 1 - j ] right [ j ] = knot_vector [ span + j ] - knot saved = 0.0 for r in range ( 0 , j ) : temp = N [ r ] / ( right [ r + 1 ] + left [ j - r ] ) N [ r ] = saved + right [ r + 1 ] * temp saved = left [ j - r ] * temp N [ j ] = saved return N