周末學習了一下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()