Advertisement
Matthen

Centre of Gravity

May 25th, 2013
414
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.03 KB | None | 0 0
  1. n = 25;
  2. Elbow[x_] := Log[1 + Exp[x]];
  3. ps = RandomReal[{-1, 0.5}, {n, 2}];
  4. cog = Mean[ps];
  5. colours = ColorData["DarkRainbow"] /@ (RandomReal[{0, 1}, n]);
  6. ps2 = RandomReal[{-0.5, 1}, {n, 2}];
  7. cog2 = Mean[ps2];
  8. colours2 = ColorData["DarkRainbow"] /@ (RandomReal[{0, 1}, n]);
  9. Tmax = 35;
  10. solve[ps_] := (
  11. NDSolve[
  12. Flatten@Table[
  13. With[{norm =
  14. Elbow[ Sqrt[(x[Mod[i + 1, n, 1]][t] -
  15. x[i][t])^2 + (y[Mod[i + 1, n, 1]][t] - y[i][t])^2]]},
  16. {(x[i])'[t] == (x[Mod[i + 1, n, 1]][t] - x[i][t])/ norm,
  17. (y[i])'[t] == (y[Mod[i + 1, n, 1]][t] - y[i][t])/ norm,
  18. x[i][0] == ps[[i, 1]],
  19. y[i][0] == ps[[i, 2]]
  20. }
  21. ]
  22. , {i, n}],
  23. Flatten@Table[{x[i], y[i]}, {i, n}],
  24. {t, 0, Tmax}
  25. ]);
  26. soln1 = solve[ps];
  27. soln2 = solve[ps2];
  28. frame[t_] := (
  29. Module[{t1, t2, op1, op2},
  30. {t1, t2} =
  31. 0.35 {Exp[Mod[t, 6, 0] - 1], Exp[Mod[t - 3, 6, 0] - 1]};
  32. op1 = If[Exp[-1] <= t1 <= Tmax,
  33. Min[0.5 (t1 - Exp[-1])^0.5, Min[1, 0.1 (Tmax - t1)]^0.5], 0];
  34. op2 = If[Exp[-1] <= t2 <= Tmax,
  35. Min[0.5 (t2 - Exp[-1])^0.5, Min[1, 0.1 (Tmax - t2)]^0.5], 0];
  36. Graphics[
  37. {If[op1 > 0, {Opacity[op1],
  38. Table[
  39. With[{p = Evaluate[{x[i][t1], y[i][t1]} /. First[soln1]],
  40. pp = Evaluate[{x[Mod[i + 1, n, 1]][t1],
  41. y[Mod[i + 1, n, 1]][t1]} /. First[soln1]]},
  42. {Opacity[0.8 op1], colours[[i]], Disk[p, 0.05], Line[{p, pp}]}
  43. ]
  44. , {i, n}],
  45. PointSize[Large],
  46. Red, Point[cog]
  47. }
  48. ],
  49. If[op2 > 0, {Opacity[op2],
  50. Table[
  51. With[{p = Evaluate[{x[i][t2], y[i][t2]} /. First[soln2]],
  52. pp = Evaluate[{x[Mod[i + 1, n, 1]][t2],
  53. y[Mod[i + 1, n, 1]][t2]} /. First[soln2]]},
  54. {Opacity[0.8 op2], colours[[i]], Disk[p, 0.05], Line[{p, pp}]}
  55. ]
  56. , {i, n}],
  57. PointSize[Large],
  58. Red, Point[cog2]
  59. }
  60. ]
  61. }
  62. , PlotRange -> 0.8, ImageSize -> 200]
  63. ])
  64.  
  65. Manipulate[
  66. frame[t],
  67. {t, 0, 6}
  68. ]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement