2 added 983 characters in body
source | link

This could be a strategy to achieve your goals.

background = ParametricPlot3D[ torus[θ1, θ2], {θ1, 0, 2 Pi}, {θ2, 0, 2 Pi}];
curve[t_] = torus[θ1[t], θ2[t]] /. sol; 

(* creating the curve plots for all discete times: all computations are done here and not in Manipulate so that computations have to be done only once, speeding up the animation process  *)
curves = Table[
   ParametricPlot3D[curve[s t], {ts, 0, 1}, PlotStyle -> Thick] /. 
    Line[x_] :> Tube[x, 0.01],
   {st, 0, 10, 0.05}];

Manipulate[
 GraphicsRow[{
   Show[{
     background,
     curves[[i]]
     }],
   frames[[i]]
   }, 
   ImageSize -> Large]Large
   ],
 {i, 1, Length[curves], 1},
 TrackedSymbols :> i
 ]

The idea is as follow: Given a curve

$$\gamma \colon [0,T] \to \mathbb{R}^3,$$

you obtain a homotopy of this curve to a point by

$$H \colon[0,T] \times [0,1] \to \mathbb{R}^3, \qquad H(t,s) = \gamma(s t).$$

You can now use one of the parameters $s$ or $t$ as animation parameter and the other one as plotting parameter. If you use t as "time" in the animation and if you plot the curve $s \mapsto H(t,s)$ for $s \in [0,1]$ and fixed t, you obtain exactly the curve that $\gamma$ traveled from time $0$ to time $t$. That's it basically.

The replacement rule

Line[x_] :> Tube[x, 0.01]

just turns the rather thin curves produced by ParametricPlot3D into a tubular curves for better visibility.

This could be a strategy to achieve your goals.

background = ParametricPlot3D[ torus[θ1, θ2], {θ1, 0, 2 Pi}, {θ2, 0, 2 Pi}];
curve[t_] = torus[θ1[t], θ2[t]] /. sol;
curves = Table[
   ParametricPlot3D[curve[s t], {t, 0, 1}, PlotStyle -> Thick] /. 
    Line[x_] :> Tube[x, 0.01],
   {s, 0, 10, 0.05}];

Manipulate[
 GraphicsRow[{
   Show[{
     background,
     curves[[i]]
     }],
   frames[[i]]
   }, ImageSize -> Large],
 {i, 1, Length[curves], 1},
 TrackedSymbols :> i
 ]

This could be a strategy to achieve your goals.

background = ParametricPlot3D[ torus[θ1, θ2], {θ1, 0, 2 Pi}, {θ2, 0, 2 Pi}];
curve[t_] = torus[θ1[t], θ2[t]] /. sol; 

(* creating the curve plots for all discete times: all computations are done here and not in Manipulate so that computations have to be done only once, speeding up the animation process  *)
curves = Table[
   ParametricPlot3D[curve[s t], {s, 0, 1}, PlotStyle -> Thick] /. 
    Line[x_] :> Tube[x, 0.01],
   {t, 0, 10, 0.05}];

Manipulate[
 GraphicsRow[{
   Show[{
     background,
     curves[[i]]
     }],
   frames[[i]]
   }, 
   ImageSize -> Large
   ],
 {i, 1, Length[curves], 1},
 TrackedSymbols :> i
 ]

The idea is as follow: Given a curve

$$\gamma \colon [0,T] \to \mathbb{R}^3,$$

you obtain a homotopy of this curve to a point by

$$H \colon[0,T] \times [0,1] \to \mathbb{R}^3, \qquad H(t,s) = \gamma(s t).$$

You can now use one of the parameters $s$ or $t$ as animation parameter and the other one as plotting parameter. If you use t as "time" in the animation and if you plot the curve $s \mapsto H(t,s)$ for $s \in [0,1]$ and fixed t, you obtain exactly the curve that $\gamma$ traveled from time $0$ to time $t$. That's it basically.

The replacement rule

Line[x_] :> Tube[x, 0.01]

just turns the rather thin curves produced by ParametricPlot3D into a tubular curves for better visibility.

1
source | link

This could be a strategy to achieve your goals.

background = ParametricPlot3D[ torus[θ1, θ2], {θ1, 0, 2 Pi}, {θ2, 0, 2 Pi}];
curve[t_] = torus[θ1[t], θ2[t]] /. sol;
curves = Table[
   ParametricPlot3D[curve[s t], {t, 0, 1}, PlotStyle -> Thick] /. 
    Line[x_] :> Tube[x, 0.01],
   {s, 0, 10, 0.05}];

Manipulate[
 GraphicsRow[{
   Show[{
     background,
     curves[[i]]
     }],
   frames[[i]]
   }, ImageSize -> Large],
 {i, 1, Length[curves], 1},
 TrackedSymbols :> i
 ]