Some 3D graphs

Define the function and main graphing window

Clear[f,x,y,xmin,xmax,ymin,ymax]
f[x_,y_]:= Sin[x^2+y^2]
xmin = -2;xmax=2; ymin=-3; ymax=3;
Plot3D[f[x,y], {x,xmin,xmax},{y,ymin,ymax},AxesLabel->{"x","y","z"}]

ContourPlot[f[x,y],{x,xmin,xmax},{y,ymin,ymax},FrameLabel->{"x","y"}]

the gradient of f.

Clear[grad]
grad[x_,y_] = {D[f[x,y],x],D[f[x,y],y]}  (* only = here.  not := *)

VectorPlot[grad[x,y],{x,xmin,xmax},{y,ymin,ymax},FrameLabel->{"x","y"}]

Show[{
ContourPlot[f[x,y],{x,xmin,xmax},{y,ymin,ymax},FrameLabel->{"x","y"}],
VectorPlot[grad[x,y],{x,xmin,xmax},{y,ymin,ymax},FrameLabel->{"x","y"}]
}]

cool pics and a movie

Clear[num,delx,dely,t1,t2,zmin,zmax,delz]
num=20.; 
delx=(xmax - xmin)/num;
dely = (ymax - ymin)/num;
t1 =Table[f[x,y],{x,xmin,xmax,delx},{y,ymin,ymax,dely}];
t2 = Flatten[t1];
zmax=Max[t2]
zmin=Min[t2]
delz=(zmax-zmin)/num

k=0.5;
Show[{ContourPlot[f[x,y],{x,xmin,xmax},{y,ymin,ymax}],
ContourPlot[f[x,y]==k,{x,xmin,xmax},{y,ymin,ymax},ContourStyle->{Red,Thick}]} ,
FrameLabel->{"x","y"}]

GraphicsGrid[{{
Plot3D[{f[x,y],k}, {x,xmin,xmax},{y,ymin,ymax},AxesLabel->{"x","y","z"}],

Show[{ContourPlot[f[x,y],{x,xmin,xmax},{y,ymin,ymax}],
ContourPlot[f[x,y]==k,{x,xmin,xmax},{y,ymin,ymax},ContourStyle->{Red,Thick}]} ,
FrameLabel->{"x","y"}]

}}]

Table[k,{k,zmin,zmax,delz}]

Clear[k]
Manipulate[ 
GraphicsGrid[{{
Plot3D[{f[x,y],k}, {x,xmin,xmax},{y,ymin,ymax},AxesLabel->{"x","y","z"},PlotRange->{zmin,zmax}],

Show[{ContourPlot[f[x,y],{x,xmin,xmax},{y,ymin,ymax}],
ContourPlot[f[x,y]==k,{x,xmin,xmax},{y,ymin,ymax},ContourStyle->{Red,Thick}]} ,
FrameLabel->{"x","y"}]
}}],  {k,zmin,zmax,delz}]

a table of the movie frames

Clear[k]
Table[ 
GraphicsGrid[{{
Plot3D[{f[x,y],k}, {x,xmin,xmax},{y,ymin,ymax},AxesLabel->{"x","y","z"},PlotRange->{zmin,zmax}],

Show[{ContourPlot[f[x,y],{x,xmin,xmax},{y,ymin,ymax}],
ContourPlot[f[x,y]==k,{x,xmin,xmax},{y,ymin,ymax},ContourStyle->{Red,Thick}]} ,
FrameLabel->{"x","y"}]
}}],  {k,zmin,zmax,delz}]

tangent planes

Clear[tanPlanes,x1,y1,x,y]
tanPlanes[x1_,y1_,x_,y_] = grad[x1,y1].{x-x1,y-y1} + f[x1,y1]

(tan[x1,y1,x,y]/.{x1->-2,y1->-3})

a grid of points in our graphing window

Clear[t3]
t3=Flatten[Table[{x,y},{x,xmin,xmax,5delx},{y,ymin,ymax,5dely}],1]

Clear[k,x1,y1]
k=10;
{x1,y1}=t3[[k]]
Show[{ListPointPlot3D[{{x1,y1,f[x1,y1]}},PlotStyle->{PointSize[.03],Red}],
Plot3D[{f[x,y],tanPlanes[x1,y1,x,y]}, {x,xmin,xmax},{y,ymin,ymax}]},
PlotRange->{{xmin,xmax},{ymin,ymax},{zmin,zmax}},AxesLabel->{"x","y","z"} ]
Clear[k,x1,y1]

Clear[k,num2]
num2=Length[t3];
Table[ {x1,y1}=t3[[k]];
Show[{ListPointPlot3D[{{x1,y1,f[x1,y1]}},PlotStyle->{PointSize[.03],Red}],
Plot3D[{f[x,y],tanPlanes[x1,y1,x,y]}, {x,xmin,xmax},{y,ymin,ymax}]},
PlotRange->{{xmin,xmax},{ymin,ymax},{zmin,zmax}},AxesLabel->{"x","y","z"} ],  {k,1,num2,2}]