Voici ce que je désire: pouvoir animer une course entre quatre courbes commençant en (0,0) et terminant en (L,-1).
Les 4 courbes sont comme suit: une ligne droite, une parabole dont la dérivée en 0 est de -1/10, une parabole de sommet (L,-1) et une cycloïde. Si j'élimine la cycloïde de l'animation, l'animation fonctionne mais lorsque j'y ajoute la cycloïde, tout foire. Quels sont les problèmes dans ce mur de code? (désolé pour l'expression)
Code:L = 3; cadre = Graphics[{Thickness[0.001], Line[{{-0.4, 0.4}, {L + 0.4, 0.4}, {L + 0.4, -2.4}, {-0.4, -2.4}, {-0.4, 0.4}}]}]; xdroite[s_] := s; xprimedroite[s_] := 1; ydroite[s_] := s/L; yprimedroite[s_] := 1/L; s0 = 0; sF = L; integrantdroite[s_] = Sqrt[(xprimedroite[s]^2 + yprimedroite[s]^2)/ 2/(ydroite[s] - ydroite[s0])]; tempsdroite[s_] := NIntegrate[integrantdroite[v], {v, s0, s}]; nTable = 100; ds = N[(sF - s0)/nTable]; sdroite = Table[s0 + i *ds, {i, 0, nTable}]; tempsdroitefonctiondes = Map[tempsdroite, sdroite]; tabledroite = Transpose[{tempsdroitefonctiondes, sdroite}]; sdroitefonctiondetemps = Interpolation[tabledroite]; xpositiondroite[t_] := If[xdroite[sdroitefonctiondetemps[t]] > L, L, xdroite[sdroitefonctiondetemps[t]]]; ypositiondroite[t_] := If[ydroite[sdroitefonctiondetemps[t]] > 1, 1, ydroite[sdroitefonctiondetemps[t]]]; t0 = tempsdroitefonctiondes[[1]]; tF1 = tempsdroitefonctiondes[[nTable]]; rayon = 0.15; billedroite[t_] := Graphics[{Red, Thick, Circle[{xpositiondroite[t], rayon - ypositiondroite[t]}, rayon]}]; rampedroite = Graphics[{Blue, Line[{{0, 0}, {L, -1}}]}]; yparabole1[s_] := s^2 ((1 - L/10)/L^2) + s/10; yprimeparabole1[s_] := D[yparabole1, s]; integrantparabole1[s_] := Sqrt[(xprimedroite[s]^2 + yprimeparabole1[s]^2)/ 2/(yparabole1[s] - ydroite[s0])]; tempsparabole1[s_] := NIntegrate[integrantparabole1[v], {v, s0, s}]; tempsparabole1fonctiondes = Map[tempsparabole1, sdroite]; tableparabole1 = Transpose[{tempsparabole1fonctiondes, sdroite}]; sparabole1fonctiondetemps = Interpolation[tableparabole1]; xpositionparabole1[t_] := If[xdroite[sparabole1fonctiondetemps[t]] > L, L, xdroite[sparabole1fonctiondetemps[t]]]; ypositionparabole1[t_] := If[yparabole1[sparabole1fonctiondetemps[t]] > 1, 1, yparabole1[sparabole1fonctiondetemps[t]]]; tF2 = tempsparabole1fonctiondes[[nTable]]; billeparabole1[t_] := Graphics[{Red, Thick, Circle[{xpositionparabole1[t], rayon - ypositionparabole1[t]}, rayon]}]; rampeparabole1 = Show[ParametricPlot[{s, -s^2 ((1 - L/10)/L^2) - s/10}, {s, 0, L}]]; yparabole2[s_] := -(s/L)^2 + 2 s/L; yprimeparabole2[s_] := D[yparabole2, s]; integrantparabole2[s_] = Sqrt[(xprimedroite[s]^2 + yprimeparabole2[s]^2)/ 2/(yparabole2[s] - ydroite[s0])]; tempsparabole2[s_] := NIntegrate[integrantparabole2[v], {v, s0, s}]; tempsparabole2fonctiondes = Map[tempsparabole2, sdroite]; tableparabole2 = Transpose[{tempsparabole2fonctiondes, sdroite}]; sparabole2fonctiondetemps = Interpolation[tableparabole2]; xpositionparabole2[t_] := If[xdroite[sparabole2fonctiondetemps[t]] > L, L, xdroite[sparabole2fonctiondetemps[t]]]; ypositionparabole2[t_] := If[xdroite[sparabole2fonctiondetemps[t]] > L, 1, yparabole2[sparabole2fonctiondetemps[t]]]; tF3 = tempsparabole2fonctiondes[[nTable]]; billeparabole2[t_] := Graphics[{Red, Thick, Circle[{xpositionparabole2[t], rayon - ypositionparabole2[t]}, rayon]}]; rampeparabole2 = Show[ParametricPlot[{s, -(-(s/L)^2 + 2 s/L)}, {s, 0, L}]]; cycle2[L_] := NSolve[L == ((s - Sin[s])/(1 - Cos[s])), s, Reals]; ampli[L_] := L/(s - Sin[s]) /. cycle2[L][[1]]; xcycloide[s_] := ampli[L][[1]]*(s - Sin[s]); ycycloide[s_] := ampli[L][[1]]*(1 - Cos[s]); xprimecycloide[s_] := D[xcycloide, s]; yprimecycloide[s_] := D[ycycloide, s]; integrantcycloide[s_] = Sqrt[(xprimecycloide[s]^2 + yprimecycloide[s]^2)/ 2/(ycycloide[s] - ydroite[s0])]; dk = N[(cycle2[L] - s0)/nTable]; scycloide = Table[s0 + i *dk, {i, 0, nTable}]; tempscycloide[s_] := NIntegrate[integrantcycloide[v], {v, 0, s}]; tempscycloidefonctiondes = Map[tempscycloide, scycloide]; tablecycloide = Transpose[{tempscycloidefonctiondes, scycloide}]; scycloidefonctiondetemps = Interpolation[tablecycloide]; xpositioncycloide[t_] := If[xcycloide[scycloidefonctiondetemps[t]] > L, L, xcycloide[scycloidefonctiondetemps[t]]]; ypositioncycloide[t_] := If[xcycloide[scycloidefonctiondetemps[t]] > L, 1, ycycloide[scycloidefonctiondetemps[t]]]; tF4 = tempscycloidefonctiondes[[nTable]]; billecycloide[t_] := Graphics[{Red, Thick, Circle[{xpositionparabole2[t], rayon - ypositionparabole2[t]}, rayon]}]; rampecycloide = Show[ParametricPlot[{ampli[L][[1]]*(s - Sin[s]), ampli[L][[1]]*(1 - Cos[s])}, {s, 0, cycle2[L][[1]]}]]; tF = Max[tF1, tF2, tF3, tF4]; Animate[Show[cadre, rampedroite, rampeparabole1, rampeparabole2, rampecycloide, billedroite[temps], billeparabole1[temps], billeparabole2[temps], billecycloide[temps]], {temps, t0, tF}, AnimationRunning -> False]
-----