Approximation de Pi par la méthode d’Archimède
from turtle import * from math import * from kandinsky import draw_string def cercle(r, n): """Trace un cercle de centre (0,0) et de rayon r avec n points""" up() goto(r,0) down() color("black") for t in range(1, n + 1): goto(r * cos(2 * pi / n * t), r * sin(2 * pi / n * t)) def distance(x1, y1, x2, y2): return sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2) def methode_archimede(r, n): """Approximation de pi par la méthode d'Archimède Encadrement d'un cercle de rayon r par des polygones de n cotés """ #cercle cercle(r, 1000) #coordonnées du point du polygone inscrit xi = r yi = 0 #rapport entre polygone exinscritet polygone inscrit coef = 1 / cos(pi/n) #coordonnées du point du polygone exinscrit xe = coef * xi ye = coef * yi #perimetre inscrit pin = 0 #perimetre exinscrit pout = 0 #initialisation du tracé up() goto(xi, yi) down() for k in range(1, n + 1): #prochain point du polygone inscrit xi2 = r * cos(k * 2 * pi / n) yi2 = r * sin(k * 2 * pi / n) #prochain point du polygone exinscrit xe2 = coef * xi2 ye2 = coef * yi2 #tracé du côté du polygone inscrit color("blue") goto(xi2, yi2) up() #tracé du côté du polygone exinscrit goto(xe, ye) down() color("red") goto(xe2, ye2) up() goto(xi2, yi2) #mise a jour des perimetres pin = pin + distance(xi, yi, xi2, yi2) pout = pout + distance(xe, ye, xe2, ye2) #mise a jour des points xi = xi2 yi = yi2 xe = xe2 ye = ye2 down() draw_string(str(pin / (2 * rayon)),0,0) draw_string("<",0,25) draw_string("Pi",0,50) draw_string("<",0,75) draw_string(str(pout / (2 * rayon)),0,100) def trace(nbcote): methode_archimede(rayon, nbcote) #Tracé des polygones inscrit et exinscrit par la méthode d'Archimède rayon = 75 nbcote = int(input("Nombre de cotés ? ")) trace(nbcote)