![]() | 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")