2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩81頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、第章 圖形編程,Graphic Programming,2,2,2,有圖有真相,應(yīng)用程序經(jīng)常要用到圖形/圖像/動畫統(tǒng)計軟件證券分析軟件教學(xué)軟件可視化:將抽象事物和過程轉(zhuǎn)變成視覺可見的、形象直觀的圖形圖像表示柱狀圖,直方圖,散點圖,網(wǎng)絡(luò)圖,流程圖,樹,地圖,圖像,動畫,...,計算可視化,科學(xué)可視化:將科學(xué)與工程計算、實驗中的數(shù)據(jù)用直觀的計算機(jī)圖形圖像呈現(xiàn)出來,以便人們理解數(shù)據(jù)、增強(qiáng)對事物現(xiàn)象的認(rèn)識和對內(nèi)在規(guī)律的洞察.數(shù)據(jù)可視

2、化:將海量數(shù)據(jù)轉(zhuǎn)化為數(shù)據(jù)圖像,以幫助人們直觀地觀察數(shù)據(jù). 可以進(jìn)而發(fā)展到更高層次的信息可視化和知識可視化.工程設(shè)計可視化...,3,4,4,4,圖形是復(fù)雜數(shù)據(jù),包含的信息是復(fù)雜的圓形:圓心(元組)和半徑(數(shù)值);內(nèi)部及邊界的顏色(RGB元組);...圖形操作是復(fù)雜的求面積,周長等傳統(tǒng)計算;還有移動位置,改顏色等等,本章重點,理解計算機(jī)圖形學(xué)的基本概念,掌握圖形的基本編程方法熟悉圖形對象及其方法掌握交互式圖形編程方法了解圖

3、形繪制和圖像處理的編程方法,Tkinter圖形編程(1),導(dǎo)入模塊import tkinter或from tkinter import *創(chuàng)建根窗口:作圖窗口root = Tk(),6,7,7,7,Tkinter圖形編程(2),創(chuàng)建畫布c = Canvas(,=,...)Canvas是畫布類,利用它可以創(chuàng)建畫布對象.在中創(chuàng)建畫布=用來設(shè)置畫布對象的數(shù)據(jù),如高度,寬度,背景色等例如:在root中創(chuàng)建300x200的白色

4、畫布c = Canvas(root,width=300, height=200,bg='white')c.pack(),例:畫矩形,畫矩形c.create_rectangle(x0,y0,x1,y1,...)或r = c.create_rectangle(...)返回所畫矩形的標(biāo)識號常用選項outline = 顏色fill = 顏色state=NORMAL/HIDDENdash

5、=(線段長,間隔),8,例:畫矩形,>>> c.create_rectangle(50,50,200,100)1 >>> r2 = c.create_rectangle(80,70,240,150,tags="rect#2")>>> print r22>>> c.itemconfig(1,fill="black")

6、>>> c.itemconfig(r2,fill="grey",outline="white",width=6) >>> c.delete(r2)>>> c.move(1,50,50)>>> c.create_rectangle(50,50,51,51) # Tkinter畫點>>> p1 = (10

7、,10)>>> p2 = (50,80)>>> c.create_rectangle(p1,p2,tags="#3")>>> xy = (100,110,200,220)>>> c.create_rectangle(xy),9,層次化設(shè)計案例:graphics,有人在Tkinter之上設(shè)計了另一個圖形模塊graphics.py因為Tki

8、nter較復(fù)雜,初學(xué)者學(xué)起來有點難graphics將Tkinter的功能封裝成了更易用的類這是非標(biāo)準(zhǔn)模塊,需要自己下載.,10,1 簡單的圖形編程,圖形用戶界面(GUI,Graphical User Interface)窗口、圖標(biāo)、按鈕以及菜單等。Python的標(biāo)準(zhǔn)GUI- Tkinter本書采用Tkinter中的圖形庫(graphics.py),,,1 簡單的圖形編程,導(dǎo)入圖形模塊。將graphics.py文件放入

