我正在使用 Python Turtles 使用forward()
and绘制一个圆圈right()
。
我有一个for
从 0 到 359 的循环,每次触发时,它都会将海龟向前移动 1 和向右 1。
但问题是我需要特定的直径。我几乎 100% 确定我需要使用 trig,但我尝试过无济于事。
我无法弄清楚数学如何做到这一点。我们应该使用forward()
and right()
, NOT circle()
。
谢谢!
我正在使用 Python Turtles 使用forward()
and绘制一个圆圈right()
。
我有一个for
从 0 到 359 的循环,每次触发时,它都会将海龟向前移动 1 和向右 1。
但问题是我需要特定的直径。我几乎 100% 确定我需要使用 trig,但我尝试过无济于事。
我无法弄清楚数学如何做到这一点。我们应该使用forward()
and right()
, NOT circle()
。
谢谢!
这是一个工作示例:
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()
嗯,一个完整的圆是 360°,你计划转 360 次,所以每个转应该是:
right( 360 ° / 360 ), or
right(1)
行进的距离将是一个圆周,或 π * 直径,所以你的前锋可能是:
forward( diameter * π / 360 )
我还没有对此进行测试——试一试,看看它是如何工作的。
这是第 4 章“Think 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 * 半径。提示说长度 * n = 周长。n = 360(边数/度数)。我们有周长,所以我们需要求解长度。
所以:
def circle(t, r):
circumference = 2 * 3.14 * r
length = circumference / 360
polygon(t, length, 360)
现在,使用您想要的任何半径调用该函数:
circle(bob, 200)