The Gradient Vector is Perpendicular to the Level Curve
In[65]:=
Clear[f,x,y]
f[x_,y_] = 5 - (x^2 + x y + y^2)
Out[65]=
2 2
5 - x - x y - y
Here is a plot of some level curves f[x,y] = c.
In[66]:=
a = -1;
b = 1;
levelcurves = ContourPlot[Evaluate[f[x,y]],{x,a,b},{y,a,b},
ContourSmoothing->Automatic,
AxesLabel->{"x","y"}];

The lighter shading indicates larger values of f[x,y].
Here is the 3D plot of the surface z = f[x,y]:
In[67]:=
surfaceplot =
ParametricPlot3D[{x,y,f[x,y]},{x,a,b},{y,a,b},
AxesLabel->{"x","y","f[x,y]"}];

The level curves are plots at the height f[x,y]=c.
Here is f[x,y] = 4.5:
In[68]:=
c = 4.5;
Show[levelcurves,Contours->{c},ContourShading->False];

Here is the plot of the intersection of the surface and the plane z = 4.5:
In[69]:=
c = 4.5;
plane = ParametricPlot3D[{x,y,c},{x,a,b},{y,a,b},
PlotPoints->{2,2},DisplayFunction->Identity];
Show[surfaceplot,plane,DisplayFunction->$DisplayFunction];

Consider f(x,y) = 2 x^2 + x y + y^2.
In[70]:=
Clear[x,y,f]
f[x_,y_] = 2 x^2 + x y + y^2;
grad2[f][x,y]
Out[70]=
{4 x + y, x + 2 y}
Here is a part of the level curve f[x,y] = f[1.5,2].
In[71]:=
levelcurve = ContourPlot[f[x,y],{x,0,3},{y,1,4},
Contours->{f[1.5,2]},ContourShading->False,
DisplayFunction->$DisplayFunction];
General::spell1:
Possible spelling error: new symbol name "levelcurve"
is similar to existing symbol "levelcurves".

These next two will plot the gradient vector.
In[72]:=
Clear[x,y,t]
x0=1.5;
y0=2;
{x1,y1}=grad2[f][x,y]/.{x->1.5,y->2};
p0={x0,y0};
p1={x1,y1};
x[t_]:=x0+t(x1-x0)
y[t_]:=y0+t(y1-y0)
In[73]:=
gradient=ParametricPlot[{x[t],y[t]},{t,0,1}]
General::spell1:
Possible spelling error: new symbol name "gradient"
is similar to existing symbol "Gradient".

Out[74]=
-Graphics-
This plots the level curve and the gradient at (1.5,2)
In[75]:=
Show[levelcurve,gradient,PlotRange->All,
AspectRatio->Automatic,AxesLabel->{"x","y"},
DisplayFunction->$DisplayFunction];

Well...
In[76]:=
The gradient vector is perpendicular to the level curve!
General::spell1:
Possible spelling error: new symbol name "the"
is similar to existing symbol "The".
General::spell1:
Possible spelling error: new symbol name "level"
is similar to existing symbol "Level".
Out[76]=
is level perpendicular the The to vector curve! -Graphics-
Proof:
If f[x,y] = c is your level curve and you give it a parametrization r[t]=x[t]i+y[t]j, then g[t]=f[x[t],y[t]]=c.
But then g'[t] = 0
By the chain rule g'[t] = gradf[x[t],y[t]].{x'[t],y'[t]}.
So gradf[x[t],y[t]].{x'[t],y'[t]} = 0.
This means that the gradient is perpendicular to the tangent vector at that point.
By the way, we cannot visualize it here, but this works for any dimension.
Up to The Gradient