# Pendulum Animation # Install ffmpeg (allows us to create videos) !apt update -y !apt install ffmpeg -y # Normal Python Mathy Code # Import Libraries: import numpy as np import matplotlib.pyplot as plt from matplotlib.animation import FFMpegWriter from matplotlib.patches import Circle # Pendulum Parameters g = 9.8 L = 1 # We need an array of time points from 0 to 10 in increments of 0.01 seconds dt = 0.001 t_vec = np.arange(0,10,dt) # Initialize a vector of zeros theta_vec = np.zeros(len(t_vec)) dtheta_vec = np.zeros(len(t_vec)) # Set our initial condition theta_vec = np.pi/4 # initial angle dtheta_vec = 0 # initial angular velocity # Loop through time # Euler's Method (approximately integrates the differential equation) for i in range(1, len(t_vec)): theta_vec[i] = theta_vec[i-1] + dtheta_vec[i-1]*dt dtheta_vec[i] = dtheta_vec[i-1] + (-g/L*np.sin(theta_vec[i-1]))*dt plt.plot(t_vec,theta_vec) plt.show() # Set up our Figure for drawing our Pendulum fig, ax = plt.subplots() # Create a plot on those axes, which is currently empty p, = ax.plot(,, color='cornflowerblue') #initializes an empyt plot ax.axis('equal') ax.set_xlim([-3, 3]) # x limits ax.set_ylim([-3, 3]) # y limits ax.set_xlabel('X') ax.set_ylabel('Y') ax.set_title('Pendulum Simulation') video_title = "simulation" # Now we want to plot stuff on those axes c = Circle((0, 0), radius=0.1, color='cornflowerblue') ax.add_patch(c) # Define information for our Animation FPS = 20 sample_rate = int(1/(FPS*dt)) dpi = 300 # Quality of the video writerObj = FFMpegWriter(fps=FPS) # Now we're putting the rod and bob in the right place # Initialize an array containing the # positions of the pendululm over time simulation_size = len(t_vec) # number of sim time points x_pendulum_arm = np.zeros(simulation_size) y_pendulum_arm = np.zeros(simulation_size) for i in range(0, simulation_size): x_pendulum_arm[i] = L*np.sin(theta_vec[i]) y_pendulum_arm[i] = -L*np.cos(theta_vec[i]) # We've computed all the pendulum positions # Now we need to update the plot in a loop and store each frame in a video # Plot and Create Animation: with writerObj.saving(fig, video_title+".mp4", dpi): # We want to create video that represents the simulation # So we need to sample only a few of the frames: for i in range(0, simulation_size, sample_rate): # Update Pendulum Arm: x_data_points = [0, x_pendulum_arm[i]] y_data_points = [0, y_pendulum_arm[i]] # We want to avoid creating new plots to make an animation (Very Slow) # Instead lets take the plot we made earlier and just update it with new data. p.set_data(x_data_points, y_data_points) # Update plot with set_data # Update Pendulum Patch: patch_center = x_pendulum_arm[i], y_pendulum_arm[i] # ^ note: the commas without brackets create a LIST c.center = patch_center # Same idea here, instead of drawing a new patch update its location # ^ updates the circle # Update Drawing: fig.canvas.draw() # Update the figure with the new changes # Grab and Save Frame: writerObj.grab_frame() # Iport the video you just made and run it on the notebook from IPython.display import Video Video("/work/simulation.mp4", embed=True, width=640, height=480) # You can find the video's path by right clicking on it in Notebooks & Files # and selecting "Copy path to clipboard"
Hit:1 http://security.debian.org/debian-security buster/updates InRelease Hit:2 http://deb.debian.org/debian buster InRelease Hit:3 http://deb.debian.org/debian buster-updates InRelease 5 packages can be upgraded. Run 'apt list --upgradable' to see them. ffmpeg is already the newest version (7:4.1.8-0+deb10u1). 0 upgraded, 0 newly installed, 0 to remove and 5 not upgraded.