9、主程序目錄下,或者Python系統(tǒng)目錄下。在Python提示符后輸入導(dǎo)入圖形命令:>>> import graphics創(chuàng)建圖形窗口。由graphics模塊中的GraphWin函數(shù)實現(xiàn)。Pyhton建立窗口的語句為:>>> win = graphics.GraphWin()窗體的標(biāo)題是“Graphics Window”。,,,1 簡單的圖形編程,說明:GraphWin是一個窗體對象,銷

10、毀此對象:>>> win.close()Python提供了另一個引用形式來避免頻繁的引入graphcis庫:from graphics import *用星號方法導(dǎo)入后,可以更簡潔的創(chuàng)建窗體對象:win = GraphWin()后面的圖形程序例子中,均默認(rèn)已經(jīng)用from導(dǎo)入了全部graphics模塊的方法。,1 簡單的圖形編程,像素圖形窗口中的點的集合。點對象圖形模塊中最簡單的對象。,1 簡單的圖形

11、編程,實例:>>> from graphics import *>>> p1 = Point(100,100)>>> p1.getX()100>>> p1.getY()100>>> p2 = Point(150,80)>>> win = GraphWin()>>> p1.draw(win)&g

12、t;>> p2.draw(win),1 簡單的圖形編程,輸出結(jié)果:,,,1 簡單的圖形編程,繪制命令直線、圓、矩形、橢圓形、多邊形以及文本實例:>>> #打開一個圖形窗口>>> win = GraphWin('MyShapes',300,300)>>> #使用Rectangle對象繪制一個藍(lán)色的方形>>> rect = Re

13、ctangle(Point(100,100),Point(220,220))>>> rect.setFill('blue')>>> rect.draw(win),,,1 簡單的圖形編程,>>> #使用Line對象繪制一條線>>> line = Line(Point(80,150),Point(270,150))>>> lin

14、e.draw(win)>>> #繪制一個以點 (260,220)為中心,半徑為35的圓形>>> center = Point(260,220)>>> circ = Circle(center,35)>>> circ.draw(win),,,1 簡單的圖形編程,>>> #使用Oval物體繪制一個橢圓>>> oval =

15、Oval(Point(20,30), Point(266,85))>>> oval.draw(win)>>> #在橢圓中放入一個文本標(biāo)簽>>> label = Text(Point(100,50), "Hello World")>>> label.draw(win),,,1 簡單的圖形編程,輸出結(jié)果:,,,2 圖形對象,圖形模塊:面向?qū)?/p>

16、象的思想。對象包括屬性和方法對象都是某個類的實例類定義了實例包含的屬性和方法,,,對象,對象:集數(shù)據(jù)與操作于一身.對象知道一些信息對象能對那些信息進(jìn)行處理計算:向?qū)ο蟀l(fā)出請求操作的消息.面向?qū)ο?軟件系統(tǒng)由各種對象組成,對象之間通過消息進(jìn)行交互.圖形編程工具通常都是面向?qū)ο髮崿F(xiàn)的.如Python標(biāo)準(zhǔn)模塊Tkinter,22,,2 圖形對象,創(chuàng)建點對象可以使用如下構(gòu)造函數(shù)語句:p = Point(50,60)

17、Point類的構(gòu)造函數(shù)兩個參數(shù)創(chuàng)建點對象的x,y坐標(biāo)。大多數(shù)類屬性被設(shè)為默認(rèn)值。,,,2 圖形對象,對象的方法一個對象所響應(yīng)的消息集合參數(shù)的數(shù)量和類型根據(jù)需要來確定。無參數(shù)的方法:p.getX()p.getY()訪問對象實例變量的內(nèi)部屬性。,,,2 圖形對象,有參數(shù)的方法:p.move(10,0)改變對象實例變量的屬性值來改變該對象的狀態(tài)。有些方法用到的參數(shù)本身就是復(fù)雜對象。circ = Circle

