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)一旦完成,我怎么把乌龟放到圆圈的中间?
非常感谢你!
答案 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()