- Python編程與幾何圖形
- 王振世
- 2340字
- 2020-05-15 16:42:28
1.3 編程知識(shí)點(diǎn)
(1)turtle庫(kù)
turtle庫(kù)是Python入門(mén)級(jí)的圖形繪制函數(shù)庫(kù),是Python自帶的標(biāo)準(zhǔn)庫(kù)之一。使用turtle庫(kù)繪圖,可以想象有一只海龜在畫(huà)布上移動(dòng),默認(rèn)初始位置在畫(huà)布的正中心,海龜走過(guò)的軌跡就形成了繪制的圖形。移動(dòng)的海龜由程序控制,可以變換顏色、寬度、大小、位置、方向等。
用import調(diào)用turtle庫(kù)可以有三種形式:
第一種直接用“import+turtle”導(dǎo)入turtle庫(kù),如圖1-3所示。后續(xù)使用turtle庫(kù)時(shí),需要使用turtle庫(kù)名。如果回車(chē)以后沒(méi)有錯(cuò)誤提示,則表示導(dǎo)入庫(kù)成功。

圖1-3 導(dǎo)入turtle庫(kù)
第二種用“import+turtle+as+別名”導(dǎo)入turtle庫(kù),如圖1-4所示,在后續(xù)使用turtle庫(kù)時(shí),可以直接用別名代替。如果回車(chē)以后沒(méi)有錯(cuò)誤提示,則表示導(dǎo)入庫(kù)成功。

圖1-4 導(dǎo)入turtle庫(kù),別名為pic
第三種用“from+庫(kù)名+import*”導(dǎo)入turtle庫(kù),from import方式導(dǎo)入turtle庫(kù)如圖1-5所示,后續(xù)使用這個(gè)庫(kù)里的函數(shù)或方法時(shí),不需要再說(shuō)明庫(kù)名稱(chēng)。如果回車(chē)以后沒(méi)有錯(cuò)誤提示,表示導(dǎo)入庫(kù)成功。

圖1-5 from import方式導(dǎo)入turtle庫(kù)
(2)畫(huà)布的坐標(biāo)系
turtle庫(kù)畫(huà)圖的平面被稱(chēng)為畫(huà)布(canvas),原點(diǎn)(0,0)在畫(huà)布的正中央,即1/2畫(huà)布高、1/2畫(huà)布寬的位置。以畫(huà)布中央的點(diǎn)為原點(diǎn)(0,0),建立一個(gè)橫軸為x軸、縱軸為y軸的坐標(biāo)系,小海龜畫(huà)筆在畫(huà)布上移動(dòng)的位置,就可以在這個(gè)直角坐標(biāo)系中確定下來(lái),如圖1-6所示。

圖1-6 turtle畫(huà)布中的坐標(biāo)系
在畫(huà)布中,坐標(biāo)(x,y)的單位是像素。這個(gè)單位與液晶顯示屏的尺寸及分辨率有關(guān)。屏幕越大,分辨率越小,像素代表的實(shí)際尺寸越大。
在畫(huà)布中,點(diǎn)(20,-30)的位置在畫(huà)布的右下角,即第4象限,距離y軸20像素,距離x軸30像素。
(3)移動(dòng)畫(huà)筆函數(shù)goto()
畫(huà)筆的默認(rèn)位置在畫(huà)布中央。在turtle畫(huà)布中,使用函數(shù)goto()可以移動(dòng)畫(huà)筆到指定位置。
移動(dòng)畫(huà)筆位置的程序代碼如圖1-7所示,導(dǎo)入turtle庫(kù),別名為pic,分別按順序調(diào)用了4次turtle庫(kù)中的函數(shù)goto()。最初,畫(huà)筆在原點(diǎn)(0,0)的位置上,使用函數(shù)goto(100,100)將畫(huà)筆從原點(diǎn)移動(dòng)到了第1象限的(100,100)位置上;然后使用函數(shù)goto(-100,50)將畫(huà)筆移動(dòng)到了第2象限的(-100,50)位置上,再使用函數(shù)goto(-50,-50)將畫(huà)筆移動(dòng)到了第3象限的(-50,-50)位置,最后使用函數(shù)goto(50,-100)將畫(huà)筆移動(dòng)到了第4象限的(50,-100)位置。程序運(yùn)行結(jié)果為如圖1-8所示的畫(huà)筆運(yùn)行軌跡(黑色部分)。

