TangSurf := (t+u,t^2+2*u*t,t^3+3*t^2*u);
plot3d( [TangSurf], t=-2..2, u=-2..2,
grid=[50,50], style=patchcontour, axes=frame, labels=[x,y,z], view=[-2..2,-2..2,-2..2]);
G := Groebner[Basis]( [x-(t+u), y-(t^2+2*u*t), z-(t^3+3*t^2*u)],
plex(t,u,x,y,z) );
T := factor(remove(has,G,{t,u}));
g := unapply(T[1],x,y,z);
expand( g(TangSurf) );
plots[implicitplot3d]( T[1], x=-2..2, y=-2..2, z=-2..2,
grid=[20,20,20], style=patchcontour, axes=frame );
G := Groebner[Basis]( [x-(t+u), y-(t^2+2*u*t), z-(t^3+3*t^2*u)],
lexdeg([u,t],[x,y,z]) );