ClearAll["Global`*"]

c={3*(1-t^2),2*(2*t)}/(1+t^2)
dc=Factor[D[c,t]]
ddc=Factor[D[dc,t]]

rych=Simplify[Sqrt[Factor[dc.dc]], t>0]

kri=Factor[Det[{dc,ddc}]/rych^3]

Plot[kri, {t,-10,10}, AxesOrigin->{0,0}]

pl1=ParametricPlot[c,{t,-10,10}, PlotRange->All];

t0=2/3

c0=c/.{t->t0}

pl2=Graphics[{Red, PointSize[0.013],Point[c0]}];

kri0=kri/.{t->t0}

n={{0,-1},{1,0}}.(dc/rych)

R=1/kri

S=Factor[c+n*R]

R0=R/.{t->t0}
S0=S/.{t->t0}

okru0=S0+R0{1-s^2,2s}/(1+s^2)

pl3=ParametricPlot[okru0, {s,-10, 10}, PlotStyle->{Dashed, Magenta}];

Show[pl1, pl2, pl3]

cR=Factor[c/.{t->(r+t0)}] (*toto je elipsa reparametrizovana tak, aby cR(0)= nas bod *)

Tc=Series[cR, {r,0,4}] (* Taylor pro Elipsu *)

okru0 (* Oskulacni kruznice *)

Series[okru0/.{s->r}, {r,0,4}] (* Tayloruv rozvoj oskulacni kruznice *)

θ=r0+r1*r+r2*r^2

TKruzRepa=Series[(okru0/.{s->θ}), {r,0,4}]; (* Tayloruv rozvoj po reparametrizaci, chceme nastavit r0, r1, r2 tak aby se co nejvic schodoval s Tc *)

reseni=Simplify[Solve[{SeriesCoefficient[Tc[[1]],0]==SeriesCoefficient[TKruzRepa[[1]], 0],SeriesCoefficient[Tc[[2]],0]==SeriesCoefficient[TKruzRepa[[2]], 0], SeriesCoefficient[Tc[[1]],1]==SeriesCoefficient[TKruzRepa[[1]], 1], SeriesCoefficient[Tc[[1]],2]==SeriesCoefficient[TKruzRepa[[1]], 2]}]][[1]]

okru0OPTIMAL=Simplify[(okru0/.{s->θ})/.reseni];

Simplify[Series[okru0OPTIMAL,{r,0,4}]]

Tc

(* elipsa a kruznice maji nyni kontakr druheho radu *)