18、(Point(100,100), 30)win = GraphWin()circ.draw(win),,,2 圖形對象,注意有時兩個不同的變量可能表示同一個對象。更改一個變量來改變對象內(nèi)容的同時另一個變量也會變化。示例假設(shè)寫一個畫笑臉的程序。希望繪制的兩個眼睛間隔20單位長度。眼睛繪制代碼如下:leftEye = Circle(Point(80, 50), 5)leftEye.setFill("yellow&qu

19、ot;)leftEye.setOutline("red")rightEye = leftEyerightEye.move(20,0),,,2 圖形對象,程序的運行結(jié)果:以上代碼是無效的只創(chuàng)建了一個Circle對象。,,,2 圖形對象,解決方法1為左右眼分別創(chuàng)建兩個不同的圓。leftEye = Circle(Point(80, 50), 5)leftEye.setFill("y

20、ellow")leftEye.setOutline("red")rightEye = Circle(Point(100, 50), 5)rightEye.setFill("yellow")rightEye.setOutline("red"),,,2 圖形對象,程序的運行結(jié)果:雖然解決了問題,但代碼重復(fù)。如果要修改眼睛的外觀,必須確保兩只眼睛同時

21、改變。,,,2 圖形對象,解決方法2利用圖形庫中clone()方法來復(fù)制對象#使用clone()創(chuàng)建兩個圓leftEye = Circle(Point(80, 50), 5)leftEye.setFill("yellow")leftEye.setOutline("red")rightEye = leftEye.clone() # rightEye is an exact copy o

22、f the leftrightEye.move(20,0),,,31,31,31,程序的用戶界面,程序中與用戶進(jìn)行交互的部分用戶通過UI向程序輸入數(shù)據(jù)或者請求程序執(zhí)行特定任務(wù)程序通過UI向用戶顯示各種信息UI應(yīng)該是用戶友好的兩類UI命令行界面圖形界面(GUI),,,32,32,事件驅(qū)動,GUI程序的執(zhí)行流程取決于與用戶的實時交互例如:Word程序的執(zhí)行事件驅(qū)動編程普通程序的執(zhí)行:啟動——做事——終止事件驅(qū)動程序的執(zhí)

23、行:啟動——事件循環(huán)等待事件發(fā)生,然后處理程序的終止也是由特定事件(如關(guān)閉窗口事件)引起的,,33,33,基本概念,事件:例如點擊鼠標(biāo),按下鍵盤等.事件處理程序:對事件進(jìn)行處理的代碼. 事件驅(qū)動編程:一種編程范型程序有一個事件循環(huán)事件監(jiān)測OS功能,由工具包提供支持事件處理應(yīng)用程序員只需編寫自己的事件處理程序,,3 交互式圖形編程,圖形接口用于程序的輸入和輸出。事件驅(qū)動點擊按鈕,選擇菜單欄里的選項,以及在屏幕文本框

24、中輸入文字。圖形模塊隱藏了底層事件的處理機(jī)制,提供了兩個簡單的方法獲得用戶在窗口中的輸入。捕捉鼠標(biāo)點擊處理文本輸入,,,3 交互式圖形編程,1. 捕捉鼠標(biāo)點擊GraphWin類中的getMouse()方法。# click.pyfrom graphics import *def main(): win = GraphWin("Click Me!") for i in range(10):

25、 p = win.getMouse() print "You clicked at:", p.getX(), p.getY() main(),,,3 交互式圖形編程,運行后的一組輸出結(jié)果:You clicked at: 73 39You clicked at: 157 34You clicked at: 178 92You clicked at: 50 103You clic

26、ked at: 33 139You clicked at: 131 156You clicked at: 151 99You clicked at: 203 54You clicked at: 67 64You clicked at: 12 57,,,3 交互式圖形編程,下面的例子是一個交互式程序# polygon.pywfrom graphics import *win = GraphWin("Draw a

27、 polygon",300,300)win.setCoords(0.0, 0.0, 300.0, 300.0)message = Text(Point(150, 20), "Click on five points")message.draw(win),,,3 交互式圖形編程,#獲得多邊形的5個點p1 = win.getMouse()p1.draw(win)p2 = win.getMouse()

28、p2.draw(win)p3 = win.getMouse()p3.draw(win)p4 = win.getMouse()p4.draw(win)p5 = win.getMouse()p5.draw(win),,,3 交互式圖形編程,# 使用Polygon對象繪制多邊形polygon = Polygon(p1,p2,p3,p4,p5)polygon.setFill("peachpuff")pol

29、ygon.setOutline("black")polygon.draw(win)# 等待響應(yīng)鼠標(biāo)事件,退出程序message.setText("Click anywhere to quit.")win.getMouse(),,,3 交互式圖形編程,程序的運行和結(jié)果:,,,3 交互式圖形編程,輸出提示信息使用Text文本對象Text(Point(150, 20), "Cli

30、ck on five points")message.draw(win)更新提示在程序的倒數(shù)第二行,使用setText方法實現(xiàn)。message.setText("Click anywhere to quit."),,,3 交互式圖形編程,2. 處理文本輸入輸入對象Entry獲取窗口中的鍵盤輸入。Entry對象在窗口中創(chuàng)建一個文本框使用setText()和getText()方法。Ent

31、ry對象的內(nèi)容可以被用戶修改。,,,3 交互式圖形編程,溫度轉(zhuǎn)換程序:# tempConvert_gui.pyw# 為溫度轉(zhuǎn)換程序繪制圖形窗口# graphical interface.from graphics import *win = GraphWin("Celsius Converter", 400, 300)win.setCoords(0.0, 0.0, 3.0, 4.0),,,3 交互式圖

32、形編程,# 繪制接口Text(Point(1,3), " Celsius Temperature:").draw(win)Text(Point(1,1), "Fahrenheit Temperature:").draw(win)input = Entry(Point(2,3), 5)input.setText("0.0")input.draw(win)output

33、= Text(Point(2,1),"")output.draw(win)button = Text(Point(1.5,2.0),"Convert It")button.draw(win)Rectangle(Point(1,1.5), Point(2,2.5)).draw(win),,,3 交互式圖形編程,# 等待鼠標(biāo)點擊win.getMouse()# 轉(zhuǎn)換輸入celsius =

34、eval(input.getText())fahrenheit = 9.0/5.0 * celsius + 32# 顯示輸出,改變按鈕output.setText(fahrenheit)button.setText("Quit")# 等待響應(yīng)鼠標(biāo)點擊,退出程序win.getMouse()win.close(),,,3 交互式圖形編程,程序運行顯示的窗口界面:,,,3 交互式圖形編程,用戶輸入后的程序窗口

35、界面:使用圖形庫中的選項更改窗口部件的顏色、尺寸以及線條寬度。,,,4 圖形庫的應(yīng)用方法,1. GraphWin對象及方法GraphWin屏幕上的窗體對象,并在此窗體上繪制圖像??梢远x任意數(shù)量的窗體創(chuàng)建新窗口GraphWin(title, width, height)參數(shù)是可選的默認(rèn)標(biāo)題是“Graphics Window”默認(rèn)大小為200*200。,,,4 圖形庫的應(yīng)用方法,GraphWin對象的常用

36、方法:,,,4 圖形庫的應(yīng)用方法,2. 圖形對象及方法圖形對象點、線段、圓、橢圓、矩形、多邊形以及文本。默認(rèn)初始化黑色邊框沒有被填充。,,,4 圖形庫的應(yīng)用方法,圖形對象通用方法:,,,4 圖形庫的應(yīng)用方法,Point對象方法:,,,4 圖形庫的應(yīng)用方法,Line對象方法:,,,4 圖形庫的應(yīng)用方法,Circle對象方法:,,,4 圖形庫的應(yīng)用方法,Rectangle對象方法:,,,4 圖形庫的應(yīng)用方法,Oval對象方法:,

37、,,4 圖形庫的應(yīng)用方法,Polygon 對象方法:,,,4 圖形庫的應(yīng)用方法,Text 對象方法:,,,4 圖形庫的應(yīng)用方法,3. 圖形顏色顏色由字符串指定。color_rgb(red,green,blue)函數(shù)通過設(shè)定顏色數(shù)值來獲得想要的顏色三個參數(shù)應(yīng)該為0-255范圍內(nèi)的整數(shù)返回一個字符串。,,,4 圖形庫的應(yīng)用方法,對溫度轉(zhuǎn)換程序進(jìn)行修改如下:# tempConvert_gui.pyw ,用窗口顏色顯示溫度轉(zhuǎn)換的

38、結(jié)果from graphics import *def convert(input): celsius = eval(input.getText()) # 輸入轉(zhuǎn)換 fahrenheit = 9.0/5.0 * celsius + 32 return fahrenheit def colorChange(win,input): cnum = eval(input.getText())

39、weight = cnum / 100.0,,,4 圖形庫的應(yīng)用方法,newcolor = color_rgb(255*weight,66+150*(1-weight),255*(1-weight)) win.setBackground(newcolor)def main(): win = GraphWin("Celsius Converter", 400, 300) win

40、.setCoords(0.0, 0.0, 3.0, 4.0),,,4 圖形庫的應(yīng)用方法,# 繪制輸入接口 Text(Point(1,3), " Celsius Temperature:").draw(win) Text(Point(2,2.7)," (Please input 0.0-100.0 )").draw(win) Text(Point(1,1),"Fah

41、renheit Temperature:").draw(win) input = Entry(Point(2,3), 5) input.setText("0.0") input.draw(win) output = Text(Point(2,1),"") output.draw(win) button = Text(Point(1.5,2.

42、0),"Convert It") button.draw(win) rect = Rectangle(Point(1,1.5), Point(2,2.5)) rect.draw(win),,,4 圖形庫的應(yīng)用方法,# 等待鼠標(biāo)點擊 win.getMouse() result = convert(input) # 轉(zhuǎn)換輸入 output.setText(result

