def _evaluate_barycentric_multi(nodes, degree, param_vals, dimension):
    r"""Compute multiple points on the surface.

    .. note::

       There is also a Fortran implementation of this function, which
       will be used if it can be built.

    Args:
        nodes (numpy.ndarray): Control point nodes that define the surface.
        degree (int): The degree of the surface define by ``nodes``.
        param_vals (numpy.ndarray): Array of parameter values (as a
            ``N x 3`` array).
        dimension (int): The dimension the surface lives in.

    Returns:
        numpy.ndarray: The evaluated points, where columns correspond to
        rows of ``param_vals`` and the rows to the dimension of the
        underlying surface.
    """
    num_vals, _ = param_vals.shape
    result = np.empty((dimension, num_vals), order="F")
    for index, (lambda1, lambda2, lambda3) in enumerate(param_vals):
        result[:, index] = evaluate_barycentric(
            nodes, degree, lambda1, lambda2, lambda3
        )[:, 0]
    return result