gpt4 book ai didi

python - 在 Python 中制作 pi 数字的可视化表示

转载 作者:行者123 更新时间:2023-12-01 09:15:09 26 4
gpt4 key购买 nike

我正在尝试以视觉方式表示圆内 pi 的前一百万位数字。与编码列车 channel 类似,但使用的是 Python。 (https://www.youtube.com/watch?v=WEd_UIKG-uc&index=137&list=PLRqwX-V7Uu6ZiZxtDDRCi6uhfTH4FilpH)

它应该看起来像这样:

但它看起来像这样:

首先,我导入了 mathtkinter 类,我阅读了文档并制作了 Canvas 。我认为这里没有问题:

from  math import *
from tkinter import *
openpi = open (r'PI_numbers.txt', 'r')
pi = openpi.read()
win= Tk()
win = Canvas(win, width=500, height=500)
win.configure(background=('black'))
win.create_oval(0,0,500,500, fill='white')

接下来,由于我不知道如何制作开关盒,所以我搜索并找到了一些东西。

  def zero(sx,sy):
angle=36*0
x= 250* (1 + cos(angle))
y= 250* (1 + sin(angle))
win.create_line(sx,sy, x, y)
sx=x
sy=y
def one(sx,sy):
angle=36*1
x = 250 * (1 + cos(angle))
y = 250 * (1 + sin(angle))
win.create_line(sx, sy, x, y)
sx = x
sy = y
def two(sx,sy):
angle=36*2
x = 250 * (1 + cos(angle))
y = 250 * (1 + sin(angle))
win.create_line(sx, sy, x, y)
sx = x
sy = y

就这样到九点。然后:

y=250
x=250
options = {
'0': zero(sx=x, sy= y),
'1': one(sx=x, sy= y),
'2': two(sx=x, sy= y),
'3': three(sx=x, sy= y),
'4': four(sx=x, sy= y),
'5': five(sx=x, sy= y),
'6': six(sx=x, sy= y),
'7': seven(sx=x, sy= y),
'8': eight(sx=x, sy= y),
'9': nine(sx=x, sy= y),
".": point()
}
i=0
while len(pi)> i:
n = pi[i]
options [n]
i += 1

win.pack()
win.mainloop()

所以,在这里我试图从最后一个数字到新数字建立一条线。我从 250 250 开始,即圆周的中心。我检测到的问题不仅仅是 x 和 y 错误,而且它总是从中心开始,我不知道为什么。

options [n] 行中我得到这个:语句似乎没有效果。

最佳答案

I propose working with module turtle because it's a lot easier for drawing things

我强烈同意@Superior 的这种观点,但我个人会避免使用数学库,而让海龟(在 tkinter 上运行)来完成所有工作:

from turtle import Turtle, Screen

LARGE_RADIUS = 200
SMALL_RADIUS = 15

def make_pi():

""" from https://stackoverflow.com/a/9005163/5771269 """

q, r, t, k, m, x = 1, 0, 1, 1, 3, 3

while True:
if 4 * q + r - t < m * t:
yield m
q, r, m = 10 * q, 10 * (r - m * t), (10 * (3 * q + r)) // t - 10 * m
else:
q, r, m, t, k, x = k * q, x * (r + 2 * q), (q * (7 * k + 2) + r * x) // (t * x), t * x, k + 1, x + 2

screen = Screen()
screen.mode('logo') # put zero straight up

turtle = Turtle('turtle', visible=False)
turtle.speed('fastest')
turtle.penup()

turtle.sety(LARGE_RADIUS)
turtle.right(90)

positions = []

for index in range(10): # pre calculate all positions on circle
positions.append(turtle.position())
turtle.circle(-LARGE_RADIUS, extent=360 / 10)

turtle.home()
turtle.pendown()
turtle.showturtle()
turtle.speed('slow')

previous_digit = -1 # track digit repetitions

for digit in make_pi():

if digit == previous_digit: # same digit again, circle around
turtle.setheading(turtle.towards(0, 0))
turtle.left(90)
turtle.circle(-SMALL_RADIUS)
else:
position = positions[digit]
turtle.setheading(turtle.towards(position))
turtle.goto(position)

previous_digit = digit

screen.mainloop() # never reached

我没有使用固定大小的 PI_numbers.txt 文件,而是使用 digits of pi algorithm posted on StackOverflow by @batbaatar 将其设置为永久运行。 。根据您的需要更换。

我稍微修改了绘图,显示了数字何时通过循环回同一数字来跟随自身:

enter image description here

注意我们遇到第一个双 7 需要多长时间。我已将海龟置于 Logo 模式,以便自然地将零放在屏幕顶部。您可以在第二次 turtle.speed() 调用时调整动画的速度。

这不是一个合适的海龟程序,因为它是建立在 while True: 之上的,应该使用 screen.ontimer() 来提取每个数字,以便其他事件,像screen.exitonclick()一样,可以执行。

关于python - 在 Python 中制作 pi 数字的可视化表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51341959/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com