使用Python海龟在没有circle函数的情况下画圆

Qui*_*inn 5 python geometry turtle-graphics

我有这个学校作业:

\n\n

不用乌龟circle函数堆雪人

\n\n

雪人应该在蓝色背景上,并且应该用白色填充。

\n\n

雪人的轮廓应该是黑色的。

\n\n

雪人\xe2\x80\x99s 的身体应该由 3 个实心圆圈组成。

\n\n

每个圆圈的轮廓应为 3 像素宽。

\n\n

底部圆的半径应为 100 像素。

\n\n

中间圆的半径应为 70 像素。

\n\n

顶部圆圈的半径应为 40 像素。

\n\n

每个圆圈应位于其下方圆圈上方的中心(底部圆圈除外,它可以位于任何位置)。

\n\n

圆圈之间不应有间隙。

\n\n

给雪人一个嘴巴、眼睛和鼻子(帽子是可选的)。

\n\n

确保每只手都有两个棍臂和至少两个手指。

\n\n

到目前为止,我创建了这个,但在继续之前我似乎无法正确获取圆圈。\n而且,不知道如何在圆圈中着色或为眼睛制作点。请帮助我,第一次编码。

\n\n
import turtle                               # allows us to use turtle library\nwn = turtle.Screen()                        # allows us to create a graphics window\nwn.bgcolor("blue")                          # sets gtaphics windows background color to blue\nimport math                                 # allows us to use math functions\nquinn = turtle.Turtle()                     # sets up turtle quinn\nquinn.setpos(0,0)\nquinn.pensize(3)\nquinn.up()\n\n# drawing first circle middle\nquinn.forward(70)\nquinn.down()\nquinn.left(90)\n\n# calculation of cicumference of a circle\na = (math.pi*140.00/360)\n\n#itineration for first circle\nfor i in range (1,361,1):\n    quinn.left(a)\n    quinn.forward (1)\n\n# drawing second circle bottom\nquinn.up()\nquinn.home()\nquinn.right(90)\nquinn.forward(70)\nquinn.left(90)\nquinn.down()\n\nb = (math.pi*200.00/360)\n\nfor i in range (1,361,1):\n    quinn.right(b)\n    quinn.forward(1)\n\n# drawing third circle head top\n\nquinn.up ()\nquinn.goto(0,70)\nquinn.right(90)\nquinn.down()\n\nc =(math.pi*80/360)\n\nfor i in range (1,361,1):\n    quinn.left(c)\n    quinn.forward(1)\n\nwn.exitonclick()\n
Run Code Online (Sandbox Code Playgroud)\n

gma*_*s80 2

下面是一个绘制蓝色圆圈的示例函数:

def draw_circle(radius):    
    turtle.up()
    turtle.goto(0,radius) # go to (0, radius)
    turtle.begin_fill() # start fill
    turtle.down() # pen down
    turtle.color('blue')
    times_y_crossed = 0
    x_sign = 1.0
    while times_y_crossed <= 1:
        turtle.forward(2*math.pi*radius/360.0) # move by 1/360
        turtle.right(1.0)
        x_sign_new = math.copysign(1, turtle.xcor())        
        if(x_sign_new != x_sign):
            times_y_crossed += 1
        x_sign = x_sign_new
    turtle.up() # pen up
    turtle.end_fill() # end fill.
    return
Run Code Online (Sandbox Code Playgroud)

然后你可以修改上面的函数,添加圆心位置(x,y)的参数:

def draw_circle(radius, x, y):    
    turtle.up()
    turtle.goto(x,y+radius) # go to (x, y + radius)
    turtle.begin_fill() # start fill
    turtle.down() # pen down
    turtle.color('blue')
    times_y_crossed = 0
    x_sign = 1.0
    while times_y_crossed <= 1:
        turtle.forward(2*math.pi*radius/360.0) # move by 1/360
        turtle.right(1.0)
        x_sign_new = math.copysign(1, turtle.xcor())        
        if(x_sign_new != x_sign):
            times_y_crossed += 1
        x_sign = x_sign_new
    turtle.up() # pen up
    turtle.end_fill() # end fill.
    return
Run Code Online (Sandbox Code Playgroud)

您可以轻松添加点,例如:

turtle.goto(-20,10)
turtle.color('red')
turtle.dot(20)
turtle.goto(40,10)
turtle.dot(20)
Run Code Online (Sandbox Code Playgroud)

放在一起:

import turtle
import math

def draw_circle(radius, x, y):    
    turtle.up()
    turtle.goto(x,y+radius) # go to (0, radius)
    turtle.begin_fill() # start fill
    turtle.down() # pen down
    turtle.color('blue')
    times_y_crossed = 0
    x_sign = 1.0
    while times_y_crossed <= 1:
        turtle.forward(2*math.pi*radius/360.0) # move by 1/360
        turtle.right(1.0)
        x_sign_new = math.copysign(1, turtle.xcor())        
        if(x_sign_new != x_sign):
            times_y_crossed += 1
        x_sign = x_sign_new
    turtle.up() # pen up
    turtle.end_fill() # end fill.
    return


draw_circle(100, 10, 10)
turtle.goto(-20,10)
turtle.color('red')
turtle.dot(20)
turtle.goto(40,10)
turtle.dot(20)
turtle.pen(shown=False)
turtle.done()
Run Code Online (Sandbox Code Playgroud)

你应该尝试自己完成作业的剩余部分..;)