遇到海龟模块的问题,以绘制Theodorus的螺旋

时间:2014-10-20 04:31:37

标签: python turtle-graphics

我的编程任务的一个问题是使用turtle模块绘制Spiral of Theodorus!同 n = 17.

我已经完成了所有代码,但无论什么时候绘图的比例都是超级的。例如,在尺寸为sqrt(1),1,sqrt(2)的第一个三角形中,三角形将是45°,45°三角形,但是在龟1 = 1像素中,这将是难以辨认的,因此我将不得不使用更大的数字例如100,但如果我使用100,那么第一个三角形的尺寸将是sqrt(100),100,sqrt(200)。这是不成比例的三角形。

这是我的代码:

def TheodorusSpiral(myTurtle,n,d):
    import math
    myTurtle=turtle
    myTurtle.pu()
    myTurtle.home()
    myTurtle.pd()
    myTurtle.fd(d)
    myTurtle.lt(90)
    myTurtle.fd(d)
    myTurtle.lt(45)
    for i in range(n-1):
        a = (i+2)*d
        c = math.fabs(d*math.sqrt(a))
        angle = math.degrees(math.atan(c/d))
        angle2 = math.degrees(math.atan(d/d*math.sqrt(a+1)))
        angle3 = math.degrees(math.atan(d*math.sqrt(a+1)/d))
        angle4 = 180 - (angle2 + angle3)
        angle5 = 180 -(angle + angle4)
        myTurtle.fd(d)
        myTurtle.lt(angle5)



TheodorusSpiral(1,4,50)

另外我遇到的另一个问题是,当我调用该函数时,对于参数“myTurtle”,我无法用名称/字母(例如“tim”)调用它。

例如TheodorusSpiral(tim,4,50)会给我错误

  

“蒂姆未定义”

1 个答案:

答案 0 :(得分:0)

我的建议是,当你进行角度计算时,假装你正在绘制一个腿长等于1的图表,就像在维基百科图表中一样。所以你根本不会在角度计算中使用d,如下所示:

import turtle
def TheodorusSpiral(myTurtle,n,d):
    import math
    myTurtle=turtle
    myTurtle.pu()
    myTurtle.home()
    myTurtle.pd()
    myTurtle.fd(d)
    myTurtle.lt(90)
    myTurtle.fd(d)
    myTurtle.lt(45)
    for i in range(n-1):
        a = (i+2)
        c = math.fabs(math.sqrt(a))
        angle = math.degrees(math.atan(c/1))
        angle2 = math.degrees(math.atan(1/math.sqrt(a+1)))
        angle3 = math.degrees(math.atan(math.sqrt(a+1)/1))
        angle4 = 180 - (angle2 + angle3)
        angle5 = 180 -(angle + angle4)
        myTurtle.fd(d)
        myTurtle.lt(angle5)

TheodorusSpiral(1,4,50)

除了更改你的角度计算(我基本上从数学中删除了d,使其工作),我还在示例代码中包含了“import turtle”行,以便上面的内容可以复制并粘贴并正确运行。

至于你的另一个问题,那就是你试图调用TheodorusSpiral(tim,4,50)并且它失败了 - 你对Python变量的工作方式存在根本的误解。你提到这是一项任务 - 我强烈建议你问老师这个问题,因为你需要一个比我有时间更全面的解释。 (抱歉)。向你的老师展示你想要做的事情,并让他/她向你解释为什么它会失败。