Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- f[distance_, A_, B_, a_] :=
- Module[{dtemp = 0, point0, vec, norm, u0, t0, curdis = 0, points},
- vec = { 1, 2};
- point0 = {A, B};
- points = {{A, B}};
- dtemp = 0;
- res = FindInstance[((
- point0[[1]] + vec[[1]]*t == u^2/(2 a) - a/2 &&
- vec[[1]] <
- 0) || (point0[[1]] + vec[[1]]*t == - (u^2/(2 a)) + a/2 &&
- vec[[1]] > 0)) && point0[[2]] + vec[[2]]*t == u && t > 0, {t,
- u}, 1];
- u0 = u /. res[[1]];
- If[vec[[1]] < 0, point0 = {N[u0^2/(2 a) - a/2], N[u0]},
- point0 = {N[-(u0^2/(2 a)) + a/2], N[u0]}];
- points = Join[points, {point0}];
- If[vec[[1]] < 0,
- norm = {-a/Sqrt[a^2 + u0^2], u0/Sqrt[a^2 + u0^2]},
- norm = {a/Sqrt[a^2 + u0^2], u0/Sqrt[a^2 + u0^2]}];
- vec = N[vec - 2*norm*vec.norm/norm.norm];
- While[dtemp + curdis < distance,
- dtemp = dtemp + curdis;
- res =
- FindInstance[((
- point0[[1]] + vec[[1]]*t == u^2/(2 a) - a/2 &&
- vec[[1]] <
- 0) || (point0[[1]] + vec[[1]]*t == - (u^2/(2 a)) + a/2 &&
- vec[[1]] > 0)) && point0[[2]] + vec[[2]]*t == u &&
- t > 0, {t, u}, 1];
- u0 = u /. res[[1]];
- If[vec[[1]] <= 0, point0 = {N[u0^2/(2 a) - a/2], N[u0]},
- point0 = {N[-(u0^2/(2 a)) + a/2], N[u0]}];
- points = Join[points, {point0}];
- curdis =
- N[Sqrt[(u0^2/(2 a) - a/2 - point0[[1]])^2 + (u0^2 -
- point0[[2]])^2]];
- If[vec[[1]] < 0,
- norm = {-a/Sqrt[a^2 + u0^2], u0/Sqrt[a^2 + u0^2]},
- norm = {a/Sqrt[a^2 + u0^2], u0/Sqrt[a^2 + u0^2]}];
- vec = N[vec - 2*norm*vec.norm/norm.norm];
- point0 = point0 + (distance - dtemp)*vec/Norm[vec];
- points = Join[points, {point0}];
- ]
- Show[ContourPlot[{y^2 == 10 (x + 2.5),
- y^2 == -10 (x - 2.5)}, {x, -15, 15}, {y, -15, 15}],
- Graphics[Point[point0]],
- Graphics[Line[points]]
- ]
- ]
- (*Manipulate[{ f[distance,-1,1,5]},{{distance,1},0,500,ControlType\
- \[Rule]Animator,AnimationRate\[Rule]10}]*)
- f[15, -1.5, 0, 5]
Advertisement
Add Comment
Please, Sign In to add comment