1

我正在使用 Python Turtles 使用forward()and绘制一个圆圈right()

我有一个for从 0 到 359 的循环,每次触发时,它都会将海龟向前移动 1 和向右 1。

但问题是我需要特定的直径。我几乎 100% 确定我需要使用 trig,但我尝试过无济于事。

我无法弄清楚数学如何做到这一点。我们应该使用forward()and right(), NOT circle()

谢谢!

4

3 回答 3

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()
于 2013-10-27T22:37:22.043 回答
2

嗯,一个完整的圆是 360°,你计划转 360 次,所以每个转应该是:

right( 360 ° / 360 ), or
right(1)

行进的距离将是一个圆周,或 π * 直径,所以你的前锋可能是:

forward( diameter * π / 360 )

我还没有对此进行测试——试一试,看看它是如何工作的。

于 2013-09-10T18:08:00.733 回答
0

这是第 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)
于 2017-11-15T03:10:25.083 回答