#!/usr/bin/env python # script animate_pi.py ''' animated graphical illustration of determination of pi with MC method .. author:: Guenter Quast ''' # dependencies: PYTHON v2.7, numpy, matplotlib # last modified: #-------------------------------------------------------------- # pyhton2 - python3 compatibility from __future__ import print_function, division, unicode_literals import numpy as np import matplotlib.pyplot as plt import matplotlib.animation as anim import sys ##### ---- main Program starts here ----- if __name__ == "__main__": fig=plt.figure(figsize=(7.5,7.5)) ax=fig.add_subplot(1,1,1) nin=0. nout=0. nrep=200 npoints=50 def animate(n): global nin,nout ix,iy,ox,oy=[],[],[],[] for j in range(npoints): r=np.random.rand(2) if (np.sum(r**2)<=1.): nin+=1. ix.append(r[0]) iy.append(r[1]) else: nout+=1. ox.append(r[0]) oy.append(r[1]) si=ax.scatter(ix,iy,s=1,color='green') so=ax.scatter(ox,oy,s=1,color='red') nt=nin+nout pi=4.*nin/(nt) tx=ax.text(0.25, 0.05, '%i points, $\\pi=$ %.3f' %(nt,pi), transform=ax.transAxes, backgroundcolor='white', size='x-large') return si,so,tx print(('\n*==* script ' + sys.argv[0]+' executing')) ani=anim.FuncAnimation(fig, animate, nrep, init_func=None, interval=50, fargs=None, blit=False, repeat=False) plt.show() pi=4.*nin/(nin+nout) print((' Total number of random points %i' % (nin+nout) )) print((' Points inside circle %i' % nin )) print((' ==> pi= %.3f' % pi))