-1

我正在通过 ThinkPython 一书学习 Python(为了好玩)。到目前为止,我真的很享受这个新爱好。最近的练习之一是制作阿基米德螺旋线。为了测试我的技能,我一直在制作双曲螺旋线,但被难住了!

根据方程r=a+b*theta^(1/c)

  • c=1时,我们看到一个阿基米德螺旋
  • c=-1我们应该看到一个双曲螺旋

我正在使用以下代码,并希望对正确方向的任何帮助。

  • 谁能在不直接给出答案的情况下帮助我朝着正确的方向发展。除非它只是一个格式问题。
  • 如果建议的答案涉及使用 (x,y) 坐标进行绘制,则没有积分。
import turtle
import math

def draw_spiral(t, n, length=3, a=0.1, b=0.0002):
    """Draws an Archimedian spiral starting at the origin.

    Args:
      n: how many line segments to draw
      length: how long each segment is
      a: how loose the initial spiral starts out (larger is looser)
      b: how loosly coiled the spiral is (larger is looser)

    http://en.wikipedia.org/wiki/Spiral
    """
    theta = 0.1

    for i in range(n):
        t.fd(length)
        dtheta = 1/((a + b * (theta**(1/-1))))

        t.lt(dtheta)
        theta += dtheta

# create the world and bob
bob = turtle.Turtle()
draw_spiral(bob, n=1000)

turtle.mainloop()

"""Source code from ThinkPython @ http://greenteapress.com/thinkpython2/code/spiral.py

edited to attempt a hyperbolic spiral"""

非常感谢!

4

2 回答 2

1

只需调整draw_spiral()作为参数传递给的常量:

def draw_spiral(t, n, length=1, a=0.01, b=60):

我能够按照您描述的方式生成螺旋:

在此处输入图像描述

但是,它是从外向内,而不是从内向外。所以,可能不是你要找的。

于 2020-05-01T05:51:53.363 回答
0

正如@cdlane 的回答中提到的,这只是论点的问题。我会扩展答案。

对于阿基米德螺线,将参数添加c到函数draw_spiral

def draw_spiral(t, n, length=3, a=0.1, b=0.0002, c=-1):

    theta = 0.1
    for i in range(n):
        t.fd(length)
        dtheta = 1/((a + b * (theta**(1/c))))

        t.lt(dtheta)
        theta += dtheta 

并使用以下参数,例如:

draw_spiral(bob, n=1000, length=1, a=0.01, b=0.001, c=1)

于 2020-05-01T06:10:49.757 回答