In [1]:
__author__ = "Víctor Adolfo Gallego Alcalá, Ana María Martínez Gómez"
from __future__ import division
import numpy as np
import mayavi.mlab as ml

In [2]:
from scipy.special import binom
def bernstein(t, n, k):
    """ Helper method for the evaluation of a Bézier surface
    """
    return binom(n,k)*t**k*(1-t)**(n-k)

def eval_direct(t,s,P):
    """ Given time intervals t and s, and a matrix of control
    points P, it evaluates the Bézier surface
    """
    m,n = P.shape[:2]
    sum = np.zeros([3,t.shape[0],t.shape[0]])
    m -= 1
    n -= 1
    for i in range(m+1):
        for j in range(n+1):
            sum += np.einsum('i,jk->ijk',P[i,j,:],bernstein(t,m,i)*bernstein(s,n,j))
    return sum

In [3]:
# Teapot

XX = np.array([[[[ 1.4    ,  0.     , -1.4    ],
         [ 0.     ,  1.5    ,  0.     ],
         [-1.5    ,  0.     ,  2.     ],
         [ 0.     , -2.     ,  0.     ]],

        [[-1.6    , -1.5    , -2.7    ],
         [-3.     ,  1.7    ,  1.7    ],
         [ 2.7    ,  3.3    ,  0.     ],
         [ 0.     ,  0.     ,  0.     ]],

        [[ 0.2    ,  0.     , -0.2    ],
         [ 0.     ,  0.     ,  0.     ],
         [ 0.     ,  0.     ,  0.     ],
         [-1.4    ,  0.     ,  1.4    ]],

        [[ 0.     , -1.5    ,  0.     ],
         [ 1.5    ,  0.     , -2.     ],
         [ 0.     ,  2.     ,  0.     ],
         [ 0.     ,  0.     ,  0.     ]]],


       [[[ 0.     ,  0.     ,  0.     ],
         [ 0.     ,  0.     ,  0.     ],
         [ 0.     ,  0.     ,  0.     ],
         [-0.2    ,  0.     ,  0.2    ]],

        [[ 0.     ,  0.     ,  0.     ],
         [ 0.     ,  2.4    ,  2.4    ],
         [ 2.4    ,  2.4    ,  2.4    ],
         [ 2.4    ,  2.4    ,  2.4    ]],

        [[ 0.9    ,  0.9    ,  0.9    ],
         [ 0.9    ,  2.025  ,  2.25   ],
         [ 1.8    ,  1.8    ,  1.425  ],
         [ 0.6    ,  2.4    ,  2.4    ]],

        [[ 3.15   ,  3.15   ,  3.15   ],
         [ 3.15   ,  2.7    ,  2.7    ],
         [ 2.7    ,  2.7    ,  0.     ],
         [ 0.     ,  0.     ,  0.     ]]],


       [[[ 1.4    , -0.784  , -1.4    ],
         [ 0.784  ,  1.5    , -0.84   ],
         [-1.5    ,  0.84   ,  2.     ],
         [-1.12   , -2.     ,  1.12   ]],

        [[-1.6    , -1.5    , -2.7    ],
         [-3.     ,  1.7    ,  1.7    ],
         [ 2.7    ,  3.3    ,  0.     ],
         [ 0.     ,  0.     ,  0.     ]],

        [[ 0.2    , -0.112  , -0.2    ],
         [ 0.112  ,  0.     ,  0.     ],
         [ 0.     ,  0.     , -0.784  ],
         [-1.4    ,  0.784  ,  1.4    ]],

        [[-0.84   , -1.5    ,  0.84   ],
         [ 1.5    , -1.12   , -2.     ],
         [ 1.12   ,  2.     , -0.3    ],
         [ 0.3    , -0.3    ,  0.3    ]]],


       [[[-0.66   ,  0.66   , -0.25   ],
         [ 0.25   ,  0.     ,  0.     ],
         [ 0.     ,  0.     , -0.112  ],
         [-0.2    ,  0.112  ,  0.2    ]],

        [[ 0.     ,  0.     ,  0.     ],
         [ 0.     ,  2.4    ,  2.4    ],
         [ 2.4    ,  2.4    ,  2.4    ],
         [ 2.4    ,  2.4    ,  2.4    ]],

        [[ 0.9    ,  0.9    ,  0.9    ],
         [ 0.9    ,  2.025  ,  2.25   ],
         [ 1.8    ,  1.8    ,  1.425  ],
         [ 0.6    ,  2.4    ,  2.4    ]],

        [[ 3.15   ,  3.15   ,  3.15   ],
         [ 3.15   ,  2.7    ,  2.7    ],
         [ 2.7    ,  2.7    ,  0.     ],
         [ 0.     ,  0.     ,  0.     ]]],


       [[[ 0.784  , -1.4    , -0.784  ],
         [ 1.4    ,  0.84   , -1.5    ],
         [-0.84   ,  1.5    ,  1.12   ],
         [-2.     , -1.12   ,  2.     ]],

        [[-1.5    , -1.6    , -3.     ],
         [-2.7    ,  1.7    ,  1.7    ],
         [ 3.3    ,  2.7    ,  0.     ],
         [ 0.     ,  0.     ,  0.     ]],

        [[ 0.112  , -0.2    , -0.112  ],
         [ 0.2    ,  0.     ,  0.     ],
         [ 0.     ,  0.     , -1.4    ],
         [-0.784  ,  1.4    ,  0.784  ]],

        [[-1.5    , -0.84   ,  1.5    ],
         [ 0.84   , -2.     , -1.12   ],
         [ 2.     ,  1.12   , -0.3    ],
         [ 0.3    , -0.3    ,  0.3    ]]],


       [[[-0.66   ,  0.66   , -0.25   ],
         [ 0.25   ,  0.     ,  0.     ],
         [ 0.     ,  0.     , -0.2    ],
         [-0.112  ,  0.2    ,  0.112  ]],

        [[ 0.     ,  0.     ,  0.     ],
         [ 0.     ,  2.4    ,  2.4    ],
         [ 2.4    ,  2.4    ,  2.4    ],
         [ 2.4    ,  2.4    ,  2.4    ]],

        [[ 0.9    ,  0.9    ,  0.9    ],
         [ 0.9    ,  2.25   ,  2.025  ],
         [ 1.8    ,  1.8    ,  0.6    ],
         [ 1.425  ,  2.4    ,  2.4    ]],

        [[ 3.15   ,  3.15   ,  3.15   ],
         [ 3.15   ,  2.7    ,  2.7    ],
         [ 2.7    ,  2.7    ,  0.     ],
         [ 0.     ,  0.     ,  0.     ]]],


       [[[ 0.     , -1.4    ,  0.     ],
         [ 1.4    ,  0.     , -1.5    ],
         [ 0.     ,  1.5    ,  0.     ],
         [-2.     ,  0.     ,  2.     ]],

        [[-1.5    , -1.6    , -3.     ],
         [-2.7    ,  1.7    ,  1.7    ],
         [ 3.3    ,  2.7    ,  0.     ],
         [ 0.     ,  0.     ,  0.     ]],

        [[ 0.     , -0.2    ,  0.     ],
         [ 0.2    ,  0.     ,  0.     ],
         [ 0.     ,  0.     , -1.4    ],
         [ 0.     ,  1.4    ,  0.     ]],

        [[-1.5    ,  0.     ,  1.5    ],
         [ 0.     , -2.     ,  0.     ],
         [ 2.     ,  0.     ,  0.     ],
         [ 0.     ,  0.     ,  0.     ]]],


       [[[ 0.     ,  0.     ,  0.     ],
         [ 0.     ,  0.     ,  0.     ],
         [ 0.     ,  0.     , -0.2    ],
         [ 0.     ,  0.2    ,  0.     ]],

        [[ 0.     ,  0.     ,  0.     ],
         [ 0.     ,  2.4    ,  2.4    ],
         [ 2.4    ,  2.4    ,  2.4    ],
         [ 2.4    ,  2.4    ,  2.4    ]],

        [[ 0.9    ,  0.9    ,  0.9    ],
         [ 0.9    ,  2.25   ,  2.025  ],
         [ 1.8    ,  1.8    ,  0.6    ],
         [ 1.425  ,  2.4    ,  2.4    ]],

        [[ 3.15   ,  3.15   ,  3.15   ],
         [ 3.15   ,  2.7    ,  2.7    ],
         [ 2.7    ,  2.7    ,  0.     ],
         [ 0.     ,  0.     ,  0.     ]]],


       [[[ 1.3375 ,  0.     , -1.3375 ],
         [ 0.     ,  1.75   ,  0.     ],
         [-1.75   ,  0.     ,  2.     ],
         [ 0.     , -2.     ,  0.     ]],

        [[-2.3    , -2.5    , -2.7    ],
         [-3.     ,  2.6    ,  3.1    ],
         [ 2.8    ,  3.525  ,  0.8    ],
         [ 0.     , -0.8    ,  0.     ]],

        [[ 0.4    ,  0.     , -0.4    ],
         [ 0.     ,  1.425  ,  0.     ],
         [-1.425  ,  0.     ,  0.     ],
         [-1.3375 ,  0.     ,  1.3375 ]],

        [[ 0.     , -1.75   ,  0.     ],
         [ 1.75   ,  0.     , -2.     ],
         [ 0.     ,  2.     ,  0.     ],
         [ 0.     ,  0.     ,  0.     ]]],


       [[[ 0.     ,  0.     ,  0.     ],
         [ 0.     ,  0.     , -0.8    ],
         [ 0.     ,  0.8    ,  0.     ],
         [-0.4    ,  0.     ,  0.4    ]],

        [[ 0.     ,  1.425  ,  0.     ],
         [-1.425  ,  2.53125,  2.53125],
         [ 2.53125,  2.53125,  1.875  ],
         [ 1.875  ,  1.875  ,  1.875  ]],

        [[ 0.45   ,  0.45   ,  0.45   ],
         [ 0.45   ,  2.025  ,  2.25   ],
         [ 1.575  ,  1.35   ,  1.425  ],
         [ 0.825  ,  2.475  ,  2.49375]],

        [[ 3.15   ,  3.15   ,  3.15   ],
         [ 3.15   ,  2.55   ,  2.55   ],
         [ 2.55   ,  2.55   ,  0.     ],
         [ 0.     ,  0.     ,  0.     ]]],


       [[[ 1.3375 , -0.749  , -1.3375 ],
         [ 0.749  ,  1.75   , -0.98   ],
         [-1.75   ,  0.98   ,  2.     ],
         [-1.12   , -2.     ,  1.12   ]],

        [[-2.3    , -2.5    , -2.7    ],
         [-3.     ,  2.6    ,  3.1    ],
         [ 2.8    ,  3.525  ,  0.8    ],
         [-0.45   , -0.8    ,  0.45   ]],

        [[ 0.4    , -0.224  , -0.4    ],
         [ 0.224  ,  1.425  , -0.798  ],
         [-1.425  ,  0.798  , -0.749  ],
         [-1.3375 ,  0.749  ,  1.3375 ]],

        [[-0.98   , -1.75   ,  0.98   ],
         [ 1.75   , -1.12   , -2.     ],
         [ 1.12   ,  2.     , -0.3    ],
         [ 0.3    , -0.3    ,  0.3    ]]],


       [[[-0.66   ,  0.66   , -0.25   ],
         [ 0.25   , -0.45   , -0.8    ],
         [ 0.45   ,  0.8    , -0.224  ],
         [-0.4    ,  0.224  ,  0.4    ]],

        [[ 0.798  ,  1.425  , -0.798  ],
         [-1.425  ,  2.53125,  2.53125],
         [ 2.53125,  2.53125,  1.875  ],
         [ 1.875  ,  1.875  ,  1.875  ]],

        [[ 0.45   ,  0.45   ,  0.45   ],
         [ 0.45   ,  2.025  ,  2.25   ],
         [ 1.575  ,  1.35   ,  1.425  ],
         [ 0.825  ,  2.475  ,  2.49375]],

        [[ 3.15   ,  3.15   ,  3.15   ],
         [ 3.15   ,  2.55   ,  2.55   ],
         [ 2.55   ,  2.55   ,  0.     ],
         [ 0.     ,  0.     ,  0.     ]]],


       [[[ 0.749  , -1.3375 , -0.749  ],
         [ 1.3375 ,  0.98   , -1.75   ],
         [-0.98   ,  1.75   ,  1.12   ],
         [-2.     , -1.12   ,  2.     ]],

        [[-2.5    , -2.3    , -3.     ],
         [-2.7    ,  3.1    ,  2.6    ],
         [ 3.525  ,  2.8    ,  0.45   ],
         [-0.8    , -0.45   ,  0.8    ]],

        [[ 0.224  , -0.4    , -0.224  ],
         [ 0.4    ,  0.798  , -1.425  ],
         [-0.798  ,  1.425  , -1.3375 ],
         [-0.749  ,  1.3375 ,  0.749  ]],

        [[-1.75   , -0.98   ,  1.75   ],
         [ 0.98   , -2.     , -1.12   ],
         [ 2.     ,  1.12   , -0.3    ],
         [ 0.3    , -0.3    ,  0.3    ]]],


       [[[-0.66   ,  0.66   , -0.25   ],
         [ 0.25   , -0.8    , -0.45   ],
         [ 0.8    ,  0.45   , -0.4    ],
         [-0.224  ,  0.4    ,  0.224  ]],

        [[ 1.425  ,  0.798  , -1.425  ],
         [-0.798  ,  2.53125,  2.53125],
         [ 2.53125,  2.53125,  1.875  ],
         [ 1.875  ,  1.875  ,  1.875  ]],

        [[ 0.45   ,  0.45   ,  0.45   ],
         [ 0.45   ,  2.25   ,  2.025  ],
         [ 1.35   ,  1.575  ,  0.825  ],
         [ 1.425  ,  2.49375,  2.475  ]],

        [[ 3.15   ,  3.15   ,  3.15   ],
         [ 3.15   ,  2.55   ,  2.55   ],
         [ 2.55   ,  2.55   ,  0.     ],
         [ 0.     ,  0.     ,  0.     ]]],


       [[[ 0.     , -1.3375 ,  0.     ],
         [ 1.3375 ,  0.     , -1.75   ],
         [ 0.     ,  1.75   ,  0.     ],
         [-2.     ,  0.     ,  2.     ]],

        [[-2.5    , -2.3    , -3.     ],
         [-2.7    ,  3.1    ,  2.6    ],
         [ 3.525  ,  2.8    ,  0.     ],
         [-0.8    ,  0.     ,  0.8    ]],

        [[ 0.     , -0.4    ,  0.     ],
         [ 0.4    ,  0.     , -1.425  ],
         [ 0.     ,  1.425  , -1.3375 ],
         [ 0.     ,  1.3375 ,  0.     ]],

        [[-1.75   ,  0.     ,  1.75   ],
         [ 0.     , -2.     ,  0.     ],
         [ 2.     ,  0.     ,  0.     ],
         [ 0.     ,  0.     ,  0.     ]]],


       [[[ 0.     ,  0.     ,  0.     ],
         [ 0.     , -0.8    ,  0.     ],
         [ 0.8    ,  0.     , -0.4    ],
         [ 0.     ,  0.4    ,  0.     ]],

        [[ 1.425  ,  0.     , -1.425  ],
         [ 0.     ,  2.53125,  2.53125],
         [ 2.53125,  2.53125,  1.875  ],
         [ 1.875  ,  1.875  ,  1.875  ]],

        [[ 0.45   ,  0.45   ,  0.45   ],
         [ 0.45   ,  2.25   ,  2.025  ],
         [ 1.35   ,  1.575  ,  0.825  ],
         [ 1.425  ,  2.49375,  2.475  ]],

        [[ 3.15   ,  3.15   ,  3.15   ],
         [ 3.15   ,  2.55   ,  2.55   ],
         [ 2.55   ,  2.55   ,  0.     ],
         [ 0.     ,  0.     ,  0.     ]]],


       [[[ 1.4375 ,  0.     , -1.4375 ],
         [ 0.     ,  2.     ,  0.     ],
         [-2.     ,  0.     ,  1.5    ],
         [ 0.     , -1.5    ,  0.     ]],

        [[-2.7    , -3.     , -2.5    ],
         [-2.65   ,  2.3    ,  2.4    ],
         [ 2.9    ,  3.45   ,  0.     ],
         [ 0.     ,  0.     ,  0.     ]],

        [[ 1.3    ,  0.     , -1.3    ],
         [ 0.     ,  1.5    ,  0.     ],
         [-1.5    ,  0.     ,  0.     ],
         [-1.4375 ,  0.     ,  1.4375 ]],

        [[ 0.     , -2.     ,  0.     ],
         [ 2.     ,  0.     , -1.5    ],
         [ 0.     ,  1.5    ,  0.     ],
         [ 0.     ,  0.     ,  0.     ]]],


       [[[ 0.     ,  0.     ,  0.     ],
         [ 0.     ,  0.     ,  0.     ],
         [ 0.     ,  0.     ,  0.     ],
         [-1.3    ,  0.     ,  1.3    ]],

        [[ 0.     ,  1.5    ,  0.     ],
         [-1.5    ,  2.53125,  2.53125],
         [ 2.53125,  2.53125,  1.35   ],
         [ 1.35   ,  1.35   ,  1.35   ]],

        [[ 0.225  ,  0.225  ,  0.225  ],
         [ 0.225  ,  2.025  ,  2.25   ],
         [ 1.125  ,  0.9375 ,  2.1    ],
         [ 2.025  ,  2.475  ,  2.5125 ]],

        [[ 2.85   ,  2.85   ,  2.85   ],
         [ 2.85   ,  2.55   ,  2.55   ],
         [ 2.55   ,  2.55   ,  0.075  ],
         [ 0.075  ,  0.075  ,  0.075  ]]],


       [[[ 1.4375 , -0.805  , -1.4375 ],
         [ 0.805  ,  2.     , -1.12   ],
         [-2.     ,  1.12   ,  1.5    ],
         [-0.84   , -1.5    ,  0.84   ]],

        [[-2.7    , -3.     , -2.5    ],
         [-2.65   ,  2.3    ,  2.4    ],
         [ 2.9    ,  3.45   ,  0.     ],
         [ 0.     ,  0.     ,  0.     ]],

        [[ 1.3    , -0.728  , -1.3    ],
         [ 0.728  ,  1.5    , -0.84   ],
         [-1.5    ,  0.84   , -0.805  ],
         [-1.4375 ,  0.805  ,  1.4375 ]],

        [[-1.12   , -2.     ,  1.12   ],
         [ 2.     , -0.84   , -1.5    ],
         [ 0.84   ,  1.5    , -0.3    ],
         [ 0.3    , -0.3    ,  0.3    ]]],


       [[[-0.25   ,  0.25   , -0.15   ],
         [ 0.15   ,  0.     ,  0.     ],
         [ 0.     ,  0.     , -0.728  ],
         [-1.3    ,  0.728  ,  1.3    ]],

        [[ 0.84   ,  1.5    , -0.84   ],
         [-1.5    ,  2.53125,  2.53125],
         [ 2.53125,  2.53125,  1.35   ],
         [ 1.35   ,  1.35   ,  1.35   ]],

        [[ 0.225  ,  0.225  ,  0.225  ],
         [ 0.225  ,  2.025  ,  2.25   ],
         [ 1.125  ,  0.9375 ,  2.1    ],
         [ 2.025  ,  2.475  ,  2.5125 ]],

        [[ 2.85   ,  2.85   ,  2.85   ],
         [ 2.85   ,  2.55   ,  2.55   ],
         [ 2.55   ,  2.55   ,  0.075  ],
         [ 0.075  ,  0.075  ,  0.075  ]]],


       [[[ 0.805  , -1.4375 , -0.805  ],
         [ 1.4375 ,  1.12   , -2.     ],
         [-1.12   ,  2.     ,  0.84   ],
         [-1.5    , -0.84   ,  1.5    ]],

        [[-3.     , -2.7    , -2.65   ],
         [-2.5    ,  2.4    ,  2.3    ],
         [ 3.45   ,  2.9    ,  0.     ],
         [ 0.     ,  0.     ,  0.     ]],

        [[ 0.728  , -1.3    , -0.728  ],
         [ 1.3    ,  0.84   , -1.5    ],
         [-0.84   ,  1.5    , -1.4375 ],
         [-0.805  ,  1.4375 ,  0.805  ]],

        [[-2.     , -1.12   ,  2.     ],
         [ 1.12   , -1.5    , -0.84   ],
         [ 1.5    ,  0.84   , -0.3    ],
         [ 0.3    , -0.3    ,  0.3    ]]],


       [[[-0.25   ,  0.25   , -0.15   ],
         [ 0.15   ,  0.     ,  0.     ],
         [ 0.     ,  0.     , -1.3    ],
         [-0.728  ,  1.3    ,  0.728  ]],

        [[ 1.5    ,  0.84   , -1.5    ],
         [-0.84   ,  2.53125,  2.53125],
         [ 2.53125,  2.53125,  1.35   ],
         [ 1.35   ,  1.35   ,  1.35   ]],

        [[ 0.225  ,  0.225  ,  0.225  ],
         [ 0.225  ,  2.25   ,  2.025  ],
         [ 0.9375 ,  1.125  ,  2.025  ],
         [ 2.1    ,  2.5125 ,  2.475  ]],

        [[ 2.85   ,  2.85   ,  2.85   ],
         [ 2.85   ,  2.55   ,  2.55   ],
         [ 2.55   ,  2.55   ,  0.075  ],
         [ 0.075  ,  0.075  ,  0.075  ]]],


       [[[ 0.     , -1.4375 ,  0.     ],
         [ 1.4375 ,  0.     , -2.     ],
         [ 0.     ,  2.     ,  0.     ],
         [-1.5    ,  0.     ,  1.5    ]],

        [[-3.     , -2.7    , -2.65   ],
         [-2.5    ,  2.4    ,  2.3    ],
         [ 3.45   ,  2.9    ,  0.     ],
         [ 0.     ,  0.     ,  0.     ]],

        [[ 0.     , -1.3    ,  0.     ],
         [ 1.3    ,  0.     , -1.5    ],
         [ 0.     ,  1.5    , -1.4375 ],
         [ 0.     ,  1.4375 ,  0.     ]],

        [[-2.     ,  0.     ,  2.     ],
         [ 0.     , -1.5    ,  0.     ],
         [ 1.5    ,  0.     ,  0.     ],
         [ 0.     ,  0.     ,  0.     ]]],


       [[[ 0.     ,  0.     ,  0.     ],
         [ 0.     ,  0.     ,  0.     ],
         [ 0.     ,  0.     , -1.3    ],
         [ 0.     ,  1.3    ,  0.     ]],

        [[ 1.5    ,  0.     , -1.5    ],
         [ 0.     ,  2.53125,  2.53125],
         [ 2.53125,  2.53125,  1.35   ],
         [ 1.35   ,  1.35   ,  1.35   ]],

        [[ 0.225  ,  0.225  ,  0.225  ],
         [ 0.225  ,  2.25   ,  2.025  ],
         [ 0.9375 ,  1.125  ,  2.025  ],
         [ 2.1    ,  2.5125 ,  2.475  ]],

        [[ 2.85   ,  2.85   ,  2.85   ],
         [ 2.85   ,  2.55   ,  2.55   ],
         [ 2.55   ,  2.55   ,  0.075  ],
         [ 0.075  ,  0.075  ,  0.075  ]]],


       [[[ 1.5    ,  0.     , -1.5    ],
         [ 0.     ,  2.     ,  0.     ],
         [-2.     ,  0.     ,  1.5    ],
         [ 0.     , -1.5    ,  0.     ]],

        [[-2.7    , -3.     , -2.     ],
         [-1.9    ,  2.7    ,  3.3    ],
         [ 2.8    ,  3.2    ,  0.2    ],
         [ 0.     , -0.2    ,  0.     ]],

        [[ 1.3    ,  0.     , -1.3    ],
         [ 0.     ,  1.5    ,  0.     ],
         [-1.5    ,  0.     ,  0.     ],
         [-1.5    ,  0.     ,  1.5    ]],

        [[ 0.     , -2.     ,  0.     ],
         [ 2.     ,  0.     , -1.5    ],
         [ 0.     ,  1.5    ,  0.     ],
         [ 0.     ,  0.     ,  0.     ]]],


       [[[ 0.     ,  0.     ,  0.     ],
         [ 0.     ,  0.     , -0.2    ],
         [ 0.     ,  0.2    ,  0.     ],
         [-1.3    ,  0.     ,  1.3    ]],

        [[ 0.     ,  1.5    ,  0.     ],
         [-1.5    ,  2.4    ,  2.4    ],
         [ 2.4    ,  2.4    ,  0.9    ],
         [ 0.9    ,  0.9    ,  0.9    ]],

        [[ 0.15   ,  0.15   ,  0.15   ],
         [ 0.15   ,  1.8    ,  1.8    ],
         [ 0.9    ,  0.6    ,  2.4    ],
         [ 2.4    ,  2.4    ,  2.4    ]],

        [[ 2.7    ,  2.7    ,  2.7    ],
         [ 2.7    ,  2.4    ,  2.4    ],
         [ 2.4    ,  2.4    ,  0.15   ],
         [ 0.15   ,  0.15   ,  0.15   ]]],


       [[[ 1.5    , -0.84   , -1.5    ],
         [ 0.84   ,  2.     , -1.12   ],
         [-2.     ,  1.12   ,  1.5    ],
         [-0.84   , -1.5    ,  0.84   ]],

        [[-2.7    , -3.     , -2.     ],
         [-1.9    ,  2.7    ,  3.3    ],
         [ 2.8    ,  3.2    ,  0.2    ],
         [-0.112  , -0.2    ,  0.112  ]],

        [[ 1.3    , -0.728  , -1.3    ],
         [ 0.728  ,  1.5    , -0.84   ],
         [-1.5    ,  0.84   , -0.84   ],
         [-1.5    ,  0.84   ,  1.5    ]],

        [[-1.12   , -2.     ,  1.12   ],
         [ 2.     , -0.84   , -1.5    ],
         [ 0.84   ,  1.5    , -0.3    ],
         [ 0.3    , -0.3    ,  0.3    ]]],


       [[[-0.25   ,  0.25   , -0.15   ],
         [ 0.15   , -0.112  , -0.2    ],
         [ 0.112  ,  0.2    , -0.728  ],
         [-1.3    ,  0.728  ,  1.3    ]],

        [[ 0.84   ,  1.5    , -0.84   ],
         [-1.5    ,  2.4    ,  2.4    ],
         [ 2.4    ,  2.4    ,  0.9    ],
         [ 0.9    ,  0.9    ,  0.9    ]],

        [[ 0.15   ,  0.15   ,  0.15   ],
         [ 0.15   ,  1.8    ,  1.8    ],
         [ 0.9    ,  0.6    ,  2.4    ],
         [ 2.4    ,  2.4    ,  2.4    ]],

        [[ 2.7    ,  2.7    ,  2.7    ],
         [ 2.7    ,  2.4    ,  2.4    ],
         [ 2.4    ,  2.4    ,  0.15   ],
         [ 0.15   ,  0.15   ,  0.15   ]]],


       [[[ 0.84   , -1.5    , -0.84   ],
         [ 1.5    ,  1.12   , -2.     ],
         [-1.12   ,  2.     ,  0.84   ],
         [-1.5    , -0.84   ,  1.5    ]],

        [[-3.     , -2.7    , -1.9    ],
         [-2.     ,  3.3    ,  2.7    ],
         [ 3.2    ,  2.8    ,  0.112  ],
         [-0.2    , -0.112  ,  0.2    ]],

        [[ 0.728  , -1.3    , -0.728  ],
         [ 1.3    ,  0.84   , -1.5    ],
         [-0.84   ,  1.5    , -1.5    ],
         [-0.84   ,  1.5    ,  0.84   ]],

        [[-2.     , -1.12   ,  2.     ],
         [ 1.12   , -1.5    , -0.84   ],
         [ 1.5    ,  0.84   , -0.3    ],
         [ 0.3    , -0.3    ,  0.3    ]]],


       [[[-0.25   ,  0.25   , -0.15   ],
         [ 0.15   , -0.2    , -0.112  ],
         [ 0.2    ,  0.112  , -1.3    ],
         [-0.728  ,  1.3    ,  0.728  ]],

        [[ 1.5    ,  0.84   , -1.5    ],
         [-0.84   ,  2.4    ,  2.4    ],
         [ 2.4    ,  2.4    ,  0.9    ],
         [ 0.9    ,  0.9    ,  0.9    ]],

        [[ 0.15   ,  0.15   ,  0.15   ],
         [ 0.15   ,  1.8    ,  1.8    ],
         [ 0.6    ,  0.9    ,  2.4    ],
         [ 2.4    ,  2.4    ,  2.4    ]],

        [[ 2.7    ,  2.7    ,  2.7    ],
         [ 2.7    ,  2.4    ,  2.4    ],
         [ 2.4    ,  2.4    ,  0.15   ],
         [ 0.15   ,  0.15   ,  0.15   ]]],


       [[[ 0.     , -1.5    ,  0.     ],
         [ 1.5    ,  0.     , -2.     ],
         [ 0.     ,  2.     ,  0.     ],
         [-1.5    ,  0.     ,  1.5    ]],

        [[-3.     , -2.7    , -1.9    ],
         [-2.     ,  3.3    ,  2.7    ],
         [ 3.2    ,  2.8    ,  0.     ],
         [-0.2    ,  0.     ,  0.2    ]],

        [[ 0.     , -1.3    ,  0.     ],
         [ 1.3    ,  0.     , -1.5    ],
         [ 0.     ,  1.5    , -1.5    ],
         [ 0.     ,  1.5    ,  0.     ]],

        [[-2.     ,  0.     ,  2.     ],
         [ 0.     , -1.5    ,  0.     ],
         [ 1.5    ,  0.     ,  0.     ],
         [ 0.     ,  0.     ,  0.     ]]],


       [[[ 0.     ,  0.     ,  0.     ],
         [ 0.     , -0.2    ,  0.     ],
         [ 0.2    ,  0.     , -1.3    ],
         [ 0.     ,  1.3    ,  0.     ]],

        [[ 1.5    ,  0.     , -1.5    ],
         [ 0.     ,  2.4    ,  2.4    ],
         [ 2.4    ,  2.4    ,  0.9    ],
         [ 0.9    ,  0.9    ,  0.9    ]],

        [[ 0.15   ,  0.15   ,  0.15   ],
         [ 0.15   ,  1.8    ,  1.8    ],
         [ 0.6    ,  0.9    ,  2.4    ],
         [ 2.4    ,  2.4    ,  2.4    ]],

        [[ 2.7    ,  2.7    ,  2.7    ],
         [ 2.7    ,  2.4    ,  2.4    ],
         [ 2.4    ,  2.4    ,  0.15   ],
         [ 0.15   ,  0.15   ,  0.15   ]]]])
XX = XX.reshape(4,4,3,32)

In [ ]:
[t,s] = np.mgrid[0:1.01:0.01, 0:1.01:0.01]
for k in range(32):
    P = XX[:,:,:,k]
    W = eval_direct(t,s,P)
    ml.mesh(W[0,:,:], W[1,:,:], W[2,:,:], colormap='pink')
    PP = P.reshape(4*4,3)
    ml.points3d(PP[:,0],PP[:,1],PP[:,2],scale_factor=0.1)
ml.show()