2016-12-06 1 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面ポリゴンですが、ほぼ円のように見えます。コメントやdocstringのは便利ですどこだ – furas

+0

注意、理想的にあなたが 'のようないくつかの情報を持っていると思います「」「通常の50-なくなっ円を近似する」「」'混乱を破る... – Julien

答えて

4

円は、無限に多くのポイントを持っている画面は、有限個の画素を有します。真の円を画面に描くことができないということは間違いありません。これは、ポリゴンを描くことが画面上の円を近似する唯一の方法であると言うわけではありません。 @Qwertyはコメントで正しく指摘しているので、trig関数でも行うことができます。

それにもかかわらず、多角形で円を近似することは、古代のアプローチで、piが近似されたクラシカルな方法でした。また、カメの楽しい運動です。

+0

あなたはにサインとコサインを使用することができますあなたはコンピュータ上のサークルに近づくことができるくらい近くに描く – 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'または' circumferential /(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()方法は、多角形近似を使用していますが、それはの関数としての辺の数を計算します私たちの50角形が潜在的により正確であるように、上記100の半径のために60のmaxiumとの半径が、それは実際には28の手順を使用しています!

+0

円の部分は単なる例です...私たちは円に変わる方法について話しています! –

+0

@BukkitmanPlaysMCPE、 – cdlane

+0

nvmしかし、スクリプトを作り直すことはできますか?代わりに、サークルをお互いに分けることができますか? –

関連する問題