f[x_,y_]:=x^2+y^2

grad[x_,y_] := Grad[f[x,y],{x,y}]

normal[x_,y_] = Simplify[grad[x,y]]

u[t_]={Cos[t],Sin[t]}

proj[v_,w_]=Abs[(v.w)]w

proj[u[Pi],normal[3,3]]

Manipulate[
Show[ContourPlot[f[x,y],{x,-7,7},{y,-7,7}, 
PerformanceGoal->"Quality" ,
(*Epilog->Arrow[{{pt,pt+normal@@pt},{pt,pt+gNormal@@pt}}],
Contours->Function[{min,max},Range[min,max,1]],*)
Contours->{0.25,0.5,1,2,3,4,5, 6,8,10},
ContourStyle->Directive[RGBColor[0.`,0.3`,0.41000000000000003`],Opacity[0.262`]],
ContourShading->None,
PlotRange->{{-7,7},{-7,7}}, 
ImageSize->Large],
ContourPlot[f[x,y],{x,-7,7},{y,-7,7}, 
PerformanceGoal->"Quality" ,
Contours->{Automatic,20},
ContourStyle->Directive[RGBColor[0.`,0.3`,0.41000000000000003`],Opacity[0.262`]],
ContourShading->None,
PlotRange->{{-7,7},{-7,7}}
],
Graphics[{Blue,Arrow[{pt,pt+normal@@pt}]}],(* Blå gradientpil*)
Graphics[{Red,Arrow[{pt,pt+proj[normal @@pt,u[t]]}]}],
Graphics[{Green,Arrow[{pt,pt+u[t]} ] }](* röd gradientpil*)
],(* end Show *) 
{{pt,{.01,-.1}}, Locator},(*punkten där gradientvektorerna skall beräknas och ritas*)
{t,0,2*Pi},(* vinkeln som anger riktningen för riktningsderivatan*)
FrameLabel->"Klicka i figuren för att visa gradientvektor (Blå pil)  ∇f till f=(x^2)+(y^2), \r riktningen definieras av enhetsvektorn u (grön)  och riktningsderivatan (som ju är bara ett tal)\r representeras som riktningsdervivatan gånger u(röd pil)\r Försök avgöra för vilken vinkel i förhållande till gradienten som riktningsderivatan är noll\r och vad har det med nivåkurvornas tangenter att göra?",
SaveDefinitions->True]