Here it is: Roughly the animation I wanted to create. A harmonic oscillator, with the corresponding trajectory in phase space and a bead-on-wire projection of the trajectory onto the potential energy curve.

I wanted to insert this in a powerpoint slide I would be using for an online lecture, so an animated GIF seemed like a good option. I started with an example from Dirk Mittler’s blog. (link no longer working)

What I really wanted to do was include several axes like in these examples from my earlier post at TheMaximalist, which created multiple scenes using several calls to **gr2d()** and then drew the scenes in a single call to **draw()**. The trouble I encountered was that the collection of time-synchronized multiple scenes weren’t rendered simultaneously in the animated GIF — the animation flickered back and forth between the scenes.

So I turned off the axes and made my own triplet of axes in a single scene using parametric lines and including the needed vertical offsets.

One key thing that took me a while to find: In my Windows installation (Maxima 5.44 and wxMaxima 20.06.6), no matter what I specified for a path in the **file_name** argument to **draw()**, the animated GIF file ended up getting written in C:\maxima-5.44.0

I’ve pasted the code below.

```
scenes: []$
for i:0 thru 61 do (
scenes: append(scenes,
[gr2d(proportional_axes=xy,
noframe,
ytics=false,xtics=false,nticks=100,
/* oscillator 2 units below */
color=black,
parametric(t,-2,t,-1.2,1.2),
/* phase space 2 units above */
color=black,
parametric(t,0,t,-1.2,1.2),
parametric(0,t,t,-1.2,1.2),
color=blue,
parametric(cos(t),sin(t),t,0,2*%pi),
/* potential */
color=black,
parametric(t,2,t,-1.2,1.2),
parametric(0,2+t,t,-.1,1),
color=blue,
explicit(2+x^2,x,-1.2,1.2),
color=red,point_type=filled_circle,
points([cos(i/10),cos(i/10),cos(i/10)],[-2,-sin(i/10),2+cos(i/10)^2]))]
)
)$
draw(
delay = 10,
file_name = "oscillator_phasespace_potential",
terminal = 'animated_gif,
scenes
)$
```

It appears

so the code could look like

param:23;

form:'(param*2);

ev(form);

LikeLike