43、) # 顯示輸出 # 改變顏色 colorChange(win,input) # 改變按鈕字體 button.setText("Quit") # 等待點擊事件,退出程序 win.getMouse() win.close()main(),,,4 圖形庫的應(yīng)用方法,程序的運行及結(jié)果溫度轉(zhuǎn)換程序窗口,,,4 圖形庫的應(yīng)用方法,程序的運行及結(jié)果顏色信息的窗

44、口,,,5 示例程序1:最小二乘法擬合曲線,,,,5 示例程序1:最小二乘法擬合曲線,示例對隨機(jī)生成的15個點使用最小二乘法擬合曲線。該問題的IPO:輸入:隨機(jī)生成15個坐標(biāo)點處理:最小二乘法擬合曲線輸出:繪制擬合曲線圖,,,5 示例程序1:最小二乘法擬合曲線,scipy庫最小二乘函數(shù)leastsq()Numpy庫矩陣計算函數(shù)matplotlib庫繪圖函數(shù)。下載地址http://sourceforge.net/

45、projects/pylab/files/latest/download?source=recommended,,,5 示例程序1:最小二乘法擬合曲線,最小二乘法擬合曲線的代碼:#fittedCurve.pyfrom pylab import * # pylab 是matplotlib庫中的一個子模塊from numpy import *from scipy.optimize import leastsq #最小二乘法的函數(shù)

