版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
Python語言程序課程設(shè)計(jì)(報(bào)告)《Python語言程序課程設(shè)計(jì)》(報(bào)告)題目:愛心圖像繪制
摘要本文主要設(shè)計(jì)了使用Pythonturtle庫,繪制和創(chuàng)建各種類型的形狀和圖像。該設(shè)計(jì)的Python版本是
Python3.x
,Python環(huán)境是IDLE。turtle庫包含創(chuàng)建圖像所需的所有方法和函數(shù)。軟件采用Pythonturtle庫語言編程。實(shí)現(xiàn)的主要功能是繪制和創(chuàng)建各種類型的形狀和圖像。本設(shè)計(jì)的優(yōu)點(diǎn)是理解Python概念的一種簡單而通用的方式,且它是一個(gè)內(nèi)置庫,所以不需要安裝任何新包??梢詰?yīng)用到繪制形狀、創(chuàng)建設(shè)計(jì),制作圖像,創(chuàng)建迷你游戲,動(dòng)畫等領(lǐng)域。Turtle,也叫海龜渲染器,使用Turtle庫畫圖也叫海龜作圖。Turtle庫是Python語言中一個(gè)很流行的繪制圖像的函數(shù)庫。海龜渲染器,和各種三維軟件都有著良好的結(jié)合。功能強(qiáng)大,使用方便。該渲染器的特色在于其渲染速度可以優(yōu)海龜渲染器,和各種三維軟件都有著良好的結(jié)合。功能強(qiáng)大,使用方便。化得非???,相比起mentalray來說,這是他的一大優(yōu)點(diǎn)。尤其是在全局光與finalgather聯(lián)用的時(shí)候效果更是明顯。海龜渲染器在渲染大場景時(shí)非常有效,其對(duì)于光線的處理和色彩的鮮艷程度都要更勝三維軟件自帶的渲染器。其缺點(diǎn)在于對(duì)于三維軟件的程序紋理貼圖的支持不夠,很多情況下并不能對(duì)它的材質(zhì)球使用程序紋理貼圖。關(guān)于跳動(dòng)愛心。其實(shí),畫這個(gè)愛心,主要有幾個(gè)要素:①基礎(chǔ)愛心②愛心周邊的散列點(diǎn)③愛心抖動(dòng)。這幾個(gè)要素,都有對(duì)應(yīng)的數(shù)學(xué)算法,套用相應(yīng)算法就可以實(shí)現(xiàn)。關(guān)鍵詞:
Python3.x
IDLEPythonturtle庫制作圖像目錄TOC\o"1-3"\h\u第1章概述 第1章概述課題選擇與其他編程語言相比,Python更易于學(xué)習(xí)。它的語法很簡單,與英語非常相似。Python提供了許多有用的功能特性,這些功能使其相比其他編程語言更流行也更易于學(xué)習(xí)。它支持面向?qū)ο蟮木幊蹋仓С置嫦蜻^程編程沒有使用分號(hào)或花括號(hào),而是用縮進(jìn)來定義代碼塊,可以更清晰地理解代碼塊。Python可以使用幾行代碼來執(zhí)行復(fù)雜的任務(wù)。[2]Python可以在Windows,Linux,UNIX和Macintosh等不同平臺(tái)上平等運(yùn)行。因此,可以說Python是一種可移植的語言。它使程序員只需編寫一次程序即可為多個(gè)平臺(tái)開發(fā)軟件。每個(gè)人都可以免費(fèi)使用Python。[6]可在其官方網(wǎng)站上免費(fèi)獲得。它在全球擁有一個(gè)龐大的社區(qū),致力于開發(fā)新的python模塊和功能。任何人都可以為Python社區(qū)做出貢獻(xiàn)。開源意味著任何人都可以不花一分錢就可以下載其源代碼。Python支持面向?qū)ο蟮恼Z言,并且類和對(duì)象的概念應(yīng)運(yùn)而生。它支持繼承、多態(tài)性和封裝等。[4]面向?qū)ο蟮倪^程有助于程序員編寫可重用的代碼;并以較少的代碼來開發(fā)應(yīng)用程序。Python的生態(tài)系統(tǒng)中有著為機(jī)器學(xué)習(xí),Web開發(fā)人員和腳本編寫等各個(gè)領(lǐng)域提供了廣泛的庫。有各種機(jī)器學(xué)習(xí)庫和數(shù)據(jù)分析、數(shù)據(jù)科學(xué)庫,例如Tensorflow,,Pandas,Numpy,Keras和Pytorch等turtle庫是python的基礎(chǔ)繪圖庫,這個(gè)庫被介紹為一個(gè)最常用的用來給python新手介紹編程知識(shí)的方法庫,其主要是用于程序設(shè)計(jì)入門,是標(biāo)準(zhǔn)庫之一,利用turtle可以制作很多復(fù)雜的繪圖。簡單理解turtle庫就是一個(gè)用于圖形繪制的基礎(chǔ)庫。1.2設(shè)計(jì)目的turtle庫的使用目的是解決圖像繪制一類的問題,掌握了turtle庫的使用即可完成一些簡單的圖像制作與繪制。我們可以通過代碼來控制海龜?shù)呐佬熊壽E便能繪制出各種各樣的圖案。[9]繪圖時(shí)會(huì)自動(dòng)打開一個(gè)繪圖窗口可以查看繪圖的動(dòng)態(tài)過程,這個(gè)過程相當(dāng)有趣。1.3設(shè)計(jì)工具畫布:畫布就是turtle為我們展開用于繪圖區(qū)域,我們可以設(shè)置它的大小和初始位置
turtle.screensize(canvwidth=none,canvheight=none,bg=none)turtle.screensize(800,600,”green”)
#畫布的寬,高,畫布顏色turtle.screensize()
#返回默認(rèn)大?。?00,300)畫筆turtle.pensize()
設(shè)置畫筆的寬度turtle.pencolor()
傳入?yún)?shù)可設(shè)置畫筆的顏色,可以是字符串”green”,”red”,也可以RGB3元組,不傳入?yún)?shù)則返回當(dāng)前畫筆的顏色turtle.speed()
設(shè)置畫筆的移動(dòng)速度,畫筆繪制的速度范圍[0,10]的整數(shù),數(shù)字越大越快畫筆運(yùn)動(dòng)命令:turtle.forward(distance)
向當(dāng)前畫筆方向移動(dòng)distance像素長turtle.backward(distance)
向當(dāng)前畫筆相反方向移動(dòng)distance像素長度turtle.right(degree)
順時(shí)針移動(dòng)degree°turtle.left(degree)
逆時(shí)針移動(dòng)degree°turtle.seth(angle)
只改變海龜?shù)男羞M(jìn)方向(角度按逆時(shí)針),但不行進(jìn),angle為絕對(duì)度數(shù)turtle.pendown()
移動(dòng)時(shí)繪制圖形,缺省時(shí)也會(huì)繪制。落筆turtle.penup()
移動(dòng)時(shí)不繪制圖形,用于換個(gè)地方繪制時(shí)使用,提筆turtle.goto(x,y)
將畫筆移動(dòng)到坐標(biāo)為x,y的位置turtle.speed()
畫筆繪制的速度范圍[0,10]整數(shù),建議加在前面turtle.circle()
畫圓,半徑為正(負(fù)),表示圓心在畫筆的左邊(右邊)畫圓畫筆的控制命令:turtle.pensize(width)
繪制圖形時(shí)的寬度turtle.pencolor()
畫筆顏色turtle.fillcolor(colorstring)
繪制圖形的填充顏色turtle.color(color1,color2)
同時(shí)設(shè)置pencolor=color1,fillcolor=color2
設(shè)置畫筆顏色和填充顏色turtle.filling()
返回當(dāng)前狀態(tài)是否在填充狀態(tài)turtle.begin_fill()
準(zhǔn)備開始填充圖形turtle.end_fill()
填充完成turtle.hideturtle()
隱藏箭頭顯示turtle.showturtle()
與hideturtle()函數(shù)對(duì)應(yīng)全局控制命令:print(turtle.pos())
獲取鼠標(biāo)當(dāng)前位置并輸出turtle.clear()
清空turtle窗口,但是turtle的位置和狀態(tài)不會(huì)改變turtle.reset()
清空窗口,重置turtle狀態(tài)為起始狀態(tài)turtle.undo()
撤銷上一個(gè)turtle動(dòng)作turtle.isvisible()
返回當(dāng)前turtle是否可見stamp
()
復(fù)制當(dāng)前圖形第2章設(shè)計(jì)內(nèi)容2.1題目1跳動(dòng)愛心2.11設(shè)計(jì)任務(wù)及要求請(qǐng)運(yùn)用函數(shù)繪制黑色背景粉色愛心動(dòng)圖,且在中心輸入文字(呈現(xiàn)代碼和運(yùn)行結(jié)果)2.12程序代碼、importrandomfrommathimportsin,cos,pi,logfromtkinterimport*CANVAS_WIDTH=640#畫布的寬CANVAS_HEIGHT=640#畫布的高CANVAS_CENTER_X=CANVAS_WIDTH/2#畫布中心的X軸坐標(biāo)CANVAS_CENTER_Y=CANVAS_HEIGHT/2#畫布中心的Y軸坐標(biāo)IMAGE_ENLARGE=11#放大比例HEART_COLOR="#e77c8e"#心的顏色defheart_function(t,shrink_ratio:float=IMAGE_ENLARGE):"""“愛心函數(shù)生成器”:paramshrink_ratio:放大比例:paramt:參數(shù):return:坐標(biāo)"""#基礎(chǔ)函數(shù)x=16*(sin(t)**3)y=-(13*cos(t)-5*cos(2*t)-2*cos(3*t)-cos(4*t))#放大x*=shrink_ratioy*=shrink_ratio#移到畫布中央x+=CANVAS_CENTER_Xy+=CANVAS_CENTER_Yreturnint(x),int(y)defscatter_inside(x,y,beta=0.15):"""隨機(jī)內(nèi)部擴(kuò)散:paramx:原x:paramy:原y:parambeta:強(qiáng)度:return:新坐標(biāo)"""ratio_x=-beta*log(random.random())ratio_y=-beta*log(random.random())dx=ratio_x*(x-CANVAS_CENTER_X)dy=ratio_y*(y-CANVAS_CENTER_Y)returnx-dx,y-dydefshrink(x,y,ratio):"""抖動(dòng):paramx:原x:paramy:原y:paramratio:比例:return:新坐標(biāo)"""force=-1/(((x-CANVAS_CENTER_X)**2+(y-CANVAS_CENTER_Y)**2)**0.6)#這個(gè)參數(shù)...dx=ratio*force*(x-CANVAS_CENTER_X)dy=ratio*force*(y-CANVAS_CENTER_Y)returnx-dx,y-dydefcurve(p):"""自定義曲線函數(shù),調(diào)整跳動(dòng)周期:paramp:參數(shù):return:正弦"""#可以嘗試換其他的動(dòng)態(tài)函數(shù),達(dá)到更有力量的效果(貝塞爾?)return2*(3*sin(4*p))/(2*pi)classHeart:"""愛心類"""def__init__(self,generate_frame=20):self._points=set()#原始愛心坐標(biāo)集合self._edge_diffusion_points=set()#邊緣擴(kuò)散效果點(diǎn)坐標(biāo)集合self._center_diffusion_points=set()#中心擴(kuò)散效果點(diǎn)坐標(biāo)集合self.all_points={}#每幀動(dòng)態(tài)點(diǎn)坐標(biāo)self.build(2000)self.random_halo=1000self.generate_frame=generate_frameforframeinrange(generate_frame):self.calc(frame)defbuild(self,number):#愛心for_inrange(number):t=random.uniform(0,2*pi)#隨機(jī)不到的地方造成愛心有缺口x,y=heart_function(t)self._points.add((x,y))#愛心內(nèi)擴(kuò)散for_x,_yinlist(self._points):for_inrange(3):x,y=scatter_inside(_x,_y,0.05)self._edge_diffusion_points.add((x,y))#愛心內(nèi)再次擴(kuò)散point_list=list(self._points)for_inrange(4000):x,y=random.choice(point_list)x,y=scatter_inside(x,y,0.17)self._center_diffusion_points.add((x,y))@staticmethoddefcalc_position(x,y,ratio):#調(diào)整縮放比例force=1/(((x-CANVAS_CENTER_X)**2+(y-CANVAS_CENTER_Y)**2)**0.520)#魔法參數(shù)dx=ratio*force*(x-CANVAS_CENTER_X)+random.randint(-1,1)dy=ratio*force*(y-CANVAS_CENTER_Y)+random.randint(-1,1)returnx-dx,y-dydefcalc(self,generate_frame):ratio=10*curve(generate_frame/10*pi)#圓滑的周期的縮放比例halo_radius=int(4+6*(1+curve(generate_frame/10*pi)))halo_number=int(3000+4000*abs(curve(generate_frame/10*pi)**2))all_points=[]#光環(huán)heart_halo_point=set()#光環(huán)的點(diǎn)坐標(biāo)集合for_inrange(halo_number):t=random.uniform(0,2*pi)#隨機(jī)不到的地方造成愛心有缺口x,y=heart_function(t,shrink_ratio=11.6)#魔法參數(shù)x,y=shrink(x,y,halo_radius)if(x,y)notinheart_halo_point:#處理新的點(diǎn)heart_halo_point.add((x,y))x+=random.randint(-14,14)y+=random.randint(-14,14)size=random.choice((1,2,2))all_points.append((x,y,size))#輪廓forx,yinself._points:x,y=self.calc_position(x,y,ratio)size=random.randint(1,3)all_points.append((x,y,size))#內(nèi)容forx,yinself._edge_diffusion_points:x,y=self.calc_position(x,y,ratio)size=random.randint(1,2)all_points.append((x,y,size))forx,yinself._center_diffusion_points:x,y=self.calc_position(x,y,ratio)size=random.randint(1,2)all_points.append((x,y,size))self.all_points[generate_frame]=all_pointsdefrender(self,render_canvas,render_frame):forx,y,sizeinself.all_points[render_frame%self.generate_frame]:render_canvas.create_rectangle(x,y,x+size,y+size,width=0,fill=HEART_COLOR)defdraw(main:Tk,render_canvas:Canvas,render_heart:Heart,render_frame=0):render_canvas.delete('all')render_heart.render(render_canvas,render_frame)render_canvas.create_text(320,320,text="劉蘭芳",fill='#e77c8e',font=('微軟雅黑',15,'bold'))#此處可自定義main.after(160,draw,main,render_canvas,render_heart,render_frame+1)if__name__=='__main__':root=Tk()#一個(gè)Tkroot.title('寶貝愛你喲')#此處可自定義canvas=Canvas(root,bg='black',height=CANVAS_HEIGHT,width=CANVAS_WIDTH)canvas.pack()heart=Heart()#心draw(root,canvas,heart)#開始畫root.mainloop()2.4.3編譯調(diào)試及運(yùn)行結(jié)果2.2題目2奧運(yùn)五環(huán)2.2.1設(shè)計(jì)任務(wù)及要求請(qǐng)用pythonturtle庫繪制奧運(yùn)五環(huán),且符合相應(yīng)的顏色(呈現(xiàn)代碼和運(yùn)行結(jié)果)2.2.2程序代碼importturtler=45xy_list=[(-110,-25),(0,-25),(110,-25),(-55,-75),(55,-75)]color_list=['red','yellow','green','blue','black']turtle.pensize(5)foriinrange(5):turtle.penup()turtle.goto(xy_list[i][0],xy_list[i][1])turtle.pendown()#繪制圖案turtle.color(color_list[i])turtle.circle(r)turtle.begin_fill()turtle.end_fill()turtle.hideturtle()turtle.done()2.2.3編譯調(diào)試及運(yùn)行結(jié)果2.3題目3多瓣小花2.3.1設(shè)計(jì)任務(wù)及要求請(qǐng)用pythonturtle庫繪制多瓣小花,使其多片花瓣,且?guī)в芯G色花葉。(呈現(xiàn)代碼和運(yùn)行結(jié)果)2.3.2程序代碼importturtleastt.speed(0)#花柄t.penup()t.goto(0,-150)t.pendown()t.pensize(2)t.setheading(90)t.color('brown')t.fd(300)#花瓣t.pensize(1)t.color('black','red')t.begin_fill()foriinrange(10):t.left(45)t.circle(80,60)t.left(120)t.circle(80,60)t.end_fill()#葉子foriinrange(2):t.penup()t.goto(0,10-50*i)x=20+80*it.setheading(x)t.pendown()t.color('brown','green')t.begin_fill()t.circle(60,60)t.left(120)t.circle(60,60)t.end_fill()t.hideturtle()2.3.3編譯調(diào)試及運(yùn)行結(jié)果2.4題目4六邊形2.1.1設(shè)計(jì)任務(wù)及要求請(qǐng)用pythonturtle庫繪制一個(gè)綠色正六邊形(呈現(xiàn)代碼和運(yùn)行結(jié)果)2.1.2程序代碼importturtleturtle.setup(1000,450,200,200)#畫布的大小及位置turtle.penup()#抬起畫筆turtle.fd(-400)#移動(dòng)畫筆,也可使用turtle.goto(x,y)讓畫筆移動(dòng)到相應(yīng)的坐標(biāo)turtle.seth(90)#改變畫筆的朝向,讓畫筆方向從起始方向開始,逆時(shí)針旋轉(zhuǎn)90度turtle.fd(100)turtle.seth(0)#讓畫筆方向變?yōu)槠鹗挤较騮urtle.pendown()#落下畫筆turtle.pensize(10)#調(diào)正畫筆的粗細(xì)turtle.penup()turtle.fd(250)turtle.pendown()turtle.color("green")foriinrange(6):turtle.fd(100)turtle.seth(-60*(i+1))turtle.done()2.1.3編譯調(diào)試及運(yùn)行結(jié)果總結(jié)1、importturtle:直接引入對(duì)應(yīng)的庫備注:使用這種方式引入庫,那么在對(duì)turtle庫中的函數(shù)進(jìn)行調(diào)用時(shí),需要使用這種形式:turtle.函數(shù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年哈爾濱醫(yī)科大學(xué)附屬第二醫(yī)院公開招聘病房主任、副主任崗位15人備考筆試題庫及答案解析
- 深度解析(2026)《GBT 26882.1-2024糧油儲(chǔ)藏 糧情測控系統(tǒng) 第1部分:通則》
- 深度解析(2026)《GBT 26025-2010連續(xù)鑄鋼結(jié)晶器用銅模板》(2026年)深度解析
- 深度解析(2026)《GBT 25669.1-2010鏜銑類數(shù)控機(jī)床用工具系統(tǒng) 第1部分:型號(hào)表示規(guī)則》(2026年)深度解析
- 2025山東聊城市屬國有控股公司電商平臺(tái)項(xiàng)目招聘100人備考筆試題庫及答案解析
- 2025廣東中山市民眾錦標(biāo)學(xué)校教師招聘參考考試試題及答案解析
- 2025河南開封職業(yè)學(xué)院招聘專職教師81人參考考試試題及答案解析
- 2025年甘肅省嘉峪關(guān)市人民社區(qū)衛(wèi)生服務(wù)中心招聘備考考試題庫及答案解析
- 2025云南昆華醫(yī)院投資管理有限公司(云南新昆華醫(yī)院)招聘(3人)模擬筆試試題及答案解析
- 2025年東北農(nóng)業(yè)大學(xué)財(cái)務(wù)處招聘3人參考考試題庫及答案解析
- 酒店情況診斷報(bào)告
- GB/T 45795-2025大氣顆粒物PM10、PM2.5質(zhì)量濃度觀測光散射法
- 2025年夏季山東高中學(xué)業(yè)水平合格考地理試卷試題(含答案)
- DBJ04-T483-2025 海綿型城市道路與廣場設(shè)計(jì)標(biāo)準(zhǔn)
- 農(nóng)藥運(yùn)輸儲(chǔ)存管理制度
- TD/T 1036-2013土地復(fù)墾質(zhì)量控制標(biāo)準(zhǔn)
- 童年的閱讀測試題及答案
- 爆破備案工作報(bào)告
- 客戶押款協(xié)議書范本
- 地理建筑特征教案課件
- 1.1冪的乘除第4課時(shí)(課件)-2024-2025學(xué)年七年級(jí)數(shù)學(xué)下冊同步課堂(北師大版)
評(píng)論
0/150
提交評(píng)論