2014-10-20 75 views
0

我的編程任務中遇到的一個問題是使用烏龜模塊繪製Spiral of Theodorus!與 n = 17.用烏龜模塊繪製Theodorus螺旋時遇到問題

我已經完成了所有的代碼,但每當它繪製的規模超級關閉。例如,在尺寸爲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」我不能跟一個名稱/信叫它如「蒂姆」 。

例如TheodorusSpiral(TIM,4,50)會給我

「蒂姆沒有定義」 錯誤

+0

在你的例子中,第一個三角形的尺寸不應該是sqrt(100),100,sqrt(200)。相反,它們應該是100 * sqrt(1),100 * 1,100 * sqrt(2)。你的錯誤不像編程錯誤那樣是一個數學錯誤。 – rmunn 2014-10-20 04:37:19

+0

好的,我添加了「* d」到需要乘以sqrt的地方,而且我仍然得到了不成比例的圖像。 – 2014-10-20 04:56:16

+0

您的'angle2'和'angle3'計算現在看起來很奇怪。 'd/d'將會取消每一個,並且你總會留下'math.atan(math.sqrt(a + 1))'。我認爲你需要繪製自己的圖表並再次檢查你的數學。另外,比'angle2','angle3'等更好的名字可以幫助你避免將來出現類似的錯誤。問問自己:'angle2'是什麼?這是什麼*和*什麼*之間的角度?然後給它一個名字,這將幫助你記住它是什麼。 – rmunn 2014-10-20 05:50:00

回答

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變量的工作原理有一個基本的誤解。你提到這是一個任務 - 我強烈建議你問你的老師這個問題,因爲你需要比我有時間更徹底的解釋。 (抱歉)。向你的老師展示你想要做什麼,並要求他/她向你解釋爲什麼它失敗。

+0

謝謝!我實際上修復了我的代碼,我錯誤地想出了我實際上必須畫的東西,所以這部分是很好的!現在還有另一個問題,我確實問過我的老師,但他說「想想」。我做了一些研究,並且發現了一些關於鴨子打字的事情,但我不完全確定這意味着什麼。 – 2014-10-21 03:43:06

+0

@jimmyle - 您發現的有關鴨子打字的資源與您的問題無關。這裏有個提示:當你叫'TheodorusSpiral(tim,4,50)'時,你期望會發生什麼?如果程序抱怨'tim沒有定義',爲什麼它會期待在那個時候已經定義了'tim'這個名字? – rmunn 2014-10-21 04:02:10

+0

做「像電腦一樣思考」練習 - 通過每一步,寫下哪些變量已經創建,哪些正在*引用但未創建*。例如,在'a =(i + 2)'中,正在創建變量'a',但是'i'正在被引用(並且因此應該早些時候被創建 - 它是在'for i in range (n-1)'語句)。現在,那個名爲'tim'的變量呢?你在創造它嗎?或者你在引用它?如果你只是參考它,它在哪裏被創建? – rmunn 2014-10-21 04:04:01