圖1-7 移動(dòng)畫(huà)筆位置的程序代碼

圖1-8 程序運(yùn)行結(jié)果:移動(dòng)畫(huà)筆的軌跡
(4)畫(huà)點(diǎn)函數(shù)dot()
在turtle庫(kù)中,用來(lái)畫(huà)點(diǎn)的函數(shù)為dot()。點(diǎn)最重要的屬性就是位置,這和幾何里點(diǎn)的屬性一樣。在幾何里,點(diǎn)沒(méi)有大小和顏色;但使用turtle庫(kù)的畫(huà)點(diǎn)函數(shù)時(shí),點(diǎn)是可以指定大小和顏色的。格式為:

如dot(5,“green”)就是畫(huà)一個(gè)直徑為5的綠點(diǎn)。直接用dot(),不指定任何參數(shù)時(shí),點(diǎn)的直徑的默認(rèn)大小是max(畫(huà)筆寬度+4,2×畫(huà)筆寬度),顏色是黑色。
畫(huà)4個(gè)點(diǎn)的程序代碼如圖1-9所示。導(dǎo)入turtle庫(kù),別名為pic,分別按順序調(diào)用4次turtle庫(kù)中的函數(shù)dot()。這里沒(méi)有使用函數(shù)goto()移動(dòng)畫(huà)筆的位置,所以畫(huà)筆一直在原點(diǎn)(0,0)處。

圖1-9 畫(huà)4個(gè)點(diǎn)的程序代碼
dot(100,“orange”)以原點(diǎn)為中心,畫(huà)一個(gè)直徑為100像素的橙色的點(diǎn);dot(50,“red”)以原點(diǎn)為中心,畫(huà)一個(gè)直徑為50像素的紅色的點(diǎn);dot(10,“purple”)以原點(diǎn)為中心,畫(huà)一個(gè)直徑為10像素的紫色的點(diǎn);pic.dot()以原點(diǎn)為中心,畫(huà)一個(gè)默認(rèn)大小的黑點(diǎn)。運(yùn)行這段程序,得到的圖形如圖1-10所示。

圖1-10 程序運(yùn)行結(jié)果:位置在原點(diǎn)的不同大小的點(diǎn)
(5)抬筆函數(shù)penup()和落筆函數(shù)pendown()
在(0,0)、(50,0)、(100,0)處分別畫(huà)三個(gè)點(diǎn),代碼如圖1-11所示。畫(huà)筆的初始位置在(0,0)處,調(diào)用函數(shù)dot()畫(huà)一個(gè)默認(rèn)大小的黑點(diǎn);然后使用函數(shù)goto(50,0)將畫(huà)筆挪到第二個(gè)點(diǎn)的位置,畫(huà)同樣的點(diǎn);最后使用函數(shù)goto(100,0)將畫(huà)筆挪到第三個(gè)點(diǎn)的位置,畫(huà)一個(gè)同樣的點(diǎn)。

圖1-11 不同位置畫(huà)三個(gè)點(diǎn)的程序代碼
程序運(yùn)行結(jié)果如圖1-12所示。

圖1-12 程序運(yùn)行結(jié)果:畫(huà)三個(gè)點(diǎn)(有畫(huà)筆移動(dòng)軌跡)
如果我們只想畫(huà)三個(gè)點(diǎn),不想呈現(xiàn)畫(huà)筆移動(dòng)的軌跡,該怎么辦呢?畫(huà)點(diǎn)的時(shí)候,使用落筆函數(shù)pendown(),移動(dòng)畫(huà)筆的時(shí)候使用抬筆函數(shù)penup(),程序代碼如圖1-13所示。在原點(diǎn)畫(huà)一個(gè)點(diǎn)后,使用函數(shù)penup()抬筆,將畫(huà)筆移動(dòng)到(50,0)位置上,此時(shí)由于畫(huà)筆處于“抬起”的狀態(tài),畫(huà)筆并不留下移動(dòng)痕跡。在位置(50,0)畫(huà)第2個(gè)點(diǎn)之前,使用函數(shù)pendown()落筆。畫(huà)第3個(gè)點(diǎn)也如此操作。程序運(yùn)行結(jié)果如圖1-14所示。

