I am trying to use `circle3D`

below, to create an animation of the osculator circle of a parametric curve.

```
(* circle3D PROCEDURE *)
(* Let's create circle3D that is something we would expect from
Circle but with an extra argument for its normal vector *)
circle3D(centre_: {0, 0, 0}, radius_: 1, normal_: {0, 0, 1}, angle_: {0, 2 Pi}) :=
Composition(
Line,
Map(RotationTransform({{0, 0, 1}, normal}, centre), #) &,
Map(Append(#, Last@centre) &, #) &,
Append(DeleteDuplicates(Most@#), Last@#) &,
Level(#, {-2}) &,
MeshPrimitives(#, 1) &,
DiscretizeRegion,
If)(First @ Differences @ angle >= 2 Pi,
Circle(Most @ centre, radius),
Circle(Most @ centre, radius, angle))
```

I am a new user of this site and also of *Mathematica*. I found this procedure on the site. It works perfectly with `Graphics3D`

, but when I try to use it to create an animation, I get an error with the following content:

TransformationFunction contact details ({{, 4413884991460323, -0.5698965816793001,, 693104666707606, -54.82771835995227}, {-0,5698965816793001,, 4185903560645521,, 7071067811865474, -55.935347033890770107707601077077831} , -0.14002114478941538`, should be a triple of numbers, or a Scaled form.

Here is the code for my *Mathematica* notebook:

```
(* Solution: *)
ClearAll("Global`*");
(* ZAŁOŻENIE GLOBALNE t > 0 *)
$Assumptions = t > 0;
(* KRZYWA *)
r(t_) := {t + 1/t, t - 1/t, 2 Log(t)};
(* JEDNOSTKOWY WEKTOR STYCZNY *)
tv = D(r(t), t);
tvnorm = Simplify(Sqrt(tv.tv));
utv = tv/tvnorm;
(* POCHODNA WEKTORA STYCZNEGO *)
tvD = D(tv, t);
(* JEDNOSTKOWY WEKTOR BINORMALNY *)
bv = tv(Cross)tvD;
bvnorm = Simplify(Sqrt(bv.bv));
ubv = bv/bvnorm;
(* JEDNOSTKOWY WEKTOR NORMALNY *)
unv = ubv(Cross)utv;
(* ORTOGONALNOŚĆ WEKTORÓW utv, ubv, unv *)
Simplify((ubv(Cross)utv)(Cross)unv);
(* KRZYWIZNA KRZYWEJ *)
k = bvnorm/tvnorm^3;
(* PROMIEŃ OKRĘGU OSKULACYJNEGO *)
or = 1/k;
(* WEKTOR WODZĄCY ŚRODKA OKRĘGU OSKULACYJNEGO *)
occv = r(t) + or*unv;
(* W PUNKCIE M: *)
(* PUNKT M - tutaj t = 1 *)
pM = {2, 0, 0};
(* JEDNOSTKOWY WEKTOR STYCZNY w M *)
utvM = utv /. t -> 1;
(* JEDNOSTKOWY WEKTOR BINORMALNY w M *)
ubvM = ubv /. t -> 1;
(* JEDNOSTKOWY WEKTOR NORMALNY w M *)
unvM = unv /. t -> 1;
(* KRZYWIZNA KRZYWEJ w M *)
kM = k /. t -> 1;
(* PROMIEŃ OKRĘGU OSKULACYJNEGO w M *)
orM = 1/kM;
(* WEKTOR WODZĄCY ŚRODKA OKRĘGU OSKULACYJNEGO w M *)
occvM = r(t) + or*unv /. t -> 1;
In(23):= (* circle3D PROCEDURE *)
(* Let's create circle3D that is something we would expect from
Circle but with an extra argument for its normal vector *)
circle3D(centre_: {0, 0, 0}, radius_: 1, normal_: {0, 0, 1},
angle_: {0, 2 Pi}) :=
Composition(
Line,
Map(RotationTransform({{0, 0, 1}, normal}, centre), #) &,
Map(Append(#, Last@centre) &, #) &,
Append(DeleteDuplicates(Most@#), Last@#) &,
Level(#, {-2}) &,
MeshPrimitives(#, 1) &,
DiscretizeRegion,
If
)(First@Differences@angle >= 2 Pi,
Circle(Most@centre, radius),
Circle(Most@centre, radius, angle)
)
(* Visualization: *)
In(24):= (* SKALOWANIE WEKTORÓW JEDNOSTKOWYCH *)
scalvs = 3;
(* KRZYWA *)
curV = ParametricPlot3D(r(t), {t, 0.1, 4}, PlotStyle -> Red);
(* PUNKT M NA KRZYWEJ *)
pMV = Graphics3D({Blue, PointSize(Large), Point(pM)});
(* ŚRODEK OKRĘGU OSKULACYJNEGO W M *)
occvMV = Graphics3D({Black, PointSize(Large), Point(occvM)});
(* OKRĄG OSKULACYJNY W M *)
ocMV = Graphics3D(circle3D(occvM, orM, ubvM ));
(* JEDNOSTKOWY WEKTOR STYCZNY W M *)
utvMV = Graphics3D({Green, Arrow({pM, pM + scalvs*utvM})});
(* JEDNOSTKOWY WEKTOR NORMALNY W M *)
unvMV = Graphics3D({Magenta, Arrow({pM, pM + scalvs*unvM})});
(* JEDNOSTKOWY WEKTOR BINORMALNY W M *)
ubvMV = Graphics3D({Cyan, Arrow({pM, pM + scalvs*ubvM})});
(* WYKRES *)
Show({curV, pMV, occvMV, ocMV, utvMV, ubvMV, unvMV},
BaseStyle -> {FontSize -> 12, FontFamily -> "Verdena"}, Axes -> True,
AxesLabel -> {x, y, z}, Ticks -> Automatic, AxesStyle -> {Red, Green, Blue},
PlotRange -> {{1, 12}, {-5, 4}, {-5, 3}},
PlotLabel ->
Style(Framed("Krzywa i okrąg oskulacyjny", FrameStyle -> Red), Bold, 14,
Black, Background -> Lighter(LightYellow)),
BaseStyle -> {FontSize -> 12, FontFamily -> "Verdena"})
(* Animation: *)
(* SKALOWANIE WEKTORÓW JEDNOSTKOWYCH *)
scalvs = 3;
(* KRZYWA *)
curV = ParametricPlot3D(r(t), {t, 0.1, 4}, PlotStyle -> Red);
(* PEWIEN PUNKT P NA KRZYWEJ *)
pPV(t_) = Graphics3D({Blue, PointSize(Large), Point(r(t))});
(* ŚRODEK OKRĘGU OSKULACYJNEGO W P *)
occvPV(t_) = Graphics3D({Black, PointSize(Large), Point(occv)});
(* OKRĄG OSKULACYJNY W P *)
ocPV(t_) = Graphics3D(circle3D(occv, or, ubv ));
(* JEDNOSTKOWY WEKTOR STYCZNY W P *)
utvPV(t_) = Graphics3D({Green, Arrow({r(t), r(t) + scalvs*utv})});
(* JEDNOSTKOWY WEKTOR NORMALNY W P *)
unvPV(t_) = Graphics3D({Magenta, Arrow({r(t), r(t) + scalvs*unv})});
(* JEDNOSTKOWY WEKTOR BINORMALNY W P *)
ubvPV(t_) = Graphics3D({Cyan, Arrow({r(t), r(t) + scalvs*ubv})});
(* ANIMATION *)
Animate(
Show({curV, pPV(t), occvPV(t), ocPV(t), utvPV(t), ubvPV(t), nvPV(t)},
BaseStyle -> {FontSize -> 12,
FontFamily -> "Verdena"},
Axes -> True,
AxesLabel -> {x, y, z},
Ticks -> Automatic,
AxesStyle -> {Red, Green, Blue},
PlotRange -> {{1, 12}, {-5, 4}, {-5, 3}},
PlotLabel ->
Style(Framed("Krzywa i okrąg oskulacyjny",
FrameStyle -> Red), Bold, 14, Black,
Background -> Lighter(LightYellow)),
BaseStyle -> {FontSize -> 12, FontFamily -> "Verdena"}), {t, 0.1, 4},
AnimationRunning -> False)
```

Please help me to solve the problem I have described.