情人节,我表白了CSDN小姐姐后,竟然...【为表白写了一个绘图工具,让我不再手残】
情人節(jié),我表白了CSDN小姐姐后,竟然…竟然有人看了這篇文。
以下圖片素材由一個(gè)還沒(méi)寫(xiě)完的工具繪制,稍后會(huì)放在CSDN的代碼倉(cāng)庫(kù)(現(xiàn)在能用了,還沒(méi)時(shí)間改,顏色填充算法還沒(méi)寫(xiě),有能力的朋友可以修改一下):https://codechina.csdn.net/A757291228/draw_pixel/-/tree/master
無(wú)情!竟然告訴我有情人節(jié)活動(dòng)
很快呀,啪的一下又一年情人節(jié)又來(lái)了,本來(lái)我壓根記不住的,但是CSDN竟然告訴我有情人節(jié)活動(dòng)。怎么辦?這不能忍,那就只能表白CSDN的小姐姐了。你們要不要一起表白?評(píng)論區(qū)一起表白吧!
表白肯定要寫(xiě)寫(xiě)情書(shū)了。結(jié)果…一看征文字?jǐn)?shù)要求,竟然600字!你是看不起我嗎?
一封情書(shū)根本用不到600字,我200字就寫(xiě)完了。為什么才寫(xiě)200字?不要問(wèn),問(wèn)就是是寫(xiě)不出來(lái)600字。
我們要表白哪個(gè)小姐姐?
這還要想?當(dāng)然是全都要了!小孩子才做選擇。
例如小婷婷、小慧慧,這可都是集美貌、才華于一身的女子。
沉魚(yú)落雁 小婷婷 閉月羞花 小慧慧
小婷婷是誰(shuí)?小婷婷就是前幾天博客之星直播中的主持之一!還記得的彈幕中刷屏的“小婷露臉 流量百萬(wàn)”嗎?在CSDN社群中有一個(gè)付費(fèi)專(zhuān)欄群,小婷婷可是付費(fèi)專(zhuān)欄群中的第一女神。只要小婷婷在線(xiàn),群里必是最熱鬧的時(shí)候。
那小慧慧又是誰(shuí)?在微信群中,有一個(gè)經(jīng)常公布信息,到處活躍的運(yùn)營(yíng)還記得嗎?名字叫做CSDN博客。她就是小慧慧。小慧慧時(shí)而性格溫柔,時(shí)而高冷,就像一個(gè)冰雪女王!氣質(zhì)十足!
那怎么樣表白這兩個(gè)小姐姐呢?當(dāng)然是…寫(xiě)!代!碼!生為一個(gè)程序直男一定要把這優(yōu)點(diǎn)發(fā)揚(yáng)光大!
表白CSDN來(lái)一幅圖~
顏色填充還沒(méi)寫(xiě)完,不然肯定這圖片是漂漂亮亮dev~
一、技術(shù)實(shí)現(xiàn)(這個(gè)工具我本人會(huì)不斷的迭代更新,包括素材繪制邏輯,因?yàn)槲乙脕?lái)畫(huà)自媒體素材)
畢竟是要畫(huà)畫(huà),首選比較簡(jiǎn)單的那就是turtle了。但是turtle畫(huà)東西好麻煩,本身自己就是個(gè)手殘黨,線(xiàn)條都不懂怎么弄。那怎么辦?那我們就是用“俄羅斯方塊”的畫(huà)法吧,那就是疊積木~
我們以方塊作為線(xiàn)條,進(jìn)行堆疊就可以完成了。
1.1 完成點(diǎn)繪制
我們先引入turtle庫(kù),然后新建一個(gè)類(lèi),名為core:
from turtle import *class Core:隨后新建一個(gè)core類(lèi)的方法point,作為基本的方塊點(diǎn),作為一個(gè)線(xiàn)條的基本單位:
'''設(shè)置'''#填充顏色色值#@fcolor=點(diǎn)填充顏色def fillcolor_set(self,fcolor="black"):fillcolor(fcolor)#筆桿顏色設(shè)置#@fcolor=點(diǎn)填充顏色#@pcolor=線(xiàn)顏色def pencolor_set(self,fcolor="black",pcolor="1"):if pcolor=="1":pcolor=fcolorpencolor(pcolor)else:pencolor(pcolor)#筆桿尺寸#@psize=線(xiàn)尺寸def pensize_set(self,psize=1):pensize(psize)#繪制點(diǎn)#@plenght=點(diǎn)長(zhǎng)度#@fcolor=點(diǎn)填充顏色#@pcolor=線(xiàn)顏色#@psize=線(xiàn)尺寸def point(self,plenght=10,fcolor="black",pcolor="1",psize=1):poslist=[]self.fillcolor_set(fcolor)self.pencolor_set(fcolor,pcolor)self.pensize_set(psize)begin_fill()for i in range(0,4):poslist.append(pos())fd(plenght)right(90)end_fill()return poslistpoint方法默認(rèn)plenght為10。也就是說(shuō)基本方塊為一個(gè)正方形,長(zhǎng)寬都為plenght;fcolor為填充的顏色,默認(rèn)為黑色;pcolor為線(xiàn)條的顏色,其實(shí)也就是pen color;psize為相對(duì)應(yīng)的筆的粗細(xì)。
在方法中,我們使用poslist記錄我們點(diǎn)的每次繪制的位置,這樣的話(huà)我們?cè)谀承r(shí)候就可以使用poslist來(lái)進(jìn)行精確定位了。我們?cè)偻ㄟ^(guò)fillcolor_set、pencolor_set、pensize_set方法來(lái)設(shè)置填充色、線(xiàn)條色、現(xiàn)調(diào)大小。
在正式繪制方塊時(shí)開(kāi)啟填充使用begin_fill方法,隨后開(kāi)始繪制一個(gè)“點(diǎn)”。這個(gè)“點(diǎn)”的繪制也是非常簡(jiǎn)單,直接循環(huán)4次,畫(huà)出一個(gè)矩形即可。并且使用pos方法獲取當(dāng)前的坐標(biāo),隨后結(jié)束繪制“點(diǎn)”后使用end_fill方法進(jìn)行顏色填充。
這樣一個(gè)點(diǎn)繪制的方法就完成了。
1.2 完成線(xiàn)段的繪制
點(diǎn)繪制完了接下來(lái)我們就需要繪制線(xiàn)了。線(xiàn)從點(diǎn)的基礎(chǔ)上進(jìn)行堆疊,并排排列那就是線(xiàn)。線(xiàn)的方向可以是上下左右,我們可以通過(guò)參數(shù)傳遞從而控制線(xiàn)段繪制方向,并且還可以使用對(duì)稱(chēng)方法,讓我們減少繪制難度。對(duì)于對(duì)稱(chēng)來(lái)說(shuō),也有上下左右基于某個(gè)中心點(diǎn)的進(jìn)行的中心對(duì)稱(chēng)。
代碼如下:
以上代碼我們主要看line方法。line方法參數(shù)plenght為需要傳入的點(diǎn)的邊長(zhǎng)大小,lenght為這個(gè)線(xiàn)有多長(zhǎng);direction為需要從哪邊開(kāi)始繪制,從左到右繪制,還是從上到下繪制;symmetrical為對(duì)稱(chēng)的位置,symmetrical_direction表示是左右對(duì)稱(chēng),還是右坐對(duì)稱(chēng);symmetrical_direction默認(rèn)為右,表示左邊的繪制線(xiàn)段,將會(huì)鏡像到左側(cè),若symmetrical為10,那么對(duì)稱(chēng)位置就是10*邊長(zhǎng)大小為對(duì)稱(chēng)位置。
我們接下來(lái)看line方法中的代碼,其中symmetrical_point默認(rèn)為f,若symmetrical傳入?yún)?shù)則表示有對(duì)稱(chēng)需求,這時(shí)將會(huì)通過(guò)傳入對(duì)稱(chēng)位置從而計(jì)算x與y的坐標(biāo):
symmetrical_point="f"if symmetrical!="f":if symmetrical_direction=="right":symmetrical_point=pos()+(int(symmetrical)*plenght,0)elif symmetrical_direction=="left":symmetrical_point=pos()+(-int(symmetrical)*plenght,0)elif symmetrical_direction=="up":symmetrical_point=pos()+(0,int(symmetrical)*plenght)elif symmetrical_direction=="down":symmetrical_point=pos()+(0,-int(symmetrical)*plenght)其中左右對(duì)稱(chēng),那么就是左右兩邊x的正負(fù),如果是上下對(duì)稱(chēng)則需要對(duì)y進(jìn)行操作,上對(duì)稱(chēng)y則正,下對(duì)稱(chēng)則y負(fù)。隨后我們開(kāi)始進(jìn)行循環(huán)點(diǎn)的個(gè)數(shù),多長(zhǎng)就循環(huán)多少次:
for i in range(0,lenght):posdict['point'+str(i)]=self.point(plenght=plenght,fcolor=fcolor,pcolor=pcolor,psize=psize)self.line_control_func_draw_move(i,direction,lenght,plenght)以上代碼主要查看line_control_func_draw_move方法。line_control_func_draw_move作為控制線(xiàn)段繪制的方法,而point就直接繪制出一個(gè)點(diǎn),如何使繪制開(kāi)始位置進(jìn)行控制,就需要查看line_control_func_draw_move:
def line_control_func_draw_move(self,cout_i,direction,lenght,plenght):if cout_i!=(lenght-1):if direction=="right":self.loc_goto((plenght,0))elif direction=="left":self.loc_goto((-plenght,0))elif direction=="up":self.loc_goto((0,plenght))elif direction=="down":self.loc_goto((0,-plenght))elif cout_i==(lenght-1):if direction=="left":self.loc_goto((plenght,0))if direction=="up":self.loc_goto((0,-plenght))line_control_func_draw_move中,如果是從左往右繪制,只需要通過(guò)loc_goto方法直接跳轉(zhuǎn)到當(dāng)前位置增加1個(gè)基本單位plenght處即可完成下一個(gè)繪制位置的控制,loc_goto方法如下:
#跳轉(zhuǎn)def loc_goto(self,movepos):penup()goto(pos()+movepos)pendown()最后,我們查看對(duì)稱(chēng)線(xiàn)段的如何繪制,代碼如下:
if symmetrical!="f":self.goto_(symmetrical_point)posdict['symmetrical_point']=self.line(lenght=lenght,plenght=plenght,direction=direction,fcolor=fcolor,pcolor=pcolor,psize=psize,symmetrical="f")self.goto_(posdict['point'+str(lenght-1)][3])其實(shí)對(duì)稱(chēng)線(xiàn)段繪制就很簡(jiǎn)單了,直接傳入需要從哪個(gè)點(diǎn)開(kāi)始繪制,隨后調(diào)用line方法就可以了,這個(gè)時(shí)候關(guān)閉對(duì)稱(chēng)參數(shù)即可。
1.3 完成階梯的繪制
在方塊堆疊的實(shí)現(xiàn)的內(nèi)容中,繪制出來(lái)的效果更像是馬賽克風(fēng)格的圖像,那么階梯的繪制是較為常見(jiàn)的。代碼如下:
#step方法的繪圖跳轉(zhuǎn)控制#@lenght=總長(zhǎng)#@blenght=bit一個(gè)位長(zhǎng)度#@plenght=點(diǎn)長(zhǎng)度#@direction1=橫線(xiàn)繪制方向#@direction2=豎線(xiàn)繪制方向#@fcolor=填充顏色#@pcolor=筆顏色#@psize=筆大小#@gotopos=如何跳轉(zhuǎn)pos位置#@cout_i=循環(huán)控制變量idef step_control_func_draw_move(self,lenght,blenght,plenght,direction1,direction2,fcolor,pcolor,psize,gotopos1,gotopos2,cout_i,height):print('-----------',blenght)posdict={}posdict['line'+str(cout_i)]=self.line(lenght=blenght,plenght=plenght,direction=direction1,fcolor=fcolor,pcolor=pcolor,psize=psize)self.loc_goto(gotopos1)posdict['vline'+str(cout_i)]=self.line(lenght=height,plenght=plenght,direction=direction2,fcolor=fcolor,pcolor=pcolor,psize=psize)if cout_i!=(lenght-1):self.loc_goto(gotopos2)return posdict#繪制線(xiàn)段#@lenght=線(xiàn)長(zhǎng)度#@height=線(xiàn)高度#@blenght=bit一個(gè)位長(zhǎng)度#@plenght=點(diǎn)長(zhǎng)度#@fcolor=點(diǎn)填充顏色#@pcolor=線(xiàn)顏色#@psize=線(xiàn)尺寸def step(self,lenght=1,height=1,blenght=1,plenght=10,direction="right",fcolor="black",pcolor="1",psize=1,symmetrical="f",symmetrical_direction="right"):posdict={}symmetrical_point="f"symmetrical_draw_direction=''if symmetrical!="f":if symmetrical_direction=="right":symmetrical_point=pos()+(int(symmetrical)*plenght,0)if direction=="right":symmetrical_draw_direction="left"elif direction=="left":symmetrical_draw_direction="right"elif direction=="rightdown":symmetrical_draw_direction="leftdown"elif direction=="leftdown":symmetrical_draw_direction="rightdown"elif symmetrical_direction=="left":symmetrical_point=pos()+(-int(symmetrical)*plenght,0)if direction=="right":symmetrical_draw_direction="left"elif direction=="left":symmetrical_draw_direction="right"elif direction=="rightdown":symmetrical_draw_direction="leftdown"elif direction=="leftdown":symmetrical_draw_direction="rightdown"elif symmetrical_direction=="rightdown":symmetrical_point=pos()+(0,int(symmetrical)*plenght)if direction=="right":symmetrical_draw_direction="left"elif direction=="left":symmetrical_draw_direction="right"elif direction=="rightdown":symmetrical_draw_direction="leftdown"elif direction=="leftdown":symmetrical_draw_direction="rightdown"elif symmetrical_direction=="leftdown":symmetrical_point=pos()+(0,-int(symmetrical)*plenght)if direction=="right":symmetrical_draw_direction="left"elif direction=="left":symmetrical_draw_direction="right"elif direction=="rightdown":symmetrical_draw_direction="leftdown"elif direction=="leftdown":symmetrical_draw_direction="rightdown"for i in range(0,lenght):if direction=="right":posdict["step"+str(i)]=self.step_control_func_draw_move(lenght,blenght,plenght,direction,"up",fcolor,pcolor,psize,(plenght,plenght),(plenght,plenght*2),i,height)elif direction=="left":posdict["step"+str(i)]=self.step_control_func_draw_move(lenght,blenght,plenght,"left","up",fcolor,pcolor,psize,(-plenght*2,plenght),(-plenght,plenght*2),i,height)elif direction=="rightdown":posdict["step"+str(i)]=self.step_control_func_draw_move(lenght,blenght,plenght,"right","down",fcolor,pcolor,psize,(plenght,-plenght),(plenght,-plenght),i,height)elif direction=="leftdown":posdict["step"+str(i)]=self.step_control_func_draw_move(lenght,blenght,plenght,"left","down",fcolor,pcolor,psize,(-plenght*2,-plenght),(-plenght,-plenght),i,height)#對(duì)稱(chēng)if symmetrical!="f":self.goto_(symmetrical_point)posdict['symmetrical_step']=self.step(lenght=lenght,height=height,blenght=blenght,plenght=plenght,direction=symmetrical_draw_direction,fcolor=fcolor,pcolor=pcolor,psize=psize)print(posdict)self.goto_(posdict['step'+str(lenght-1)]['vline'+str(lenght-1)]['point'+str(height-1)][0])return posdict其實(shí)階梯的繪制方法跟線(xiàn)段原理是一致的。首先看一下繪制控制:
for i in range(0,lenght):if direction=="right":posdict["step"+str(i)]=self.step_control_func_draw_move(lenght,blenght,plenght,direction,"up",fcolor,pcolor,psize,(plenght,plenght),(plenght,plenght*2),i,height)elif direction=="left":posdict["step"+str(i)]=self.step_control_func_draw_move(lenght,blenght,plenght,"left","up",fcolor,pcolor,psize,(-plenght*2,plenght),(-plenght,plenght*2),i,height)elif direction=="rightdown":posdict["step"+str(i)]=self.step_control_func_draw_move(lenght,blenght,plenght,"right","down",fcolor,pcolor,psize,(plenght,-plenght),(plenght,-plenght),i,height)elif direction=="leftdown":posdict["step"+str(i)]=self.step_control_func_draw_move(lenght,blenght,plenght,"left","down",fcolor,pcolor,psize,(-plenght*2,-plenght),(-plenght,-plenght),i,height)階梯的繪制方向我們有左上、左下、右上和右下,這個(gè)時(shí)候直接判斷繪制內(nèi)容,隨后使用控制方法控制即可:
#step方法的繪圖跳轉(zhuǎn)控制#@lenght=總長(zhǎng)#@blenght=bit一個(gè)位長(zhǎng)度#@plenght=點(diǎn)長(zhǎng)度#@direction1=橫線(xiàn)繪制方向#@direction2=豎線(xiàn)繪制方向#@fcolor=填充顏色#@pcolor=筆顏色#@psize=筆大小#@gotopos=如何跳轉(zhuǎn)pos位置#@cout_i=循環(huán)控制變量idef step_control_func_draw_move(self,lenght,blenght,plenght,direction1,direction2,fcolor,pcolor,psize,gotopos1,gotopos2,cout_i,height):print('-----------',blenght)posdict={}posdict['line'+str(cout_i)]=self.line(lenght=blenght,plenght=plenght,direction=direction1,fcolor=fcolor,pcolor=pcolor,psize=psize)self.loc_goto(gotopos1)posdict['vline'+str(cout_i)]=self.line(lenght=height,plenght=plenght,direction=direction2,fcolor=fcolor,pcolor=pcolor,psize=psize)if cout_i!=(lenght-1):self.loc_goto(gotopos2)return posdict控制方法此時(shí)就不像線(xiàn)段那樣只移動(dòng)一個(gè)坐標(biāo)位置,階梯需要x和y坐標(biāo)都進(jìn)行增刪才可以實(shí)現(xiàn),同理可得就不再贅述內(nèi)容了。
1.4完整的core類(lèi)代碼
至此,完整的core類(lèi)基本代碼就已經(jīng)寫(xiě)完了,代碼如下:
from turtle import *class Core:'''設(shè)置'''#填充顏色色值#@fcolor=點(diǎn)填充顏色def fillcolor_set(self,fcolor="black"):fillcolor(fcolor)#筆桿顏色設(shè)置#@fcolor=點(diǎn)填充顏色#@pcolor=線(xiàn)顏色def pencolor_set(self,fcolor="black",pcolor="1"):if pcolor=="1":pcolor=fcolorpencolor(pcolor)else:pencolor(pcolor)#筆桿尺寸#@psize=線(xiàn)尺寸def pensize_set(self,psize=1):pensize(psize)'''other func '''#跳轉(zhuǎn)def loc_goto(self,movepos):penup()goto(pos()+movepos)pendown()def goto_(self,pos_):penup()goto(pos_)pendown()#line方法的繪圖跳轉(zhuǎn)控制def line_control_func_draw_move(self,cout_i,direction,lenght,plenght):if cout_i!=(lenght-1):if direction=="right":self.loc_goto((plenght,0))elif direction=="left":self.loc_goto((-plenght,0))elif direction=="up":self.loc_goto((0,plenght))elif direction=="down":self.loc_goto((0,-plenght))elif cout_i==(lenght-1):if direction=="left":self.loc_goto((plenght,0))if direction=="up":self.loc_goto((0,-plenght))#step方法的繪圖跳轉(zhuǎn)控制#@lenght=總長(zhǎng)#@blenght=bit一個(gè)位長(zhǎng)度#@plenght=點(diǎn)長(zhǎng)度#@direction1=橫線(xiàn)繪制方向#@direction2=豎線(xiàn)繪制方向#@fcolor=填充顏色#@pcolor=筆顏色#@psize=筆大小#@gotopos=如何跳轉(zhuǎn)pos位置#@cout_i=循環(huán)控制變量idef step_control_func_draw_move(self,lenght,blenght,plenght,direction1,direction2,fcolor,pcolor,psize,gotopos1,gotopos2,cout_i,height):print('-----------',blenght)posdict={}posdict['line'+str(cout_i)]=self.line(lenght=blenght,plenght=plenght,direction=direction1,fcolor=fcolor,pcolor=pcolor,psize=psize)self.loc_goto(gotopos1)posdict['vline'+str(cout_i)]=self.line(lenght=height,plenght=plenght,direction=direction2,fcolor=fcolor,pcolor=pcolor,psize=psize)if cout_i!=(lenght-1):self.loc_goto(gotopos2)return posdict'''繪制'''#繪制點(diǎn)#@plenght=點(diǎn)長(zhǎng)度#@fcolor=點(diǎn)填充顏色#@pcolor=線(xiàn)顏色#@psize=線(xiàn)尺寸def point(self,plenght=10,fcolor="black",pcolor="1",psize=1):poslist=[]self.fillcolor_set(fcolor)self.pencolor_set(fcolor,pcolor)self.pensize_set(psize)begin_fill()for i in range(0,4):poslist.append(pos())fd(plenght)right(90)end_fill()return poslist#繪制線(xiàn)段#@lenght=線(xiàn)長(zhǎng)度#@plenght=點(diǎn)長(zhǎng)度#@fcolor=點(diǎn)填充顏色#@pcolor=線(xiàn)顏色#@psize=線(xiàn)尺寸def line(self,lenght=1,plenght=10,direction="right",fcolor="white",pcolor="1",psize=1,symmetrical="f",symmetrical_direction="right"):posdict={}symmetrical_point="f"if symmetrical!="f":if symmetrical_direction=="right":symmetrical_point=pos()+(int(symmetrical)*plenght,0)elif symmetrical_direction=="left":symmetrical_point=pos()+(-int(symmetrical)*plenght,0)elif symmetrical_direction=="up":symmetrical_point=pos()+(0,int(symmetrical)*plenght)elif symmetrical_direction=="down":symmetrical_point=pos()+(0,-int(symmetrical)*plenght)for i in range(0,lenght):posdict['point'+str(i)]=self.point(plenght=plenght,fcolor=fcolor,pcolor=pcolor,psize=psize)self.line_control_func_draw_move(i,direction,lenght,plenght)if symmetrical!="f":self.goto_(symmetrical_point)posdict['symmetrical_point']=self.line(lenght=lenght,plenght=plenght,direction=direction,fcolor=fcolor,pcolor=pcolor,psize=psize,symmetrical="f")self.goto_(posdict['point'+str(lenght-1)][3])return posdict #繪制線(xiàn)段#@lenght=線(xiàn)長(zhǎng)度#@height=線(xiàn)高度#@blenght=bit一個(gè)位長(zhǎng)度#@plenght=點(diǎn)長(zhǎng)度#@fcolor=點(diǎn)填充顏色#@pcolor=線(xiàn)顏色#@psize=線(xiàn)尺寸def step(self,lenght=1,height=1,blenght=1,plenght=10,direction="right",fcolor="black",pcolor="1",psize=1,symmetrical="f",symmetrical_direction="right"):posdict={}symmetrical_point="f"symmetrical_draw_direction=''if symmetrical!="f":if symmetrical_direction=="right":symmetrical_point=pos()+(int(symmetrical)*plenght,0)if direction=="right":symmetrical_draw_direction="left"elif direction=="left":symmetrical_draw_direction="right"elif direction=="rightdown":symmetrical_draw_direction="leftdown"elif direction=="leftdown":symmetrical_draw_direction="rightdown"elif symmetrical_direction=="left":symmetrical_point=pos()+(-int(symmetrical)*plenght,0)if direction=="right":symmetrical_draw_direction="left"elif direction=="left":symmetrical_draw_direction="right"elif direction=="rightdown":symmetrical_draw_direction="leftdown"elif direction=="leftdown":symmetrical_draw_direction="rightdown"elif symmetrical_direction=="rightdown":symmetrical_point=pos()+(0,int(symmetrical)*plenght)if direction=="right":symmetrical_draw_direction="left"elif direction=="left":symmetrical_draw_direction="right"elif direction=="rightdown":symmetrical_draw_direction="leftdown"elif direction=="leftdown":symmetrical_draw_direction="rightdown"elif symmetrical_direction=="leftdown":symmetrical_point=pos()+(0,-int(symmetrical)*plenght)if direction=="right":symmetrical_draw_direction="left"elif direction=="left":symmetrical_draw_direction="right"elif direction=="rightdown":symmetrical_draw_direction="leftdown"elif direction=="leftdown":symmetrical_draw_direction="rightdown"for i in range(0,lenght):if direction=="right":posdict["step"+str(i)]=self.step_control_func_draw_move(lenght,blenght,plenght,direction,"up",fcolor,pcolor,psize,(plenght,plenght),(plenght,plenght*2),i,height)elif direction=="left":posdict["step"+str(i)]=self.step_control_func_draw_move(lenght,blenght,plenght,"left","up",fcolor,pcolor,psize,(-plenght*2,plenght),(-plenght,plenght*2),i,height)elif direction=="rightdown":posdict["step"+str(i)]=self.step_control_func_draw_move(lenght,blenght,plenght,"right","down",fcolor,pcolor,psize,(plenght,-plenght),(plenght,-plenght),i,height)elif direction=="leftdown":posdict["step"+str(i)]=self.step_control_func_draw_move(lenght,blenght,plenght,"left","down",fcolor,pcolor,psize,(-plenght*2,-plenght),(-plenght,-plenght),i,height)#對(duì)稱(chēng)if symmetrical!="f":self.goto_(symmetrical_point)posdict['symmetrical_step']=self.step(lenght=lenght,height=height,blenght=blenght,plenght=plenght,direction=symmetrical_draw_direction,fcolor=fcolor,pcolor=pcolor,psize=psize)print(posdict)self.goto_(posdict['step'+str(lenght-1)]['vline'+str(lenght-1)]['point'+str(height-1)][0])return posdict1.5再次封裝,邏輯繪圖
但是我們的繪制方法需要自己敲代碼,是不是覺(jué)得很麻煩?我們那么懶,那么就再寫(xiě)個(gè)方法封裝一下,讓我們直接使用比較輕松的方式進(jìn)行線(xiàn)段繪制吧。新建一個(gè)文件,叫做drawTools,引入core類(lèi)以及turtle:
from core import Core from turtle import *我們新建一個(gè)類(lèi),繼承Core,叫做Tools:
class Tools(Core):我們甚至可以直接做輔助線(xiàn),如何做?很簡(jiǎn)單,畫(huà)格子就可以了,直接把輔助線(xiàn)的繪制方法寫(xiě)在init方法中吧:
init接收2個(gè)參數(shù),一個(gè)是open,決定是否開(kāi)啟輔助線(xiàn),helperline則是輔助線(xiàn)的顏色。
我們首先需要獲取整個(gè)canvas畫(huà)布的長(zhǎng)寬,以及我們輔助線(xiàn)可以有多長(zhǎng),還有就是左上角繪制起始點(diǎn)的位置,隨后跳到該位置準(zhǔn)備進(jìn)行繪制:
隨后就是簡(jiǎn)單的代碼進(jìn)行畫(huà)格子了,為了比較清晰,我們可以分別用不同顏色進(jìn)行區(qū)分:
if open==True:for l in range(lines):nowpos=pos()-(0,0)self.line(rows,10,pcolor=helperline)topy-=10self.goto_((leftx,topy))qx,qy=-160,160self.goto_((qx,qy))for l in range(32):nowpos=pos()-(0,0)self.line(32,10,pcolor="blue")qy-=10self.goto_((qx,qy))qx,qy=-80,80self.goto_((qx,qy))for l in range(16):nowpos=pos()-(0,0)self.line(16,10,pcolor="green")qy-=10self.goto_((qx,qy))qx,qy=-20,20self.goto_((qx,qy))for l in range(4):nowpos=pos()-(0,0)self.line(4,10,pcolor="red")qy-=10self.goto_((qx,qy))self.goto_((0,0))以上代碼中的qx,qy則是到達(dá)該區(qū)域后進(jìn)行的不同顏色的繪制,代碼沒(méi)有優(yōu)化,所以就將就著看著吧。(可以用我就懶了,哈哈哈)最后跳轉(zhuǎn)到0,0中心點(diǎn)。
那么接下來(lái)我們需要使用比較簡(jiǎn)單的方式進(jìn)行繪制內(nèi)容了。新建一個(gè)方法叫做drawlines:
#繪制線(xiàn)段 'length:2;direction:down;fcolor:black;pos:(0,-100);symmetrical:13'def drawlines(self,drawcon=[],startpos=(0,0)):for c in drawcon:c_val=c.split(';')length=0direction=''fcolor=''posv=Nonesymmetrical='f'symmetrical_direction="right"line_type='line'for v in c_val:demens=v.split(':')if demens[0]=='length':length=int(demens[1])elif demens[0]=='direction':direction=demens[1]elif demens[0]=='fcolor':fcolor=demens[1]elif demens[0]=='pos':posval=demens[1].split(',')posv=(int(posval[0])+startpos[0],int(posval[1])+startpos[1])elif demens[0]=='symmetrical':symmetrical=int(demens[1])elif demens[0]=='symmetrical_direction':symmetrical_direction=demens[1]elif demens[0]=='line_type':line_type=demens[1]self.goto_(posv)if line_type=='line':self.line(length,fcolor=fcolor,direction=direction,symmetrical=symmetrical,symmetrical_direction=symmetrical_direction)接收參數(shù)drawcon為一個(gè)列表,列表里面包含了繪制邏輯,繪制邏輯示例為:length:2;direction:down;fcolor:black;pos:(0,-100);symmetrical:13,length表示長(zhǎng)度多少,direction表示從繪制點(diǎn)往下畫(huà)還是往左、往右、往上畫(huà),fcolor為填充顏色yay,pos為其實(shí)繪制點(diǎn),symmetrical表示對(duì)稱(chēng)位置,默認(rèn)對(duì)稱(chēng)為右對(duì)稱(chēng)鏡像。
我們的命令是使用分號(hào)進(jìn)行分隔,由于我們的一張圖片不止一條線(xiàn)段,所以我們直接使用循環(huán)遍歷列表的內(nèi)容。遍歷內(nèi)容時(shí),使用split分隔字符即可。
以上一些變量是作為局部變量方便接下來(lái)使用而已,用法基礎(chǔ),內(nèi)容就不再贅述了。隨后使用分號(hào)進(jìn)行分隔后得到一組一組的數(shù)據(jù),例如length:2、direction:down…他們之間使用的是冒號(hào)進(jìn)行分隔,那么再遍歷內(nèi)容,進(jìn)行冒號(hào)分隔即可。這個(gè)時(shí)候獲取他們的第0維度的文本就可以知道是什么數(shù)據(jù)了,隨后使用局部變量賦值,最后傳入到line方法中,這樣的話(huà)就可以通過(guò)字符串形式調(diào)用lline方法了,而且及其簡(jiǎn)單:
for v in c_val:demens=v.split(':')if demens[0]=='length':length=int(demens[1])elif demens[0]=='direction':direction=demens[1]elif demens[0]=='fcolor':fcolor=demens[1]elif demens[0]=='pos':posval=demens[1].split(',')posv=(int(posval[0])+startpos[0],int(posval[1])+startpos[1])elif demens[0]=='symmetrical':symmetrical=int(demens[1])elif demens[0]=='symmetrical_direction':symmetrical_direction=demens[1]elif demens[0]=='line_type':line_type=demens[1]self.goto_(posv)if line_type=='line':self.line(length,fcolor=fcolor,direction=direction,symmetrical=symmetrical,symmetrical_direction=symmetrical_direction)1.6完整的邏輯繪圖類(lèi)代碼
這個(gè)時(shí)候再次封裝將會(huì)使我們的代碼變得十分簡(jiǎn)單。完整的代碼如下:
from core import Core from turtle import *class Tools(Core):width,height=0,0def __init__(self,open=False,helperline='red'):width=window_width()height=window_height()#行列lines=int(height/10)rows=int(width/10)#左上角leftx=-int(width/2)topy=int(height/2)self.goto_((leftx,topy))if open==True:for l in range(lines):nowpos=pos()-(0,0)self.line(rows,10,pcolor=helperline)topy-=10self.goto_((leftx,topy))qx,qy=-160,160self.goto_((qx,qy))for l in range(32):nowpos=pos()-(0,0)self.line(32,10,pcolor="blue")qy-=10self.goto_((qx,qy))qx,qy=-80,80self.goto_((qx,qy))for l in range(16):nowpos=pos()-(0,0)self.line(16,10,pcolor="green")qy-=10self.goto_((qx,qy))qx,qy=-20,20self.goto_((qx,qy))for l in range(4):nowpos=pos()-(0,0)self.line(4,10,pcolor="red")qy-=10self.goto_((qx,qy))self.goto_((0,0))#繪制線(xiàn)段 'length:2;direction:down;fcolor:black;pos:(0,-100);symmetrical:13'def drawlines(self,drawcon=[],startpos=(0,0)):for c in drawcon:c_val=c.split(';')length=0direction=''fcolor=''posv=Nonesymmetrical='f'symmetrical_direction="right"line_type='line'for v in c_val:demens=v.split(':')if demens[0]=='length':length=int(demens[1])elif demens[0]=='direction':direction=demens[1]elif demens[0]=='fcolor':fcolor=demens[1]elif demens[0]=='pos':posval=demens[1].split(',')posv=(int(posval[0])+startpos[0],int(posval[1])+startpos[1])elif demens[0]=='symmetrical':symmetrical=int(demens[1])elif demens[0]=='symmetrical_direction':symmetrical_direction=demens[1]elif demens[0]=='line_type':line_type=demens[1]self.goto_(posv)if line_type=='line':self.line(length,fcolor=fcolor,direction=direction,symmetrical=symmetrical,symmetrical_direction=symmetrical_direction)1.7 實(shí)例
現(xiàn)在我想畫(huà)個(gè)狗頭,只需要編寫(xiě)出繪制邏輯,如下:
#dog face dog_face=[#耳朵'length:9;direction:down;fcolor:black;pos:0,0;symmetrical:20;','length:2;direction:right;fcolor:black;pos:10,10;symmetrical:17;','length:1;direction:right;fcolor:black;pos:30,0;symmetrical:14;','length:1;direction:right;fcolor:black;pos:40,-10;symmetrical:12;','length:11;direction:right;fcolor:black;pos:50,-20;','length:1;direction:right;fcolor:black;pos:40,-30;symmetrical:12;','length:2;direction:down;fcolor:black;pos:30,-40;symmetrical:14;','length:2;direction:right;fcolor:black;pos:10,-60;symmetrical:17;',#臉蛋'length:7;direction:down;fcolor:black;pos:-10,-90;symmetrical:22;','length:2;direction:down;fcolor:black;pos:0,-160;symmetrical:20;','length:2;direction:right;fcolor:black;pos:10,-180;symmetrical:17;','length:2;direction:down;fcolor:black;pos:30,-190;symmetrical:14;','length:1;direction:down;fcolor:black;pos:40,-210;','length:2;direction:right;fcolor:black;pos:150,-210;','length:10;direction:right;fcolor:black;pos:50,-220;',#眼眶'length:2;direction:down;fcolor:black;pos:0,-110;symmetrical:12;','length:6;direction:right;fcolor:black;pos:10,-100;symmetrical:12;','length:2;direction:down;fcolor:black;pos:70,-110;symmetrical:12;','length:6;direction:right;fcolor:black;pos:10,-130;symmetrical:12;',#眼珠'length:2;direction:down;fcolor:black;pos:60,-110;symmetrical:12;','length:1;direction:down;fcolor:gray;pos:50,-110;symmetrical:12;','length:1;direction:down;fcolor:black;pos:50,-120;symmetrical:12;',#鼻子嘴巴'length:2;direction:down;fcolor:black;pos:70,-150;symmetrical:2;','length:5;direction:down;fcolor:black;pos:80,-150;','length:7;direction:right;fcolor:black;pos:60,-200;','length:1;direction:right;fcolor:black;pos:130,-190;','length:1;direction:right;fcolor:black;pos:140,-180;', ]然后引入庫(kù):
from drawTools import Tools from turtle import *調(diào)用工具即可:
tool=Tools() tracer(5,1)tool.drawlines(zan)狗頭就完成了:
再畫(huà)個(gè)程序員吧:
邏輯如下:
再點(diǎn)個(gè)贊:
邏輯:
當(dāng)然還有更多的邏輯代碼如下:
drawcon=['length:4;direction:down;fcolor:black;pos:0,0','length:6;direction:down;fcolor:black;pos:-10,-40','length:2;direction:down;fcolor:black;pos:0,-100;symmetrical:13','length:2;direction:right;fcolor:black;pos:10,-120;symmetrical:10','length:8;direction:right;fcolor:black;pos:30,-130','length:8;direction:down;fcolor:black;pos:140,-20','length:2;direction:down;fcolor:black;pos:130,0','length:3;direction:right;fcolor:black;pos:100,10','length:2;direction:down;fcolor:black;pos:90,0','length:5;direction:left;fcolor:black;pos:90,-20','length:2;direction:up;fcolor:black;pos:40,-20','length:3;direction:left;fcolor:black;pos:30,0','length:1;direction:left;fcolor:black;pos:0,-60;symmetrical:13','length:1;direction:down;fcolor:black;pos:0,-80;symmetrical:13','length:2;direction:down;fcolor:black;pos:30,-70;symmetrical:7','length:2;direction:right;fcolor:black;pos:60,-90',]drawcon1=['length:1;direction:down;fcolor:black;pos:0,0','length:3;direction:down;fcolor:black;pos:-10,-10','length:2;direction:right;fcolor:black;pos:0,-40','length:2;direction:right;fcolor:black;pos:10,-20','length:1;direction:right;fcolor:black;pos:20,-30','length:1;direction:right;fcolor:black;pos:20,-30','length:2;direction:right;fcolor:black;pos:30,-40','length:1;direction:right;fcolor:black;pos:40,-50','length:2;direction:right;fcolor:black;pos:50,-60','length:1;direction:right;fcolor:black;pos:70,-50','length:3;direction:up;fcolor:black;pos:80,-40','length:2;direction:left;fcolor:black;pos:70,-10','length:2;direction:down;fcolor:black;pos:50,-20','length:2;direction:left;fcolor:black;pos:40,-10','length:2;direction:up;fcolor:black;pos:20,0','length:1;direction:left;fcolor:black;pos:10,10',]human_head=['length:26;direction:right;fcolor:black;pos:0,0;symmetrical:21;symmetrical_direction:down','length:21;direction:down;fcolor:black;pos:0,0;symmetrical:25;','length:7;direction:right;fcolor:black;pos:20,-85;symmetrical:14;','length:1;direction:down;fcolor:black;pos:120,-152;symmetrical:2;symmetrical_direction:down;','length:1;direction:down;fcolor:black;pos:110,-162;symmetrical:2;symmetrical_direction:down;','length:3;direction:right;fcolor:black;pos:120,-192;', ]web=['length:32;direction:right;fcolor:black;pos:0,0;symmetrical:21;symmetrical_direction:down', 'length:21;direction:down;fcolor:black;pos:0,0;symmetrical:31;','length:4;direction:down;fcolor:black;pos:160,-210;','length:17;direction:right;fcolor:black;pos:80,-250;','length:6;direction:right;fcolor:blue;pos:20,-50;','length:6;direction:right;fcolor:blue;pos:50,-70;', ]phone=['length:16;direction:right;fcolor:black;pos:0,0;symmetrical:20;symmetrical_direction:down', 'length:20;direction:down;fcolor:black;pos:0,0;symmetrical:15;','length:16;direction:right;fcolor:black;pos:0,-170;','length:1;direction:right;fcolor:black;pos:75,-185;', ]spider=['length:17;direction:right;fcolor:black;pos:0,0;symmetrical:11;symmetrical_direction:down','length:11;direction:down;fcolor:black;pos:0,0;symmetrical:16;','length:6;direction:right;fcolor:black;pos:20,-20;symmetrical:6;symmetrical_direction:down','length:6;direction:down;fcolor:black;pos:20,-20;symmetrical:5;','length:6;direction:right;fcolor:black;pos:90,-20;symmetrical:6;symmetrical_direction:down','length:6;direction:down;fcolor:black;pos:90,-20;symmetrical:5;','length:2;direction:right;fcolor:black;pos:40,-40;symmetrical:7;','length:2;direction:right;fcolor:black;pos:40,-50;symmetrical:7;','length:6;direction:left;fcolor:black;pos:0,-20;symmetrical:22;',#第一根腿'length:3;direction:down;fcolor:black;pos:-60,-20;symmetrical:28;','length:7;direction:left;fcolor:black;pos:0,-60;symmetrical:23;',#中間腿'length:8;direction:left;fcolor:black;pos:0,-80;symmetrical:24;',#最前面的腿'length:4;direction:down;fcolor:black;pos:-80,-80;symmetrical:32;', ]camera=['length:26;direction:right;fcolor:black;pos:0,0;symmetrical:14;symmetrical_direction:down','length:14;direction:down;fcolor:black;pos:0,0;symmetrical:25;','length:6;direction:right;fcolor:black;pos:20,-30;symmetrical:4;symmetrical_direction:down','length:4;direction:down;fcolor:black;pos:20,-30;symmetrical:5;','length:3;direction:right;fcolor:black;pos:200,-20;', ]led=['length:8;direction:right;fcolor:black;pos:0,0','length:1;direction:right;fcolor:black;pos:-10,-10;symmetrical:9;','length:9;direction:down;fcolor:black;pos:-20,-20;symmetrical:11;','length:1;direction:down;fcolor:black;pos:-10,-110;symmetrical:9;','length:1;direction:down;fcolor:black;pos:0,-120;symmetrical:7;','length:1;direction:down;fcolor:black;pos:10,-130;symmetrical:5;','length:4;direction:right;fcolor:black;pos:20,-150;symmetrical:2;symmetrical_direction:down',#燈座'length:2;direction:up;fcolor:black;pos:0,20',#燈光'length:2;direction:up;fcolor:black;pos:20,20','length:2;direction:up;fcolor:black;pos:40,20','length:2;direction:up;fcolor:black;pos:60,20','length:2;direction:up;fcolor:black;pos:80,20',]#---------------------------- #哭臉 cry_face=['length:26;direction:right;fcolor:black;pos:0,0;symmetrical:21;symmetrical_direction:down','length:21;direction:down;fcolor:black;pos:0,0;symmetrical:25;','length:7;direction:right;fcolor:black;pos:20,-85;symmetrical:14;','length:12;direction:down;fcolor:black;pos:20,-105;symmetrical:14;','length:12;direction:down;fcolor:black;pos:80,-105;symmetrical:14;','length:5;direction:right;fcolor:black;pos:100,-145;', ]#蘋(píng)果 apple=['length:2;direction:right;fcolor:black;pos:0,0;symmetrical:10;symmetrical_direction:down','length:1;direction:right;fcolor:black;pos:20,-10;symmetrical:8;symmetrical_direction:down',#蘋(píng)果凹坑'length:3;direction:right;fcolor:black;pos:30,0;symmetrical:10;symmetrical_direction:down','length:1;direction:right;fcolor:black;pos:-10,-10;symmetrical:8;symmetrical_direction:down','length:1;direction:right;fcolor:black;pos:-20,-20;symmetrical:6;symmetrical_direction:down','length:5;direction:down;fcolor:black;pos:-30,-30;','length:1;direction:right;fcolor:black;pos:60,-10;symmetrical:8;symmetrical_direction:down',#咬痕'length:1;direction:right;fcolor:black;pos:50,-20;symmetrical:6;symmetrical_direction:down','length:1;direction:left;fcolor:black;pos:40,-30;symmetrical:4;symmetrical_direction:down','length:3;direction:down;fcolor:black;pos:30,-40;','length:1;direction:down;fcolor:black;pos:20,20;',#葉子'length:2;direction:right;fcolor:black;pos:30,30;','length:1;direction:down;fcolor:black;pos:50,40;', ]#書(shū)本 notebook=['length:12;direction:right;fcolor:black;pos:0,0;symmetrical:21;symmetrical_direction:down','length:1;direction:right;fcolor:black;pos:120,-10;symmetrical:21;symmetrical_direction:down',#凹'length:13;direction:right;fcolor:black;pos:130,0;symmetrical:21;symmetrical_direction:down','length:21;direction:down;fcolor:black;pos:0,0;symmetrical:25;','length:5;direction:down;fcolor:black;pos:120,-10;',#中間 ] #字母 letter_p=['length:21;direction:down;fcolor:black;pos:0,0;','length:6;direction:right;fcolor:black;pos:0,0;symmetrical:8;symmetrical_direction:down','length:1;direction:right;fcolor:black;pos:60,-10;symmetrical:6;symmetrical_direction:down','length:5;direction:down;fcolor:black;pos:70,-20;', ] letter_h=['length:21;direction:down;fcolor:black;pos:0,0;symmetrical:13;symmetrical_direction:right','length:13;direction:right;fcolor:black;pos:0,-80;', ] letter_t=['length:13;direction:right;fcolor:black;pos:0,0;','length:18;direction:down;fcolor:black;pos:60,0;', ] letter_m=['length:20;direction:right;fcolor:black;pos:0,0;','length:21;direction:down;fcolor:black;pos:0,0;symmetrical:20;symmetrical_direction:right','length:21;direction:down;fcolor:black;pos:100,0;', ] letter_l=['length:21;direction:down;fcolor:black;pos:0,0;','length:14;direction:right;fcolor:black;pos:0,-210;', ] letter_s=['length:10;direction:right;fcolor:black;pos:0,0;','length:10;direction:down;fcolor:black;pos:0,0;','length:10;direction:right;fcolor:black;pos:0,-100;symmetrical:9;symmetrical_direction:down','length:10;direction:down;fcolor:black;pos:100,-100;', ]letter_q=['length:10;direction:right;fcolor:black;pos:0,0;symmetrical:20;symmetrical_direction:down','length:20;direction:down;fcolor:black;pos:0,0;symmetrical:10;symmetrical_direction:right','length:5;direction:right;fcolor:black;pos:80,-150;',] letter_j=['length:7;direction:right;fcolor:black;pos:0,0;','length:18;direction:down;fcolor:black;pos:70,0;','length:1;direction:down;fcolor:black;pos:60,-180;','length:1;direction:down;fcolor:black;pos:50,-190;','length:3;direction:left;fcolor:black;pos:40,-200;','length:1;direction:left;fcolor:black;pos:10,-190;','length:2;direction:up;fcolor:black;pos:0,-180;', ]#笑臉 happy_face=['length:26;direction:right;fcolor:black;pos:0,0;symmetrical:21;symmetrical_direction:down','length:21;direction:down;fcolor:black;pos:0,0;symmetrical:25;','length:7;direction:right;fcolor:black;pos:20,-85;symmetrical:14;','length:9;direction:right;fcolor:black;pos:80,-175;',#笑臉嘴'length:1;direction:right;fcolor:black;pos:70,-165;symmetrical:10;symmetrical_direction:right','length:1;direction:right;fcolor:black;pos:60,-155;symmetrical:12;symmetrical_direction:right', ]#dog face dog_face=[#耳朵'length:9;direction:down;fcolor:black;pos:0,0;symmetrical:20;','length:2;direction:right;fcolor:black;pos:10,10;symmetrical:17;','length:1;direction:right;fcolor:black;pos:30,0;symmetrical:14;','length:1;direction:right;fcolor:black;pos:40,-10;symmetrical:12;','length:11;direction:right;fcolor:black;pos:50,-20;','length:1;direction:right;fcolor:black;pos:40,-30;symmetrical:12;','length:2;direction:down;fcolor:black;pos:30,-40;symmetrical:14;','length:2;direction:right;fcolor:black;pos:10,-60;symmetrical:17;',#臉蛋'length:7;direction:down;fcolor:black;pos:-10,-90;symmetrical:22;','length:2;direction:down;fcolor:black;pos:0,-160;symmetrical:20;','length:2;direction:right;fcolor:black;pos:10,-180;symmetrical:17;','length:2;direction:down;fcolor:black;pos:30,-190;symmetrical:14;','length:1;direction:down;fcolor:black;pos:40,-210;','length:2;direction:right;fcolor:black;pos:150,-210;','length:10;direction:right;fcolor:black;pos:50,-220;',#眼眶'length:2;direction:down;fcolor:black;pos:0,-110;symmetrical:12;','length:6;direction:right;fcolor:black;pos:10,-100;symmetrical:12;','length:2;direction:down;fcolor:black;pos:70,-110;symmetrical:12;','length:6;direction:right;fcolor:black;pos:10,-130;symmetrical:12;',#眼珠'length:2;direction:down;fcolor:black;pos:60,-110;symmetrical:12;','length:1;direction:down;fcolor:gray;pos:50,-110;symmetrical:12;','length:1;direction:down;fcolor:black;pos:50,-120;symmetrical:12;',#鼻子嘴巴'length:2;direction:down;fcolor:black;pos:70,-150;symmetrical:2;','length:5;direction:down;fcolor:black;pos:80,-150;','length:7;direction:right;fcolor:black;pos:60,-200;','length:1;direction:right;fcolor:black;pos:130,-190;','length:1;direction:right;fcolor:black;pos:140,-180;', ]#programer programer=[#頭發(fā)'length:3;direction:right;fcolor:black;pos:0,0;','length:11;direction:right;fcolor:black;pos:30,10;','length:2;direction:right;fcolor:black;pos:140,0;','length:1;direction:right;fcolor:black;pos:160,-10;','length:3;direction:right;fcolor:black;pos:170,-20;','length:4;direction:down;fcolor:black;pos:200,-30;','length:2;direction:left;fcolor:black;pos:190,-70;','length:2;direction:left;fcolor:black;pos:170,-80;','length:5;direction:up;fcolor:black;pos:150,-70;','length:2;direction:up;fcolor:black;pos:140,-70;','length:3;direction:left;fcolor:black;pos:140,-70;','length:3;direction:left;fcolor:black;pos:110,-80;','length:1;direction:left;fcolor:black;pos:80,-70;','length:2;direction:left;fcolor:black;pos:70,-80;','length:1;direction:left;fcolor:black;pos:50,-70;','length:3;direction:down;fcolor:black;pos:40,-60;','length:4;direction:left;fcolor:black;pos:30,-80;','length:5;direction:down;fcolor:black;pos:-10,-80;',#左側(cè)臉最左側(cè)坐標(biāo)'length:2;direction:up;fcolor:black;pos:-20,-110;','length:8;direction:up;fcolor:black;pos:-30,-100;','length:1;direction:up;fcolor:black;pos:-20,-20;','length:1;direction:up;fcolor:black;pos:-10,-10;',#臉廓'length:2;direction:down;fcolor:black;pos:0,-130;','length:6;direction:down;fcolor:black;pos:10,-150;','length:1;direction:down;fcolor:black;pos:20,-210;','length:12;direction:right;fcolor:black;pos:30,-220;','length:1;direction:right;fcolor:black;pos:150,-210;','length:1;direction:right;fcolor:black;pos:160,-200;','length:11;direction:up;fcolor:black;pos:170,-190;',#眼睛'length:4;direction:right;fcolor:black;pos:40,-105;symmetrical:8;',#眉毛'length:2;direction:down;fcolor:black;pos:70,-125;symmetrical:5;',#嘴巴'length:2;direction:down;fcolor:black;pos:50,-175;symmetrical:8;','length:2;direction:down;fcolor:black;pos:50,-175;symmetrical:8;','length:7;direction:right;fcolor:black;pos:60,-195;', ]#贊 zan=[#袖子'length:6;direction:down;fcolor:black;pos:0,0;symmetrical:3;', 'length:4;direction:right;fcolor:black;pos:0,10;symmetrical:7;symmetrical_direction:down;', #拇指'length:1;direction:down;fcolor:black;pos:40,10;','length:1;direction:down;fcolor:black;pos:50,20;symmetrical:4;','length:1;direction:down;fcolor:black;pos:60,30;','length:3;direction:up;fcolor:black;pos:70,40;','length:1;direction:up;fcolor:black;pos:80,70;symmetrical:2;','length:2;direction:right;fcolor:black;pos:90,80;','length:6;direction:down;fcolor:black;pos:100,80;',#握拳'length:6;direction:right;fcolor:black;pos:80,10;','length:6;direction:down;fcolor:black;pos:140,10;','length:1;direction:down;fcolor:black;pos:130,-50;','length:9;direction:left;fcolor:black;pos:120,-60;', ]總結(jié)
以上是生活随笔為你收集整理的情人节,我表白了CSDN小姐姐后,竟然...【为表白写了一个绘图工具,让我不再手残】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: [python opencv 计算机视觉
- 下一篇: 【看动漫学编程】程序员在异世界生个娃 第