Soyez le premier à donner votre avis sur cette source.
Vue 10 880 fois - Téléchargée 421 fois
# -*- coding: cp1252 -*- ################################## # # # Programme : Monte Carlo.py # # Crée par : Shakan972 # # Date de création : 7/02/07 # # # ################################## ################################################################################### # # Ce programme permet à l'aide de la méthode de Monte Carlo # de déterminer de manière approximative pi # Pour cela on trace un carré dans lequel figure un arc de cercle # Puis l'on génère une série de points de coordonnées (x,y) dans ce carré # Et à chaque fois le programme détermine si les points sont dans ou hors # de l'arc de cercle à l'aide du calcul se réferrant à cette méthode puis enfin # on fait le rapport du nombre de points dans le cercle (multiplié par 4) # avec le nombre de points total ce qui au final permet la détermination # approximative de pi. # ################################################################################### #Importation des bibliothèques from Tkinter import * from random import * #Fonction permettant d'effectuer une pause def stop(): global flag flag=0 #Fonction permettant de démarrer le programme ou bien de le reprendre si il a été stoppé def demarrer(): global flag if flag==0: flag=1 generateur_nbre_aleat() #Cette fonction permet de différencier les points étant soit dans l'arc de cercle ou bien hors de l'arc de cercle #La couleur du point tracé varie donc en fonction de la position du point dans le carré def points_aleat(x,y): global pts_dans_cercle if (x-100)**2+(y-100)**2<90000: pts_dans_cercle=pts_dans_cercle+1 can1.create_oval(x-2,y-2,x,y,fill='green') else: can1.create_oval(x-2,y-2,x,y,fill='red') #Cette fonction permet le tirage de points de coordonnées aléatoires dans le cercle def generateur_nbre_aleat(): global x,y,pts_dans_cercle,pts_total,pi,flag x=randint(100,400) y=randint(100,400) points_aleat(x,y) pts_total+=1 pi=float((pts_dans_cercle*4.)/(pts_total)) result.configure(text = "Estimation de pi = "+str(pi)) pts_cercle.configure(text= "Nombre de points dans le cercle = "+str(pts_dans_cercle)) pts_tot.configure(text="Nombre de point total déjà placés = "+str(pts_total)) if flag<>0: fen1.after(1,generateur_nbre_aleat) #Programme principal x=0 y=0 pts_dans_cercle=0 pts_total=0 pi=0 flag=0 fen1=Tk() fen1.title("Détermination approximative de pi à l'aide de la méthode de Monte Carlo") can1=Canvas(fen1,width=500,height=500) can1.grid(row=0,column=0,columnspan=2) #Création du carré et de l'arc de cercle figurant dans ce dernier carre=can1.create_rectangle(100,100,400,400,width=1) fra1=Frame(fen1) fra1.grid(row=0,column=3,columnspan=2) Button(fra1,text="Démarrer",command=demarrer).grid(row=1,column=0,pady=5) Button(fra1,text="Arrêter",command=stop).grid(row=2,column=0,pady=5) Button(fra1,text="Quitter",command=fen1.destroy).grid(row=3,column=0,pady=5) result=Label(fen1) result.grid(row=1,column=0,sticky=E) pts_cercle=Label(fen1) pts_cercle.grid(row=2,column=0,sticky=E) pts_tot=Label(fen1) pts_tot.grid(row=3,column=0,sticky=E) fen1.mainloop()
j'aime beaucoup les sources comme celle-ci, les algorithmes, même si le résultat est très aproximatif, la technique est très interessante ! 10/10
bravo !
Tu pourrais renommer ton fichier en .pyw vu que la console ne sert à rien ici.
Bravo!
Donc je pense m'être bien expliqué et j'espère réaliser de meilleurs programmes mathématiques celui n'étant qu'une simple surprise parmis les incroyables possibilités qui existent dans cette étrange monde que sont les mathématiques. :)
Bonne continuation
___________
Aéra group
En tout cas merçi pour ta note et bon coding. :)
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.