ClearAll["Global`*"];
Remove["Global`*"];

X[u_, v_]:={u, v, ((u^2)-(v^2))/2}

X1[u0_,v0_]:=D[X[u,v], u]/.{u->u0, v->v0}
X2[u0_,v0_]:=D[X[u,v], v]/.{u->u0, v->v0}

Nvec[u_, v_]:=Normalize[Cross[X1[u,v], X2[u,v]]];

v1[u_,v_]:=Normalize[X1[u,v]];

v2[u_,v_]:=Cross[Nvec[u,v],v1[u,v]];

DirVec[u_,v_, θ_]:= v1[u,v]Cos[θ]+v2[u,v]Sin[θ];

BinVec[u_,v_,θ_]:=DirVec[u,v, θ - π/2];

NIntPlane[u_, v_, θ]:=Cross[Normalize[DirVec[u, v, θ]], Nvec[u, v]];

w1[x0_, y0_,θ0_]:= Evaluate[DirVec[x0, y0,θ0]];
w2[x0_, y0_]:= Evaluate[Nvec[x0,y0]];

Plane[u_, v_, x0_, y0_, θ_]:=X[x0, y0]+ u w1[x0, y0,θ]+v w2[x0, y0];

bb[t_, x_, y_, θ2_]:=b/.NSolve[X[x0, y0]+t0*w1[x0, y0, θ] + b*w2[x0, y0]==X[x0+(t0*w1[x0, y0, θ] + b*w2[x0, y0])[[1]], y0+(t0*w1[x0, y0, θ] + b*w2[x0, y0])[[2]]],b][[1]]/.{x0->x, y0->y, θ->θ2, t0->t}

α[t_, x0_, y0_, θ_]:=X[x0, y0]+t*w1[x0, y0, θ] + bb[t, x0, y0, θ] *w2[x0, y0]

K:=Abs[((bInterp''[0])/(((1+bInterp'[0]^2))^(3/2)))];

OscCenter := αInterp[0] + If[Re[αInterp''[0].NvecOld] ≥ 0, NvecOld/K, -NvecOld/K];

OscCircle[t_]:=OscCenter+Cos[t]NvecOld/K +Sin[t] DirVecOld/K;

ReinterpolateCurve[x0_, y0_, θ_]:=
{
pts=Table[{t,bb[t, x0, y0, θ]}, {t, -10, 10, .5}];
bInterp=Interpolation[pts];
αInterp[t_] := X[x0, y0]+t*w1[x0, y0, θ] + bInterp[t] *w2[x0, y0];
NvecOld = Nvec[x0, y0];
DirVecOld = DirVec[x0, y0, θ];
θOld=θ;
OscCenterOld = Evaluate[OscCenter[t]];
KOld=Evaluate[K[t]];
}

(*ReinterpolateCurve[1, 0,0]*)

{x0Old, y0Old,θ0Old} = {0, 1, 0};
ReinterpolateCurve[x0Old, y0Old,θ0Old];

AssignOldValus [x0_, y0_, θ_]:= 
{
x0Old = x0;
y0Old = y0;
θ0Old = θ;
}

Manipulate[
{Show[{
	ParametricPlot3D[{Plane[u, v, x0, y0, θ]}, {u, -4, 4}, {v,-4, 4}, 
					PlotRange->{{-4, 4}, {-4, 4}, {-4, 4}} ,PlotStyle->Opacity[.1],Mesh->None, BoxRatios->Automatic],
	ParametricPlot3D[{X[u,v]}, {u, -4, 4}, {v,-4, 4},
					PlotRange->{{-4, 4}, {-4, 4}, {-4, 4}} ,PlotStyle->Opacity[.4],Mesh->None, BoxRatios->Automatic],
         ParametricPlot3D[αInterp[t], {t, -10, 10},PlotRange->{{-4, 4}, {-4, 4}, {-4, 4}},PlotStyle->{Directive[Red, Thick]}],    
	ParametricPlot3D[OscCircle[t], {t, 0, 2π},PlotStyle->{Directive[Blue, Thick]}],
	Graphics3D[{PointSize[.02], Blue, Point[X[x0, y0]]}],
	Graphics3D[{Thick, Green, Line[{X[x0, y0],X[x0, y0]+Nvec[x0,y0]}]}],
         Graphics3D[{Thick, Purple,Line[{ X[x0, y0],X[x0, y0]+DirVec[x0, y0, θ]}]}], 
         Graphics3D[{Thick, Cyan, Line[{X[x0, y0], X[x0, y0]+BinVec[x0, y0,θ]}]}]
}],
AssignOldValus[x0, y0, θ]
}[[1]],
{{x0,x0Old}, -4, 4}, {{y0,y0Old}, -4, 4}, {{θ,θ0Old}, 0, 2π}]

ReinterpolateCurve[x0Old, y0Old,θ0Old];

(*  Manipulate sliders to position the blue point on the surface.  Then Evaluate the above line "ReinterpolateCurve[x0Old, y0Old,θ0Old];" to compute the normal curve in the tangent direction as well as the osculating circle. *)