Python使用Forward()绘制具有X半径的圆

时间:2013-09-10 18:01:49

标签: python turtle-graphics

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

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

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

我无法弄清楚如何做到这一点。我们应该使用forward()right(),而不是circle()

谢谢!

3 个答案:

答案 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)