圖1-13 不同位置畫(huà)點(diǎn)(有抬筆、落筆)的程序代碼

圖1-14 程序運(yùn)行結(jié)果:畫(huà)三個(gè)點(diǎn)(沒(méi)有畫(huà)筆移動(dòng)軌跡)
(6)for循環(huán)
在上面畫(huà)3個(gè)點(diǎn)的示例中,調(diào)用函數(shù)dot()三次,調(diào)用函數(shù)goto()、落筆函數(shù)pendown()、抬筆函數(shù)penup()各兩次。如果畫(huà)很多點(diǎn),就要重復(fù)很多次上面的代碼,非常煩瑣。對(duì)于這種有規(guī)律可循的動(dòng)作,用循環(huán)語(yǔ)句實(shí)現(xiàn)可以大大簡(jiǎn)化編程復(fù)雜度。
比如,在畫(huà)三個(gè)點(diǎn)的程序中,使用for循環(huán)來(lái)簡(jiǎn)化代碼,如圖1-15所示。需要畫(huà)的點(diǎn)數(shù)越多,代碼的簡(jiǎn)化量越大。

圖1-15 使用for循環(huán)簡(jiǎn)化畫(huà)三個(gè)點(diǎn)的程序代碼
在for循環(huán)中,執(zhí)行的動(dòng)作包括抬筆penup()、移動(dòng)畫(huà)筆goto()、落筆pendown()、畫(huà)點(diǎn)dot()4個(gè)動(dòng)作。雖然在圖1-15的左圖中,由于在原點(diǎn)處畫(huà)第1個(gè)點(diǎn),沒(méi)有抬筆、移動(dòng)畫(huà)筆、落筆的動(dòng)作,但為了實(shí)現(xiàn)循環(huán),在畫(huà)筆初始位置畫(huà)點(diǎn)時(shí)同樣加上抬筆、移動(dòng)到原點(diǎn)、落筆的動(dòng)作。
在函數(shù)range(3)中確定了for循環(huán)的次數(shù)。range(3)相當(dāng)于0,1,2三個(gè)數(shù),i依次從這三個(gè)數(shù)中取值。變量x是為了依次生成3個(gè)點(diǎn)的坐標(biāo)位置。這3個(gè)點(diǎn)在x軸上,間距是50像素。
(7)隨機(jī)數(shù)
在Python中產(chǎn)生隨機(jī)數(shù)需要調(diào)用random庫(kù)。randint()函數(shù)用于隨機(jī)生成一個(gè)指定范圍內(nèi)的整數(shù)。如randint(a,b)生成[a,b]之間包括a和b的整數(shù),其中a≤b。

默認(rèn)畫(huà)布的長(zhǎng)為400像素,高為300像素。為了在畫(huà)布上生成一個(gè)點(diǎn)的隨機(jī)位置,可以使用函數(shù)randint()生成坐標(biāo)和直徑。x可以在[-200,200]中隨機(jī)選取,y可以在[-150,150]中隨機(jī)選取。點(diǎn)的直徑d可以在[1,50]中隨機(jī)選取。
randint(-200,200)、randint(-150,150)、randint(1,50)生成的數(shù)如圖1-16所示。每次運(yùn)行這些函數(shù)時(shí),生成的整數(shù)是不一樣的。

圖1-16 隨機(jī)生成一個(gè)整數(shù)的程序代碼
- OpenDaylight Cookbook
- Vue.js 3.x從入門(mén)到精通(視頻教學(xué)版)
- PHP 編程從入門(mén)到實(shí)踐
- 游戲程序設(shè)計(jì)教程
- Learning Python Design Patterns
- Python Data Analysis Cookbook
- PySide 6/PyQt 6快速開(kāi)發(fā)與實(shí)戰(zhàn)
- Qt5 C++ GUI Programming Cookbook
- Python從入門(mén)到精通(第3版)
- 小程序從0到1:微信全棧工程師一本通
- 從程序員角度學(xué)習(xí)數(shù)據(jù)庫(kù)技術(shù)(藍(lán)橋杯軟件大賽培訓(xùn)教材-Java方向)
- TypeScript 2.x By Example
- IBM RUP參考與認(rèn)證指南
- 面向物聯(lián)網(wǎng)的Android應(yīng)用開(kāi)發(fā)與實(shí)踐
- BackTrack 5 Cookbook