0

我发现自己在 Python 中使用 turtle 模块,只是将一些东西调整为其他人 (Dmitri Kurilo) 编写的代码。我用它做了一个非常整洁的图形,形成了美丽的曲线。因为我对数学知之甚少,也许你们中的一些人可以帮助我破译这里发生的事情!非常感谢,代码如下!:

import turtle, random
from math import *
def fib(n):    
    for n in range(400):
        turtle.color("black")
        turtle.right(pi*19)
        turtle.forward(n)
        if n > 400:
            break    

turtle.title("The Looping ball")
turtle.colormode(255)
turtle.color("white")
turtle.goto(0,0)
turtle.color("black")
turtle.speed(500)
fib(1)
turtle.getscreen()._root.mainloop()
4

2 回答 2

2
import turtle, random
from math import *

进口random是多余的。最后,只有turtlemath.pi被使用。

def fib(n):    
    for n in range(400):
        turtle.color("black")
        turtle.right(pi*19)
        turtle.forward(n)
        if n > 400:
            break

绘制一个由 400 条线段构成的图形,其中每两条线段之间的夹角为 59.69 度(turtle模块默认使用度数),每条线段都比前一条线长一个单位。这应该几乎会产生一个 6 角的螺旋角,但是因为线段之间的角度不是整圈(60 度)的六分之一,所以它稍微偏离了。

请注意,该参数n未使用,因为它被n循环中的覆盖。条件n > 400永远不会达到(因为range(400)范围从包含 0 到不包含 400),所以循环的最后一部分没有什么值得一提的。

现在主要部分:

turtle.title("The Looping ball")
turtle.colormode(255)
turtle.color("white")
turtle.goto(0,0)
turtle.color("black")
turtle.speed(500)

选择结果窗口的一些设置:设置标题,colormode设置(如何指定颜色值;此处未使用),在屏幕中心画一条白线并将海龟留在那里(最好使用turtle.penup()turtle.pendown()为此),并尽可能快地设置绘图速度(turtle.speed(0)会做同样的事情,任何大于 10 的都与 相同turtle.speed(0))。

fib(1)

螺旋被绘制。

turtle.getscreen()._root.mainloop()

程序的控制权交给turtle屏幕的主事件循环。如果您不这样做,窗口将在完成绘图后立即关闭。如果您“运行”主循环,只要窗口打开,它就会使程序保持活动状态。

于 2013-01-26T22:53:39.177 回答
2

原始程序的更清晰版本:

import turtle

def fib(num, rot=59.7, scale=1.0):
    for n in range(num):
        turtle.right(rot)
        turtle.forward(n*scale)

turtle.title('The Looping ball')
turtle.speed(2000)
turtle.pencolor('blue')
fib(400, rot=92, scale=0.75)
turtle.getscreen()._root.mainloop()

这删除了一些不必要的东西并参数化了一些值,因此 OP 可以使用行数、每行之前的旋转和行的长度。这有助于了解每个参数如何改变事物。

于 2013-01-26T23:24:28.617 回答