Advertisement
Matthen

Drawn Caustic

May 3rd, 2014
637
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.21 KB | None | 0 0
  1. f[x_] := If[Abs[x] < 1, -Sqrt[1 - x^2], 0];
  2. (*f[x_]:=x^2;*)
  3. n = 100;
  4. T = 300;
  5. lines = Table[line[{-1 + 2 i/n, 1}, Pi, T, 0.1, f, 0.01, 3],
  6. {i, n - 1}];
  7. T = Length[lines];
  8.  
  9. Clear[line];
  10. line[p0_, \[Theta]0_, n_, dx_, f_, \[Sigma]_: 0.01, r_: 5] :=
  11. Module[{p = p0, p1, \[Theta] = \[Theta]0, out, x},
  12. out = {p};
  13. Do[
  14. \[Theta] += RandomVariate[NormalDistribution[0, \[Sigma]]];
  15. p1 = p;
  16. p += dx {Sin[\[Theta]], Cos[\[Theta]]};
  17. x = (p[[1]] + p1[[1]])/2;
  18.  
  19. If[And[f[p1[[1]]] < p1[[2]], f[p[[1]]] > p[[2]]],
  20. With[{\[Beta] = ArcTan[f'[x]]},
  21. \[Theta] = Pi - \[Theta] - 2 \[Beta];
  22. ];
  23. p = {x, f[x]};
  24. ];
  25. AppendTo[out, p];
  26. , {i, n}];
  27. MovingAverage[out, r]
  28. ];
  29.  
  30. frame[t_] := Rotate[(Show[
  31. Graphics[{
  32. Opacity[0.5], Thickness[0.003],
  33. Table[
  34. {ColorData["DarkRainbow"][i/n],
  35. Line[lines[[i]][[
  36. If[t <= T, 1, t - T] ;; If[t < T, t, T]]]]},
  37. {i, Length@lines}
  38. ]
  39. }, PlotRange -> {{-1, 1}, {-1.1, 1}}, Background -> White,
  40. ImageSize -> 250],
  41. Plot[f[x], {x, -1, 1}, PlotStyle -> Directive[Thick, White]]
  42. ]), Pi];
  43. Manipulate[
  44. frame[t],
  45. {{t, T}, 0, 2 T + 1, 1}]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement