我编写了这个脚本来使用海龟模块来复制我在 Numberphile 频道上看到的混沌游戏。绘制了大量的点以使其在更大的范围内实际运行良好。我认为大量的点是导致程序在一段时间后开始运行缓慢的原因,我想知道是否有人可以帮助我想出一个解决方法。
我愿意接受任何类型的解决方案,只要控件保持不变并且顶点数可以是 3 以上的任何数字。
如果有人不知道混沌游戏是什么,那么它就是一个包含任意数量顶点的多边形的游戏。首先,您在多边形内放置一个点,随机选择一个顶点并在您之前放置的点和随机选择的顶点之间绘制一个新点。你不断重复这个过程,每次你都会使用新绘制的点。
在这个脚本中,我还包含了一条规则,以确保它不会连续两次选择相同的顶点来形成具有超过 3 个顶点的漂亮分形。3 个顶点实际上形成了谢尔宾斯基三角形。
这是 Numberphile 视频的链接:https ://www.youtube.com/watch?v=kbKtFN71Lfs
正如您可能知道的那样,我对 Python 和一般编码有点陌生。
完整代码:
import turtle as t
import tkinter as tk
from tkinter import ttk
from random import randint
wn = t.Screen()
wn.colormode(255)
t.pu();t.ht();t.speed(0)
plist = []
l = 0
val = 0
pb=ttk.Progressbar(orient="horizontal",length=wn.window_width(),mode="determinate")
pb.pack(side=tk.BOTTOM)
pb["value"]=0
def Clear():
t.clear()
plist = []
def Dot(x, y):
t.goto(x, y)
t.dot(5, (0, 0, 255))
plist.append(t.pos())
def Run(x, y):
wn.onscreenclick(None)
wn.tracer(0, 0)
l = len(plist)
pb["maximum"]=l*1000
xyc = randint(0, l-1)
xyc_old = 0
for _ in range(l*10):
xyc = randint(0, l-1)
for i in range(100):
xyc = randint(0, l-1);
if l >= 4:
while xyc == xyc_old:
xyc = randint(0, l-1);
xyc_old = xyc;
t.goto((t.pos()[0]+plist[xyc][0])/2, (t.pos()[1]+plist[xyc][1])/2);
t.dot(2, (255, 0, 0));
pb["value"]+=1;
pb.update()
wn.update()
plist.clear()
wn.onscreenclick(Dot, btn=1)
wn.onscreenclick(Run, btn=3)
wn.onscreenclick(Dot, btn=1)
wn.onscreenclick(Run, btn=3)
wn.onkey(Clear, "c")
wn.listen()
wn.mainloop()
我觉得我的编码风格与这里的许多人非常不同,但我希望这不是问题。
元芳怎么了
郎朗坤
随时随地看视频慕课网APP
相关分类