Guest User

Untitled

a guest
May 31st, 2017
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.71 KB | None | 0 0
  1. f[distance_, A_, B_, a_] :=
  2. Module[{dtemp = 0, point0, vec, norm, u0, t0, curdis = 0, points},
  3. vec = { 1, 2};
  4. point0 = {A, B};
  5. points = {{A, B}};
  6. dtemp = 0;
  7. res = FindInstance[((
  8. point0[[1]] + vec[[1]]*t == u^2/(2 a) - a/2 &&
  9. vec[[1]] <
  10. 0) || (point0[[1]] + vec[[1]]*t == - (u^2/(2 a)) + a/2 &&
  11. vec[[1]] > 0)) && point0[[2]] + vec[[2]]*t == u && t > 0, {t,
  12. u}, 1];
  13. u0 = u /. res[[1]];
  14. If[vec[[1]] < 0, point0 = {N[u0^2/(2 a) - a/2], N[u0]},
  15. point0 = {N[-(u0^2/(2 a)) + a/2], N[u0]}];
  16. points = Join[points, {point0}];
  17. If[vec[[1]] < 0,
  18. norm = {-a/Sqrt[a^2 + u0^2], u0/Sqrt[a^2 + u0^2]},
  19. norm = {a/Sqrt[a^2 + u0^2], u0/Sqrt[a^2 + u0^2]}];
  20.  
  21. vec = N[vec - 2*norm*vec.norm/norm.norm];
  22. While[dtemp + curdis < distance,
  23. dtemp = dtemp + curdis;
  24. res =
  25. FindInstance[((
  26. point0[[1]] + vec[[1]]*t == u^2/(2 a) - a/2 &&
  27. vec[[1]] <
  28. 0) || (point0[[1]] + vec[[1]]*t == - (u^2/(2 a)) + a/2 &&
  29. vec[[1]] > 0)) && point0[[2]] + vec[[2]]*t == u &&
  30. t > 0, {t, u}, 1];
  31. u0 = u /. res[[1]];
  32. If[vec[[1]] <= 0, point0 = {N[u0^2/(2 a) - a/2], N[u0]},
  33. point0 = {N[-(u0^2/(2 a)) + a/2], N[u0]}];
  34. points = Join[points, {point0}];
  35. curdis =
  36. N[Sqrt[(u0^2/(2 a) - a/2 - point0[[1]])^2 + (u0^2 -
  37. point0[[2]])^2]];
  38. If[vec[[1]] < 0,
  39. norm = {-a/Sqrt[a^2 + u0^2], u0/Sqrt[a^2 + u0^2]},
  40. norm = {a/Sqrt[a^2 + u0^2], u0/Sqrt[a^2 + u0^2]}];
  41.  
  42. vec = N[vec - 2*norm*vec.norm/norm.norm];
  43.  
  44.  
  45. point0 = point0 + (distance - dtemp)*vec/Norm[vec];
  46. points = Join[points, {point0}];
  47. ]
  48.  
  49. Show[ContourPlot[{y^2 == 10 (x + 2.5),
  50. y^2 == -10 (x - 2.5)}, {x, -15, 15}, {y, -15, 15}],
  51. Graphics[Point[point0]],
  52. Graphics[Line[points]]
  53. ]
  54. ]
  55. (*Manipulate[{ f[distance,-1,1,5]},{{distance,1},0,500,ControlType\
  56. \[Rule]Animator,AnimationRate\[Rule]10}]*)
  57. f[15, -1.5, 0, 5]
Advertisement
Add Comment
Please, Sign In to add comment