I am having trouble animating a series of plots[display3d] results and wonder if someone has a solution to this. I believe the problem is may be that animates is unable to animate a list of lists of display3d structures, but am not sure. Here’s the sequence of things that should illustrate the problem:

This plots a sphere and translates it by 10:

>sphereplot := a -> plot3d(rot(a, [sin(p)*cos(t), sin(p)*sin(t), 10 - cos(p)]), p = 0..Pi, t = 0..2*Pi, style = patch, scaling = constrained); [Rot is a simple function I wrote that takes an input angle, in degrees and a vector and rotates the object about the origin by a.]

This plots a ’necklace’ of spheres:

>plots[display3d]({seq(sphereplot(Pi*30*post/180), post = 1..12)});

Now, I want to animate this to produce a spinning ’necklace’ to make it look like a set of orbiting spheres. I have tried many things, here are some related successes:

This displays, each sphere in the necklace, one at a time, but in a very strange order using the insequence option to display3d: >plots[display3d]({seq(sphereplot(Pi*30*pos/180), pos = 1..12)}, insequence = true);

This animates a single sphere orbiting the periphery of a circle: >plots[animate3d]((rot(Pi*30*star/180, [sin(p)*cos(t), sin(p)*sin(te), 10 - cos(p)]), p = 0..Pi, t = 0..2*Pi), star = 1..12, frames = 20, scaling = constrained); But I cannot animate the full necklace that is produced by the plots[display3d] command that generates the necklace. For example, this doesn't work: >plots[display3d](rollerplot(Pi*30*posi/180), posi = 1..12, insequence = true); Error, (in plot3d/options3d) unknown or bad optional argument, posi = 1 .. 12

Another approach I tried was to individually generate each intermediate position (five will suffice) and then provide a list to plots[animate3d], like so: >plotframe1 := plots[display3d]({seq(sphereplot(Pi*30*pos/180), pos = 1..12)}): ...and so on for each postion with a different argument to sphereplot, this gives five 3d structures. Then I tried this but this didn't work either: >plots[animate3d][plotframe1, plotframe2, plotframe3, plotframe4, plotframe5];

If somemone can see the fundamental ﬂaw in trying to animate [display3d] outputs, please let me know - or better, if you know of a solution!

You didn’t include your deﬁnition of "rot", so I don’t know how you want to rotate it. By the way, you shouldn’t use the name "sphereplot" which is a command in the "plots" package.

|> This displays, each sphere in the necklace, one at a time, but |> in a very strange order using the insequence option to |> display3d: |> >plots[display3d]({seq(sphereplot(Pi*30*pos/180), pos = 1..12)}, |> insequence = true); It's in a strange order because you use a set rather than a list, and Maple can put sets in strange orders. Try >plots[display3d]([seq(sphereplot(Pi*30*pos/180), pos = 1..12)], insequence = true); |> But I cannot animate the full necklace that is produced by the |> plots[display3d] command that generates the necklace. For |> example, this doesn't work: |> >plots[display3d](rollerplot(Pi*30*posi/180), posi = 1..12, insequence = true); |> Error, (in plot3d/options3d) unknown or bad optional argument, posi = 1 .. 12

You didn’t say what `"rollerplot" is. Is "posi=1..12"`

supposed to be an argument to
"rollerplot"? Or should there be another "seq" in there? As it is, you have `"posi=1..12"`

as
an argument to "display3d", which of course doesn’t know what it’s supposed to do with
that.

|> Another approach I tried was to individually generate each |> intermediate position (five will suffice) and then provide a |> list to plots[animate3d], like so: |>plotframe1 := plots[display3d]({seq(sphereplot(Pi*30*pos/180), pos = 1..12)}): |> ...and so on for each postion with a different argument to |> sphereplot, this gives five 3d structures. Then I tried this |> but this didn't work either: |>plots[animate3d][plotframe1, plotframe2, plotframe3, plotframe4, plotframe5];

Now I’m really confused! You’re not even putting the list in parentheses? And why did you
switch to "animate3d"? That must be called as `animate3d(F, x=x1..x2, y=y1..y2,t=t1..t2)`

where F is an expression (or set of expressions) in variables x,y and t. What would work
is

> plots[display3d]([plotframe1, plotframe2, plotframe3, plotframe4, plotframe5], insequence=true);

Of course you could deﬁne a command to generate the frames, and do something like

> plots[display3d]([ seq(plotframe(k), k=1..5) ], insequence=true); |> If somemone can see the fundamental flaw in trying to animate |> [display3d] outputs, please let me know - or better, if you know of a |> solution! Thank you.

There’s no fundamental ﬂaw, it’s just a matter of being careful with your
`()'s, []'s and {}'s.`

For this statement to animate in sequence you need a list rather than a set. i.e.

>plots[display3d]([seq(sphereplot(Pi*30*pos/180), pos = 1..12)], insequence = true);

Or on this one try

>plots[display3d]([plotframe1, plotframe2, plotframe3, plotframe4, plotframe5],insequence=true);