ThinkPython-ex4.5——编写一个绘制阿基米德螺旋(或其他类型)的程序
是我还是每个人在尝试思考Python这个问题时都面临着这么多问题。 我正试图解决第四章的练习,但面临着太多的问题。 练习4.5说编写一个绘制阿基米德螺旋的程序。 我有这段代码,但它在Python中不起作用。 我需要一个简单可行的解决方案。 请帮忙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
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)