在“ Think Python”的界面设计部分中,我需要帮助来理解圆形和圆弧函数的方法,如下所示:
import turtle
import polygon
bob = turtle.Turtle()
print(bob)
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 = int(circumference / 3 ) + 1
length = circumference / n
polygon(t, n, length)
我不明白的地方:
我不知道他们为什么定义circumference
来画圆以及它如何画圆。
如果我调用circle(bob, 100)
之类的函数,那么它只会画圆的一部分,而不是整个圆。
我不明白为什么需要n
,以及该过程如何绕圈。
答案 0 :(得分:1)
我不知道为什么他们要定义圆周来画圆,以及它如何 画一个圆
一种可视化圆形的方法是绘制一个多边形,该多边形的边数等于圆的(整数)周长,每边的长度为1。对于半径= 100的圆,将是:
polygon(bob, 628, 1) # 628 = 2 * PI * 100
这会画出一个不错但很慢的圆圈:
我们可以通过使用更粗略的近似来加快速度。上面的circle()
函数将多边形的边数任意除以3,然后将边长增加3:
polygon(bob, 209, 3)
这只是一个粗糙的圆圈,但绘制速度更快:
如果我调用诸如circle(bob,100)之类的函数,那么它只会绘制一个 圆的一部分而不是整个圆。
我相信您正在将上面定义的circle()
函数与turtle附带的circle()
方法混合使用。通过这种方式重用“圆圈”这个名称使作者感到困惑。乌龟circle()
方法的第二个参数是 extent :
范围-角度-确定 画圆。如果未给出范围,则绘制整个圆。 如果范围不是一个完整的圆,则圆弧的一个端点为 当前笔位置。
因此,“ Think Python”函数调用:
circle(bob, 100)
绘制一个半径为100的圆:
乌龟法:
bob.circle(100, 90)
根据半径100绘制 arc (1/4圆):
我不明白为什么需要n,以及该过程如何使 圈。
n
是多边形上近似于圆形的边数:
n = int(circumference / 3 ) + 1
length = circumference / n
polygon(t, n, length)
从半径100开始,如果我们用1
替换上面的'3',我们将得到一个具有更多(629)边的多边形:
n = int(circumference / 1) + 1 # n = 629
length = circumference / n # length = 0.9989
或大致:
polygon(t, 628, 1)
如上所述。但是,如果将“ 3”替换为“ 27”,则会得到一个由24个边的多边形近似的圆:
n = int(circumference / 27 ) + 1 # n = 24
length = circumference / n # length = 26.1799
原始的'3'值应该是一个附加参数-在turtle.circle()
方法中,它大致等效于 steps 参数:
由于圆是由内接正则多边形近似的, 步骤确定要使用的步骤数。如果没有给出, 它将自动计算。可用于绘制常规 多边形。
bob.circle(100, steps=12)