Python二次封装画圆函数绘制彩色同心圆

liftword5个月前 (12-10)技术文章75

Python库默认的绘图circle函数绘制的圆是以当前海龟箭头方向左侧为圆心方向,y轴向上半径r的距离为圆心,绘制一个圆,这个方法不好用,每次都要算。学生课后问,是否可以使用圆心+半径的方法绘制,但是没有函数,只能自己封装一个。

思路如下:

(1)函数的参数(x,y,r)分别为圆心的坐标x和y,半径r。问题来了,可以用goto(X,Y)去圆心,但是导致绘图的圆心在y轴向上移动了r的距离,因此需要去goto(X,Y-r),这样就消除了半径的影响。

(2)箭头去圆心的时候,不知道箭头的方向,因此需要对海龟的箭头方法复位为0度,利用seth(0)函数。

(3)圆如果需要填充颜色,可以利用rgb模式传递颜色。

效果如下,代码如下:

import turtle
import random
#以(x,y)为圆心,画半径为r的圆,颜色为(cr,cg,cb)
def mycircle(x,y,r,cr,cg,cb):
    mytl1.penup()
    mytl1.goto(x,y-r)
    mytl1.seth(0)
    mytl1.pendown()
    mytl1.color(cr,cg,cb)
    mytl1.begin_fill()
    mytl1.circle(r)
    mytl1.end_fill()

mytl1=turtle.Turtle()
turtle.tracer(0) #画面顺完成
turtle.colormode(255) #颜色模式255的,RGB值
# mytl1.speed(0) #画面速度最快
# mytl1.hideturtle() #隐藏海龟箭头
mytl1.shape("turtle") #海龟形状

for i in range(10,0,-1):
    cr=random.randint(0,255) #随机颜色
    cg = random.randint(0, 255)
    cb= random.randint(0, 255)
    mycircle(60,60,i*20,cr,cg,cb)

mytl1.screen.mainloop()