46、#擬合函數(shù)def fun2(p, x): f = poly1d(p) return f(x),,,5 示例程序1:最小二乘法擬合曲線,#偏差函數(shù):離散值和擬合函數(shù)之間的差,p為擬合需要的系數(shù)def err(p,x,y): return y - fun2(p, x)xmin = 0xmax = 10,,,5 示例程序1:最小二乘法擬合曲線,# 隨機(jī)選取15個點x = linspace(xmin, x

47、max, 15)# 畫圖時連續(xù)的點x1 = linspace(xmin, xmax, 1000)# x對應(yīng)的隨機(jī)離散值y1 = x + random.randn(len(x))#隨機(jī)產(chǎn)生一組次數(shù)為10的多項式參數(shù)作為初始參數(shù)值p0 = random.randn(10),,,5 示例程序1:最小二乘法擬合曲線,# 利用leastsq最小二乘函數(shù)進(jìn)行數(shù)據(jù)擬合# err為計算誤差的函數(shù)# p0為擬合參數(shù)的初始值# args

48、為需要擬合的實驗數(shù)據(jù)# maxfev是最多調(diào)用函數(shù)的次數(shù)result = leastsq(err, p0, args=(x, y1), maxfev=1000)#輸出擬合參數(shù)print '擬合參數(shù):', result[0],,,5 示例程序1:最小二乘法擬合曲線,#繪制離散值點和擬合曲線title('Least-squares fited curve to discrete data')pl

