Animating the path of a projectile in python
Question: I am trying to animate the path of a projectile launched with an initial
velocity at an initial angle. I attempted to modify the code found here:
<http://matplotlib.org/examples/animation/simple_anim.html>

My code looks like this:

    
    
    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib.animation as animation
    
    fig, ax = plt.subplots()
    
    g = 9.8                               #value of gravity
    v = 20                                #initial velocity
    theta = 20*np.pi/180                  #initial angle of launch in radians
    tt = 2*v*np.sin(theta)/g              #total time of flight
    t = np.linspace(0, tt, 0.01)          #time of flight into an array
    x = v*np.cos(theta)*t                 #x position as function of time
    line, = ax.plot(x, v*np.sin(theta)*t-(0.5)*g*t**2) #plot of x and y in time
    
    def animate(i):
        line.set_xdata(v*np.cos(theta)*(t+i/10.0))
        line.set_ydata(v*np.sin(theta)*(t+i/10.0)-(0.5)*g*(t+i/10.0)**2)  
        return line,
    
    #Init only required for blitting to give a clean slate.
    def init():
        line.set_xdata(np.ma.array(t, mask=True))
        line.set_ydata(np.ma.array(t, mask=True))
        return line,
    
    ani = animation.FuncAnimation(fig, animate, np.arange(1, 200),
    init_func=init, interval=25, blit=True)
    plt.show()
    

The code, as shown, gives me plot window, but no trajectory and no animation.
I've searched on here to see if this has been asked elsewhere, and I have yet
to find it. If it has been asked, just link to the already answered question.
Any help is greatly appreciated. Thanks all.


Answer: I was able to get the following working with python 3.4.3:

    
    
    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib.animation as animation
    
    fig, ax = plt.subplots()
    
    g = 9.8                                                        #value of gravity
    v = 10.0                                                       #initial velocity
    theta = 40.0 * np.pi / 180.0                                   #initial angle of launch in radians
    t = 2 * v * np.sin(theta) / g                                  
    t = np.arange(0, 0.1, 0.01)                                    #time of flight into an array
    x = np.arange(0, 0.1, 0.01)
    line, = ax.plot(x, v * np.sin(theta) * x - (0.5) * g * x**2)   # plot of x and y in time
    
    def animate(i):
        """change the divisor of i to get a faster (but less precise) animation """
        line.set_xdata(v * np.cos(theta) * (t + i /100.0))
        line.set_ydata(v * np.sin(theta) * (x + i /100.0) - (0.5) * g * (x + i / 100.0)**2)  
        return line,
    
    plt.axis([0.0, 10.0, 0.0, 5.0])
    ax.set_autoscale_on(False)
    
    ani = animation.FuncAnimation(fig, animate, np.arange(1, 200))
    plt.show()
    

The axis needed to be re-scaled, & many other things changed.

It is not perfect, but shows a projectile following the required trajectory.

You can play with it now & have a look at the code and fiddle with it to
learn. I also suggest that you invest a little bit of time to learn the basics
of numpy/pyplot; that will pay hefty dividends down the road.

