Python 中的多边形
Polygons in Python
我一直在尝试找出如何使用 Polygons 的方法找到 PI 的近似值。并画出近似圆周率的多边形。
我见过多种近似 PI 的方法,但是 none 其中 none 使用 Turtle 在屏幕上写出多边形(因此您可以看到近似的视觉方面)
有人可以向我解释如何这样做吗?
如有任何帮助,我们将不胜感激。这更像是一个学习问题,然后是错误。
采用新方法,我使用海龟图形为 Craig Wood's Pi - Archimedes code from his Fun with Maths and Python 系列制作动画。
此代码仅说明内接的偶边多边形。它不使用 pi,而是从每个多边形估计它,并将越来越准确的结果输出到控制台:
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()
希望这能让您快速开始自己的 Archimedes Pi 插图。
我一直在尝试找出如何使用 Polygons 的方法找到 PI 的近似值。并画出近似圆周率的多边形。
我见过多种近似 PI 的方法,但是 none 其中 none 使用 Turtle 在屏幕上写出多边形(因此您可以看到近似的视觉方面) 有人可以向我解释如何这样做吗?
如有任何帮助,我们将不胜感激。这更像是一个学习问题,然后是错误。
采用新方法,我使用海龟图形为 Craig Wood's Pi - Archimedes code from his Fun with Maths and Python 系列制作动画。
此代码仅说明内接的偶边多边形。它不使用 pi,而是从每个多边形估计它,并将越来越准确的结果输出到控制台:
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()
希望这能让您快速开始自己的 Archimedes Pi 插图。