49、ot(x, y1, 'ro', label='Data') #繪制離散點plot(x1, fun2(result[0], x1), label='Fitted curve') #繪制曲線legend() #圖的標(biāo)注show() return 0;,,,5 示例程序1:最小二乘法擬合曲線,程序運行的結(jié)果:,,,5 示例程序1:最小二乘法擬合曲線,注意:matplotl

50、ib是python第三方繪圖庫將python安裝目錄中的six.py文件拷貝到site-packages文件夾中確認(rèn)Python安裝包中包含lib文件dateutil.lib和pyparsing.lib。,,,6 示例程序2:簡單的圖像處理,圖像處理利用計算機(jī)對圖像信息進(jìn)行加工以滿足人的視覺心理或者應(yīng)用需求的行為。PIL(Python Image Library) PythonWare公司的圖像處理工具包。PIL圖像處理功能

51、改變圖像大小、旋轉(zhuǎn)圖像、圖像格式轉(zhuǎn)換、色場空間轉(zhuǎn)換、圖像增強(qiáng)、直方圖處理、插值和濾波等。PIL功能模塊Image,ImageDraw,ImageEnhance,ImageFileI,mageFilter等PIL下載地址http://www.pythonware.com/products/pil/,,,6 示例程序2:簡單的圖像處理,從PIL中導(dǎo)出Image類的方法是:import Image打開名為img.jp

52、g圖像文件的代碼為:img = Image.open("img.jpg")該語句返回一個Image類實例對象,后面所有操作都是在img上完成?;赑IL庫完成圖像邊緣提取的IPO表示如下:輸入:圖像文件處理:利用PIL庫中的方法實現(xiàn)圖像邊緣提取輸出:處理圖像邊界的新圖像文件,,,6 示例程序2:簡單的圖像處理,ImageFilter模塊支持圖像的濾鏡功能處理,常見的如模糊、浮雕、輪

53、廓、邊緣增強(qiáng)和平滑、中值濾波和ModeFilter等。ImageFilter模塊內(nèi)置的Filter,如 BLUR、DETAIL等,F(xiàn)ilter()函數(shù),可以指定不同的參數(shù)獲得不同的效果。使用參數(shù)為CONTOUR的濾鏡可以實現(xiàn)圖像的邊緣提取。,,,6 示例程序2:簡單的圖像處理,該程序的代碼為:# imageprocessing.pyimport Imageimport ImageFilterimg = Image.o

54、pen("img.jpg")imgfiltered = img.filter(ImageFilter. CONTOUR)imgfiltered.save("imgfilterterd.jpg"),,,6 示例程序2:簡單的圖像處理,程序運行的結(jié)果: 輸入圖像img.jpg 輸出圖像imgfiltered.jpg,,,本章小結(jié),本章主要內(nèi)容簡單的圖形

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論