Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

To get the rotation axis stay constant, add an enveloping circle making this invisible with opacity = 0. Further set aspect_ratio=(1,1,1) as an option of animate.

r = 2
y_axis = [r*vector((0,-1,0)),r*vector((0,1,0))]

var('alpha')
C = parametric_plot((r*cos(alpha),0,r*sin(alpha)),(alpha,0,2*pi),opacity=0)

n=19
t = (2*pi/n).n()
M=matrix([[cos(t),0,sin(t)],[0,1,0],[-sin(t),0,cos(t)]])
p=polytopes.cube()
vl = [v[:3] for v in p.vertices()]
sf = [] #[p]
for i in range(n):
    vl = [M*v for v in vl]
    sf.append(Polyhedron(vl).plot(color='green',opacity=0.5,frame=False)+ 
              C + line(y_axis,color='gold',thickness=2))
s=animate(sf,aspect_ratio=(1,1,1))
s.gif(savefile="an.gif")