初学者Python3:关于Turtle模块的问题

时间:2015-05-27 07:11:46

标签: python python-3.x

这是练习Lessons from a Triangle

import turtle

def drawPolygon(t, sideLength, numSides):
    turnAngle = 360 / numSides
    for i in range(numSides):
    t.forward(sideLength)
    t.left(turnAngle)

def drawFilledCircle(anyTurtle, radius, vcolor):

    anyTurtle.fillcolor(vcolor)
    anyTurtle.begin_fill()
    circumference = 2 * 3.1415 * radius
    sideLength = circumference / 360
    drawPolygon(anyTurtle, sideLength, 360)
    anyTurtle.end_fill()

wn = turtle.Screen()
wheel = turtle.Turtle()


drawFilledCircle(wheel, 20, 'purple')

wn.exitonclick()

1)当我尝试像wheel.speed(10)那样改变乌龟的速度时,它怎么办?如果我没有指示速度,默认速度是什么?

2)一旦完成,我怎么把乌龟放到圆圈的中间?

非常感谢你!

1 个答案:

答案 0 :(得分:0)

正如abarnert所说,您锻炼的链接已经破裂,但您可以采取一些措施来加速您的锻炼。 FWIW,海龟模块有一个.circle方法,但我想你的练习的目的是使用多边形来近似一个圆。

wheel.speed(10) 工作(尽管wheel.speed(0)更快)。它似乎并没有太大的区别,因为你的360边多边形的边是如此微小,所以龟必须做几个动作&转弯只是为了遍历一个像素。

使用360边多边形绘制圆,无论半径是多少,都不是一个好策略。下面的代码确定圆周边的数量,使每边约为1个像素。这对于任何半径的圆都很好,并且它避免了为小圆圈做太多工作。

除了使用turtle.speed加快速度之外,您还可以减少画布的帧延迟。此外,如果你在绘图时隐藏乌龟,它会更快。

以下代码在Python 2.6.6上进行了测试;它也应该在没有修改Python 3.x的情况下工作,但是在Python 3.x上你可以删除from __future__ import division, print_function行。

#!/usr/bin/env python

''' Approximate a circle using a polygon

    From http://stackoverflow.com/q/30475519/4014959

    Code revised by PM 2Ring 2015.05.27
'''

from __future__ import division, print_function

import turtle

def drawPolygon(t, sideLength, numSides):
    turnAngle = 360 / numSides
    for i in range(numSides):
        t.forward(sideLength)
        t.left(turnAngle)


def drawFilledCircle(anyTurtle, radius, vcolor):
    anyTurtle.fillcolor(vcolor)
    anyTurtle.begin_fill()

    circumference = 2 * 3.14159 * radius

    #Calculate number of sides so that each side is approximately 1 pixel
    numSides = int(0.5 + circumference)
    sideLength = circumference / numSides
    print('side length = {0}, number of sides = {1}'.format(sideLength, numSides))

    drawPolygon(anyTurtle, sideLength, numSides)
    anyTurtle.end_fill()


wn = turtle.Screen()

#Set minimum canvas update delay
wn.delay(1)

wheel = turtle.Turtle()

#Set fastest turtle speed
wheel.speed(0)
#wheel.hideturtle()

radius = 20

#Move to the bottom of the circle, so 
#that the filled circle will be centered.
wheel.up()
wheel.goto(0, -radius)
wheel.down()

drawFilledCircle(wheel, radius, 'purple')

#Move turtle to the center of the circle
wheel.up()
wheel.goto(0, 0)
#wheel.showturtle()

wn.exitonclick()
相关问题