Clear[a,b,c,x,y,z,Nabla,SpherePoint](* här rensas mathematicas register på alla tidigare eventuella värden på variablerna*)

Jag definerar nabla  som gradienten av sfärfunktionen.

Nabla[x_,y_,z_]={Grad[x^2+y^2+z^2,{x,y,z}]}

Här följer parametriseringen av sfären: för varje s och t så får vi en punkt på enhetssfären.

SpherePoint[s_,t_]={Cos[t]*Sin[s],Sin[t]*Sin[s],Cos[s]}

Nu beräknas derivatavektorerna m.a.p s och t. Dessa kommer att spänna upp tangentplanet i den aktuella punkten:

DerSs[s_,t_]=D[SpherePoint[s,t],s](* derivatan  map s :: *)

DerSt[s_,t_]=D[SpherePoint[s,t],t](* derivatan map t :: *)

Manipulate[
Show[
	ContourPlot3D[
				x^2+y^2+z^2==1,
				{x,-2,2},
				{y,-2,2},
				{z,-2,2},
				PerformanceGoal->Quality
	],
	ContourPlot3D[
				Dot[Nabla @@ SpherePoint[a,b],{u,v,w}-SpherePoint[a,b]]==0,
				{u,-2,2},
				{v,-2,2},
				{w,-2,2},
				PerformanceGoal->Quality,
				ContourStyle->Opacity[0.5]
	],
	ListPointPlot3D[
					{SpherePoint[a,b]},
					PlotStyle->PointSize[Medium]
	],
	Graphics3D[
				{Red,Arrow[Tube[{SpherePoint[a,b],SpherePoint[a,b]+SpherePoint[a,b]},0.03]]}
	],(*här är gradientvektorn (ser ni mitt quick and dirty fusk?)*)
	Graphics3D[
				{Green,Arrow[Tube[{SpherePoint[a,b],SpherePoint[a,b]+DerSs[a,b]},0.03]]}
	],(*här är derivata vektorn map s*)
	Graphics3D[
				{Blue,Arrow[Tube[{SpherePoint[a,b],SpherePoint[a,b]+DerSt[a,b]},0.03]]}
	],(*Här är derivatavektorn map t*)
ImageSize->{Automatic,500}
],
{a,0,Pi},
{b,-2Pi,2Pi},
SaveDefinitions->True]