Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ThinkPython-ex4.5——编写一个绘制阿基米德螺旋(或其他类型)的程序_Python_Turtle Graphics - Fatal编程技术网

ThinkPython-ex4.5——编写一个绘制阿基米德螺旋(或其他类型)的程序

ThinkPython-ex4.5——编写一个绘制阿基米德螺旋(或其他类型)的程序,python,turtle-graphics,Python,Turtle Graphics,是我还是每个人在尝试思考Python这个问题时都面临着这么多问题。 我正试图解决第四章的练习,但面临着太多的问题。 练习4.5说编写一个绘制阿基米德螺旋的程序。 我有这段代码,但它在Python中不起作用。 我需要一个简单可行的解决方案。 请帮忙 from TurtleWorld import * world = TurtleWorld() bob = Turtle() def polygon(t, length, n): t = Turtle() for i in rang

是我还是每个人在尝试思考Python这个问题时都面临着这么多问题。 我正试图解决第四章的练习,但面临着太多的问题。 练习4.5说编写一个绘制阿基米德螺旋的程序。 我有这段代码,但它在Python中不起作用。 我需要一个简单可行的解决方案。 请帮忙

from TurtleWorld import *

world = TurtleWorld()
bob = Turtle()

def polygon(t, length, n):
    t = Turtle()
    for i in range(n):
        fd(t, length)
        lt(t, 300 / n)

polygon(bob, 5, 8)

[在下面的讨论中,我使用的是Python附带的turtle库,而不是TurtleWorld,因此请进行相应调整。]来自在线ThinkPython PDF:

练习4.5。阅读有关螺旋的文章; 然后编写一个程序,绘制一个拱心[sic]螺旋线(或一个) 其他种类的)。解决方案:

如果我们按照维基百科的链接从螺旋线到阿基米德螺旋线,我们最终得到的公式是
r=a+b*theta
,它自然希望以极坐标计算,并以笛卡尔坐标绘制:

def spiral(turtle, rotations=6, a=0.0, b=5):
    theta = 0.0

    while theta < rotations * 2 * pi:
        radius = a + b * theta
        x, y = radius * cos(theta), radius * sin(theta)
        turtle.goto(x, y)
        theta += 0.1
但是我们没有循环完整旋转的次数,而是循环到
n
,即要绘制的段数。因此
n
应该很大,例如代码中的1000而不是5。每次迭代,我们向前移动
长度
像素,然后根据
a
b
θ
计算一个新的三角形角度:

delta = 1 / (a + b * theta)
在我们再次循环之前,我们转动这个小的量,并将这个量加到θ中。在这种方法中,
a
b
通常小于1但非零:

你可以通过两张图片中海龟的方向看到,第一张图片只是绘制点,所以海龟的方向并不重要,但是第二张图片中我们沿着螺旋线移动,所以海龟总是指向不断增长的螺旋线的方向。我希望这两种方法的讨论对您有所帮助

delta = 1 / (a + b * theta)