import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import matplotlib.animation as animation
# define cube vertices
vertices = np.array([[-1, -1, -1],
[1, -1, -1],
[1, 1, -1],
[-1, 1, -1],
[-1, -1, 1],
[1, -1, 1],
[1, 1, 1],
[-1, 1, 1]])
# define edges joining the vertices
edges = [(0, 1), (1, 2), (2, 3), (3, 0),
(4, 5), (5, 6), (6, 7), (7, 4),
(0, 4), (1, 5), (2, 6), (3, 7)]
# define the plot
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# set plot limits
ax.set_xlim([-2, 2])
ax.set_ylim([-2, 2])
ax.set_zlim([-2, 2])
# define the animation function
def rotate(angle):
ax.clear()
# rotate the vertices around the x and y axes
c, s = np.cos(angle), np.sin(angle)
rotx = np.array([[1, 0, 0],
[0, c, -s],
[0, s, c]])
roty = np.array([[c, 0, s],
[0, 1, 0],
[-s, 0, c]])
vertices_rot = np.dot(roty, np.dot(rotx, vertices.T)).T
# plot the rotated cube
for edge in edges:
ax.plot3D(vertices_rot[edge, 0], vertices_rot[edge, 1], vertices_rot[edge, 2], 'blue')
# create the animation object
anim = animation.FuncAnimation(fig, rotate, frames=np.linspace(0, 2*np.pi, 50), interval=50)
# show the plot
plt.show()
The code defines the vertices of the cube and the edges joining them. It then sets up the plot and defines an animation function (rotate()
) that rotates the vertices around the x and y axes at each frame specified by the animation object. Finally, it creates and shows the animation object.