我正在使用Python Turtles使用forward()
和right()
绘制一个圆圈。
我有一个for
循环从0到359计数,每次触发时,它会将乌龟向前移动1和右1。
但问题是我需要特定的直径。我几乎100%肯定我需要使用trig,但我试图无济于事。
我无法弄清楚如何做到这一点。我们应该使用forward()
和right()
,而不是circle()
。
谢谢!
答案 0 :(得分:3)
这是一个有效的例子:
import turtle
import math
def circle(radius):
turtle.up()
# go to (0, radius)
turtle.goto(0,radius)
turtle.down()
turtle.color("black")
# number of times the y axis has been crossed
times_crossed_y = 0
x_sign = 1.0
while times_crossed_y <= 1:
# move by 1/360 circumference
turtle.forward(2*math.pi*radius/360.0)
# rotate by one degree (there will be
# approx. 360 such rotations)
turtle.right(1.0)
# we use the copysign function to get the sign
# of turtle's x coordinate
x_sign_new = math.copysign(1, turtle.xcor())
if(x_sign_new != x_sign):
times_crossed_y += 1
x_sign = x_sign_new
return
circle(100)
print('finished')
turtle.done()
答案 1 :(得分:1)
嗯,一个完整的圆圈是360°,你打算转360次,所以每回合应该是:
right( 360 ° / 360 ), or
right(1)
行进的距离是一个圆周,或π*直径,所以你的前锋可能是:
forward( diameter * π / 360 )
我还没有测试过这个 - 尝试一下,看看它是如何工作的。
答案 2 :(得分:0)
这是第4章“思考Python”中的练习之一。本书的早期版本确实是一个可怕的练习,特别是在给出“提示”的情况下。我正在使用前进并离开这里,但你可以向右切换。
你应该有多边形函数:
def polygon(t, length, n):
for i in range(n):
bob.fd(length)
bob.lt(360 / n)
然后你创建一个圆函数:
def circle(t):
polygon(t, 1, 360)
这将绘制一个圆,不需要半径。乌龟前进1,然后离开1(360/360),360次。
然后,如果你想让圆圈更大,你可以计算圆的周长。提示说:
提示:弄清楚圆圈的周长并确保圆圈 长度* n =周长。
好的,所以圆周的公式= 2 * pi * radius。并且提示长度* n =周长。 n = 360(边数/度)。我们有周长,所以我们需要解决长度。
所以:
def circle(t, r):
circumference = 2 * 3.14 * r
length = circumference / 360
polygon(t, length, 360)
现在,用你想要的半径调用函数:
circle(bob, 200)