2016-10-10 2 views
0

Я пытался выяснить, как найти приближение PI, используя метод Polygons. И вытягивание полигонов, аппроксимирующих PI.Полигоны в Python

Я видел несколько способов приблизиться к PI, но ни один из них не выписывал многоугольник на экране с помощью черепахи (так что вы можете видеть визуальный аспект приближения) Не могли бы вы объяснить мне, как это сделать?

Любая помощь будет высоко оценена. Это скорее вопрос обучения, а затем ошибка.

ответ

1

Принимая новый подход, я использовал черепаху для анимации Craig Wood's Pi - Archimedes code из его серии Fun with Maths and Python.

Этот код только иллюстрирует вписанные, односторонние многоугольники. Он не использует пи, но вместо этого оценивает его из каждого полигона и выводит более точный результат в консоль:

from math import sqrt 
from turtle import Turtle, Screen 

SCALE = 300 
ITERATIONS = 7 

def draw_circle(turtle): 
    turtle.goto(0, -SCALE) 
    turtle.pendown() 
    turtle.circle(SCALE) 
    turtle.penup() 

def inscribe_circle(turtle, sides, edge_length): 
    turtle.goto(0, -SCALE) 
    turtle.setheading(0) 
    turtle.left(180/sides) 
    turtle.pendown() 
    for _ in range(sides): 
     turtle.forward(edge_length * SCALE) 
     turtle.left(360/sides) 
    turtle.penup() 

# based on code and analysis from http://www.craig-wood.com/nick/articles/pi-archimedes/ 
def pi_archimedes(turtle, n): 
    """ Calculate n iterations of Archimedes PI recurrence relation """ 

    polygon_edge_length_squared = 2.0 
    polygon_edge_length = sqrt(polygon_edge_length_squared) 
    polygon_sides = 4 

    inscribe_circle(turtle, polygon_sides, polygon_edge_length) 
    print(polygon_sides * polygon_edge_length/2) 

    for _ in range(n - 1): 
     polygon_sides *= 2 
     polygon_edge_length_squared = 2 - 2 * sqrt(1 - polygon_edge_length_squared/4) 
     polygon_edge_length = sqrt(polygon_edge_length_squared) 
     inscribe_circle(turtle, polygon_sides, polygon_edge_length) 
     print(polygon_sides * polygon_edge_length/2) 

yertle = Turtle() 
yertle.penup() 

draw_circle(yertle) 

pi_archimedes(yertle, ITERATIONS) 

yertle.hideturtle() 

Screen().exitonclick() 

enter image description here

Будем надеяться, что это должно дать вам быстрый старт на собственном Архимед Pi иллюстрации ,

Смежные вопросы