用Python画一只兔子——turtle库circle画圆函数的详细用法介绍
周末学习了一下turtle库的基本函数,试着画了一只大耳朵小兔子,灵感来源是jellycat邦尼兔。turtle库中circle()函数用来画弧,但和通常先确定原点,再根据半径、夹角画弧的方法有所不同。使用之后,便能理解circle()函数的巧妙。收获是:边想边做边改胜过完美的空想。
绘制效果如图 :
在circle(radius,extent)函数中,参数radius取像素值、extent取角度的整数值,两参数均可取正负值。运行以下代码,可以直观地理解circle(radius,extent)函数参数正负值时的绘制特点:
1 python开发IT交流群:887934385 分享源码等相关资料 2 from turtle import * 3 pensize(5) 4 pencolor('green') 5 circle(100,90) 6 7 pu() 8 goto(0,0) 9 seth(0) 10 pd() 11 pencolor('orange') 12 circle(100,-90) 13 14 pu() 15 goto(0,0) 16 seth(0) 17 pd() 18 pencolor('blue') 19 circle(-100,90) 20 21 pu() 22 goto(0,0) 23 seth(0) 24 pd() 25 pencolor('red') 26 circle(-100,-90)
circle()函数以画笔当前方向(y')为y轴方向,以经过画笔当前绝对坐标(x0,假设y0=0)、垂直于y轴的方向为x轴方向,则圆心(即原点)坐标为(x0-radius=0,0),由当前画笔位置(x0,y0)为弧线起始点,画出extent角度的圆弧。
为了方便理解,我绘制了circle()函数的相对坐标体系,如下图:需要注意的是:radius为正时,圆心在当前位置左侧(如下图);radius为负时,圆心在当前位置右侧;extent为正时,顺画笔当前方向绘制,extent为负时,逆画笔当前方向绘制。
circle()函数可以以画笔当前位置为切点,画出与(画笔当前方向所在直线为)切线相切的任意圆弧。所以在绘制曲线时十分自由好用。抛下【用圆规先确定圆心再画圆】的惯常思维,慢慢使用便能理解circle()函数的巧妙。 以上为个人的学习理解,初识turtle,不当之处欢迎指正。
兔の绘图代码如下:
1 python开发IT交流群:887934385 分享源码等相关资料 2 #绘制大耳朵兔 3 from turtle import * 4 speed(10) 5 6 #小兔的面部 7 color('pink') 8 pensize(5) 9 circle(radius=100)#脸 10 11 #眼睛 12 pencolor('black') 13 #左眼 14 pu() 15 goto(-45,92) 16 pd() 17 begin_fill() 18 color((0,0,0),(0,0,0.1)) 19 circle(radius=15) 20 #右眼 21 pu() 22 goto(45,92) 23 pd() 24 circle(radius=15) 25 end_fill() 26 27 #鼻子 28 pu() 29 goto(20,60) 30 color('pink') 31 pd() 32 begin_fill() 33 goto(-20,60) 34 goto(0,45) 35 goto(20,60) 36 end_fill() 37 38 #嘴 39 goto(0,45) 40 goto(0,40) 41 seth(-90) 42 circle(10,120) 43 pu() 44 goto(0,40) 45 seth(-90) 46 pd() 47 circle(-10,120) 48 49 50 #小兔的耳朵 51 #左耳 52 pu() 53 goto(-60,180)# 54 seth(200) 55 pd() 56 circle(radius=350,extent=90) 57 goto(-98,110) 58 #右耳 59 pu() 60 goto(60,180)# 61 seth(-20) 62 pd() 63 circle(radius=-350,extent=90) 64 goto(98,110) 65 66 #小兔的身体 67 pu() 68 goto(20,3) 69 seth(-25) 70 pd() 71 circle(radius=-250,extent=25) 72 circle(radius=-135,extent=260) 73 seth(50) 74 circle(radius=-250,extent=25) 75 76 ##小兔的胳膊 77 #左臂 78 pu() 79 seth(180) 80 goto(-30,-3) 81 pd() 82 #小短胳膊 83 ##circle(radius=270,extent=20) 84 ##circle(radius=20,extent=190) 85 circle(radius=248,extent=30) 86 circle(radius=29,extent=185) 87 #右臂 88 pu() 89 seth(0) 90 goto(30,-3) 91 pd() 92 circle(radius=-248,extent=30) 93 circle(radius=-27,extent=184) 94 95 ##小兔的脚 96 ##左脚 97 pu() 98 goto(-162,-260)# 99 pd() 100 seth(0) 101 circle(radius=41) 102 #右脚 103 pu() 104 goto(164,-260) 105 pd() 106 circle(radius=41) 107 108 done()