- Python編程與幾何圖形
- 王振世
- 1756字
- 2020-05-15 16:42:30
2.3 編程知識點
(1)函數setheading()和forward()
我們知道,線段是兩個點之間的連線。知道兩個點的坐標,自然可以畫出這條線段來。從前面的介紹可以得知,如果畫筆在起點位置,用函數goto()可以畫出這條線段。
假若,現在我們只知道起點的位置、線段的長度,以及與橫軸正向的夾角,能否畫出這條線段來呢?從相關幾何知識可知,這樣的線段也是可以畫出來的。
在Python的turtle庫里,設置畫筆朝向的函數是setheading(),括弧里的參數為畫筆的角度。角度是以橫軸正向為0°,逆時針旋轉為正,順時針旋轉為負。前移畫筆一定長度的函數是forward(),括弧里參數是畫筆前移的像素值。
如圖2-4所示,畫AB線段,可以讓在A點的畫筆通過使用goto(20,20)移動到B點,也可以在A點設置畫筆的朝向為45°,然后前移AB線段的長度。根據勾股定理,從點(0,0)到點(20,20)的AB線段長約為28像素。

圖2-4 AB線段的畫法
turtle畫筆的初始位置在原點(0,0),線段的兩種畫法的程序代碼如圖2-5所示,左圖是已知線段另外一點的坐標是(20,20)的畫法;右圖是已知線段與橫軸的夾角是45°,長度為28像素的畫法。兩種方法畫出來的線段是一樣的。

圖2-5 線段的兩種畫法的程序代碼
(2)函數pensize()和pencolor()
在幾何知識中,線段是有長度和方向的,且由兩個端點的位置決定,沒有寬度和顏色的概念。但在turtle畫圖中,線段還有寬度和顏色的屬性。可以用函數pensize()指定畫筆的寬度,單位是像素,用函數pencolor()指定畫筆的顏色。畫不同寬度和不同顏色的4條線段的程序代碼如圖2-6所示。程序運行結果如圖2-7所示。

圖2-6 畫不同寬度和不同顏色的4條線段的程序代碼

圖2-7 程序運行結果:畫四條線段
(3)函數hideturtle()和showturtle()
在前面用turtle畫圖的例子中,程序運行完成后,總有一個黑色箭頭留在畫面上,這是畫筆最后的位置和朝向的指示。在設計不需要顯示畫筆的圖形時,可以使用函數hideturtle()來隱藏。如果需要顯示已經隱藏的畫筆,可以使用函數showturtle()完成。
如圖2-8所示的程序代碼,開始隱藏畫筆,也就是在畫前兩條線段時是看不到畫筆形狀的,畫完兩條線段后,顯示畫筆;在畫最后兩條線段的過程中,可以看到畫筆的形狀;在整個圖畫完后,再隱藏畫筆。程序運行結果如圖2-9所示。

圖2-8 隱藏和顯示畫筆的程序代碼

圖2-9 程序運行結果:隱藏畫筆
(4)顏色列表
列表是Python中一種特殊的數據序列。列表中的每個元素可以是Python的各種數據類型。元素放在方括號內,用逗號分隔。列表中的第一個索引(元素)是0,第二個索引是1,依此類推。
為了生成五顏六色的圖形,我們選用6種顏色,組成顏色列表colors,如圖2-10所示。

圖2-10 顏色列表的程序代碼
舉例來說,如圖2-11所示,從原點(0,0)出發,畫36條各種顏色的線。線的寬度為5像素,線條之間的夾角為360°/36=10°,即第i條線與橫軸正向的夾角為(10×i)°,畫筆的方向設置為setheading(10×i)。

圖2-11 畫從原點出發的36條各種顏色線條的程序代碼

線的顏色從下面顏色列表中取得。
假設顏色列表中有6種顏色,每畫6條線,顏色重復一次。循環畫36條線,我們用i%6(循環變量i對6取余)來做顏色索引。
每畫完一條線,都要抬筆,用函數goto(0,0)使畫筆回到原點,然后落筆,再用函數forward()畫下一條線。
程序運行結果如圖2-12所示。

圖2-12 程序運行結果:各種顏色的線條
(5)嵌套循環
在一個循環語句中包含另一個循環語句,叫做嵌套循環。嵌套循環是編程語言中常見的邏輯結構。那么嵌套循環在畫圖的過程中有什么用呢?前面我們用一層for循環畫了36條線。如果想在每條線的末端再畫三個點,就需要使用嵌套循環來解決了。嵌套循環在畫圖中完成的是兩個不同維度的循環要求。程序代碼如圖2-13所示。程序運行結果如圖2-14所示。

圖2-13 使用嵌套循環畫圖的程序代碼

圖2-14 程序運行結果:線加點圖形
(6)條件判斷
如果在特定的位置上,在不同的條件下需要用畫筆畫不同的圖形,這需要進行條件判斷,不同的條件下運行不同的畫圖程序代碼。在計算機編程語言中,條件判斷是一種常用的邏輯結構,是依據給定的邏輯運算結果(True或False),執行相應代碼的程序結構。


兩個分支的條件判斷結構如下:
三個以上分支的條件判斷結構,需要在兩個分支的條件判斷結構中,使用elif來增加新的條件分支,結構如下:
如圖2-15所示,這段代碼顯示了條件判斷語句的作用。首先,從Python的Shell上獲取用戶的選擇。如果用戶選擇1,即if(choice==1),畫一個100像素的紅點;如果用戶選擇其他,即else,畫一個100像素的藍點。

圖2-15 條件判斷示例程序代碼

- 黑客攻防從入門到精通(實戰秘笈版)
- 自然語言處理實戰:預訓練模型應用及其產品化
- 構建移動網站與APP:HTML 5移動開發入門與實戰(跨平臺移動開發叢書)
- Learning Bayesian Models with R
- R語言編程指南
- YARN Essentials
- Visual Basic程序設計習題解答與上機指導
- Windows Presentation Foundation Development Cookbook
- MATLAB定量決策五大類問題
- TypeScript項目開發實戰
- KnockoutJS Starter
- Android開發案例教程與項目實戰(在線實驗+在線自測)
- 響應式Web設計:HTML5和CSS3實戰(第2版)
- C語言程序設計實訓教程與水平考試指導
- Java高手是怎樣煉成的:原理、方法與實踐