(ctrlptsw)
return [ctrlpts, weights]
Divides weighted control points by weights to generate unweighted control points and weights vector.

    This function is dimension agnostic, i.e. control points can be in any dimension but the last element of the array
    should indicate the weight.

    :param ctrlptsw: weighted control points
    :type ctrlptsw: list, tuple
    :return: unweighted control points and weights vector
    :rtype: list
Divides weighted control points by weights to generate unweighted control points and weights vector.
Divides weighted control points by weights to generate unweighted control points and weights vector .
def separate_ctrlpts_weights(ctrlptsw):
    """ Divides weighted control points by weights to generate unweighted control points and weights vector.

    This function is dimension agnostic, i.e. control points can be in any dimension but the last element of the array
    should indicate the weight.

    :param ctrlptsw: weighted control points
    :type ctrlptsw: list, tuple
    :return: unweighted control points and weights vector
    :rtype: list
    """
    ctrlpts = []
    weights = []
    for ptw in ctrlptsw:
        temp = [float(pw / ptw[-1]) for pw in ptw[:-1]]
        ctrlpts.append(temp)
        weights.append(ptw[-1])

    return [ctrlpts, weights]
def separate_ctrlpts_weights ( ctrlptsw ) : ctrlpts = [ ] weights = [ ] for ptw in ctrlptsw : temp = [ float ( pw / ptw [ - 1 ] ) for pw in ptw [ : - 1 ] ] ctrlpts . append ( temp ) weights . append ( ptw [ - 1 ] ) return [ ctrlpts , weights ]