Starting from what is read here, write the following code:
spring[a_, x1_, x2_] := Module[{m, n},
xvalues = Table[m, {m, x1, x2, (x2 - x1)/1000}];
yvalues = Table[a Sin[n Pi/2], {n, 0, 100, .1}];
zvalues = Table[a Cos[n Pi/2], {n, 0, 100, .1}];
Line[Transpose @ {xvalues, yvalues, zvalues}]];
x[t_] := Cos[t]
xmin = NMinValue[{x[t], 0 <= t <= tmax}, t];
xmax = NMaxValue[{x[t], 0 <= t <= tmax}, t];
Animate[Graphics3D[{
spring[.2, xmin - .1, x[t]],
{LightGray, Sphere[{x[t], 0, 0}, .3]}},
Boxed -> False,
Lighting -> "Neutral",
PlotRange -> {{xmin - .1, xmax + .1}, {-1, 1}, {-1, 1}},
ViewPoint -> Above],
{t, 0, tmax, .1}]
you get the animation of what's shown in the figure:
I do not regret the result, but it is still far from the beautiful representations here reproduced.
Since I'm not able to use that complicated code for my purpose, I thought I would swell the line of my spring but I would not know how to do the code I posted.
I also had the idea of using Tube
instead of Line
, but in that case I pound my pc.
Can you give me a hand? Thank you!
Answer
Try this:
spring[a_, x1_, x2_] :=
Module[{m, n}, xvalues = Table[m, {m, x1, x2, (x2 - x1)/1000}];
yvalues = Table[a Sin[n Pi/2], {n, 0, 100, .1}];
zvalues = Table[a Cos[n Pi/2], {n, 0, 100, .1}];
Line[Transpose@{xvalues, yvalues, zvalues}]] /. Line -> Tube;
x[t_] := Cos[t]
xmin = NMinValue[{x[t], 0 <= t <= tmax}, t];
xmax = NMaxValue[{x[t], 0 <= t <= tmax}, t];
tmax = 30;
lst = Table[
Graphics3D[{spring[.2, xmin - .1, x[t]], {LightGray,
Sphere[{x[t], 0, 0}, .3]}}, Boxed -> False,
Lighting -> "Neutral",
PlotRange -> {{xmin - .1, xmax + .1}, {-1, 1}, {-1, 1}},
ViewPoint -> Above], {t, 0, tmax, .03}];
ListAnimate[lst, AnimationRate -> 150]
Have fun!
Comments
Post a Comment