用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()
posted @ 2020-01-06 15:12  pypypypy  阅读(5334)  评论(0编辑  收藏  举报