L = 28;32;
r1[t_] = {1.5 + 1.5 Cos[π - t], Sin[π - t]};
r2[t_] = RotationTransform[{t^2{5, 4}, {0, 1}}]@{5 t, 4 Sin[t]};
r3[t_] = {-t^2, 2 t};
r4[t_] = {5 + 5 Cos[π - t], 4 Sin[π - t]};
{t1, t2, t3, t4} =
Module[{t, s},
Function[r,
NDSolve[{t'[s]*Norm[r'[t[s]]] == 1, t[0] == 0}, t, {s, 0, L}][[1,
1, 2]]]] /@ {r1, r2, r3, r4};
{c1, c2, c3, c4} = {r1@*t1, r2@*t2, r3@*t3, r4@*t4};
trans[c2_, c1_][s_, s0_] :=
RotationTransform[{c1'@s0, c2'@s0}, c2@s0]@
TranslationTransform[c2@s0 - c1@s0]@c1@s;
Animate[Show[
ParametricPlot[
Table[c@s, {c, {c1, c2, c3, c4}}] // Evaluate, {s, 0, L},
PlotStyle -> {Red, Orange, Green, Cyan}],
Graphics[{Arrowheads[Medium],
Table[Arrow[{c@s0, c@s0 + c'@s0}], {c, {c1, c2, c3, c4}}]}],
ParametricPlot[
Table[trans[c, c1][s, s0], {c, {c2, c3, c4}}] // Evaluate, {s, 0,
L}, PlotStyle -> {Orange, Green, Cyan}],
PlotRange -> {{-25, 25}, {-8, 20}}, ImageSize -> Large], {s0, 0, L},
DefaultDuration -> 10]