2016-12-06 20 views
3

這是代碼在書Thinkpython 2e。如何在Python中成爲一個圓圈?

import turtle 
import math 

bob = turtle.Turtle() 

def polygon(t, n, length): 
    angle = 360/n 
    for i in range(n): 
     t.fd(length) 
     t.lt(angle)  

def circle(t, r): 
    circumference = 2 * math.pi * r 
    n = 50 
    length = circumference/n 
    polygon(t, n, length) 

circle(bob,50) 
turtle.mainloop() 

我不明白怎麼可能成爲一個圓形,我認爲它將是一個50邊多邊形,我說得對嗎?

+1

它是50邊多邊形,但看起來幾乎像圓圈。 – furas

+0

請注意,這裏的註釋和docstring是有用的,理想情況下,你會得到一些信息,比如''「」近似一個有50個常規圓圈的圓圈。「」''打破混亂... – Julien

回答

4

一個圓有無窮多個點,一個屏幕有許多像素。你是正確的,你不能在屏幕上繪製真正的圈子。這並不是說繪製多邊形是在屏幕上逼近一個圓的唯一方法。正如@Qwerty在評論中正確指出的那樣,你也可以通過trig函數來做到這一點。

儘管如此,通過多邊形近似圓是一種古老的方法,並且是pi近似的經典方式。另外 - 這是一個有趣的海龜運動。

+0

你可以使用SINE和COSINE來儘量靠近你的計算機上的圓圈繪製 – Qwerty

+0

@Qwerty好點。我會編輯我的帖子,以免給人一種繪製多邊形是近似圓的唯一方法的印象。 –

+0

你想讓我發佈數學嗎? – Qwerty

1

我沒有在Python編程,在一段時間(特別是與龜庫),但如果我還記得,有一個比較容易的方式

import turtle 

circumfrence = 80 

turtle = turtle.Turtle() 
turtle.shape("circle") 
turtle.circle(circumfrence/2) 

就這麼簡單!

+0

這可能做一個簡單的方法來做到這一點,但很難與橢圓形工作。使用SINE和COSINE會更強大,但對於一些沒有研究三角函數的人可能會更困惑。但是,這個答案適合這個人的需求。好工作! – Qwerty

+0

這很簡單,但不正確。 Python'turtle.circle()'方法的半徑是'diameter/2'或'circumference /(2 * math.pi)'。這是基本的數學,而不是Python。 – cdlane

+0

cdlane,我想問你一個問題......這個話題是關於什麼的?因爲它是如何成爲一個圓圈,而繪製圓圈只是一個例子! –

0

關於您的circle()函數的奇怪部分是n固定爲50.在大小圈子的極端情況下,這可能不是最優的,也許應該更具動態性。至於一個50邊的多邊形與一個圈,讓我們來測試使用turtle.circle()命令:

from turtle import Turtle, Screen 

radius = 100 
sides = 50 

bob = Turtle(shape="turtle") 
bob.width(2) 

bob.pencolor("red") 
bob.circle(radius) 

bob.pencolor("green") 
bob.circle(radius, steps=sides) 

bob.hideturtle() 

screen = Screen() 
screen.exitonclick() 

enter image description here

turtle.circle()方法使用多邊形近似,但它計算邊的數量的一個函數最大半徑爲60.對於半徑100以上,它實際上只使用28步,所以我們的50邊多邊形可能是更多準確!

+0

圓圈部分只是一個例子......我們正在談論如何變成一個圓圈! –

+0

@BukkitmanPlaysMCPE,我不會你不能理解你的評論,請重新說明,因爲它可能會揭示這個討論。 – cdlane

+0

nvm,但是你可以重新創建腳本,而是讓圈子彼此分開嗎? –