“Talk is cheap. Show me the code.”
― Linus Torvalds
老子第41章
上德若谷
大白若辱
大方無隅
大器晚成
大音希聲
大象無形
道隱無名
拳打千遍, 身法自然
本系列文章之連結
-
從turtle海龜動畫學習Python-高中彈性課程1 link
-
從turtle海龜動畫 學習 Python - 高中彈性課程系列 2 安裝 Python, 線上執行 Python link
-
從turtle海龜動畫 學習 Python - 高中彈性課程系列 3 烏龜繪圖 所需之Python基礎 link
-
從turtle海龜動畫 學習 Python - 高中彈性課程系列 4 烏龜開始畫圖 link
-
從turtle海龜動畫 學習 Python - 高中彈性課程系列 5 用函數封裝重複性指令-呼叫函數令烏龜畫正 n 邊形 link
-
從turtle海龜動畫 學習 Python - 高中彈性課程系列 6 畫多重旋轉圓,螺旋正方形 link
-
從turtle海龜動畫 學習 Python - 7 遞歸 recursive - 高中彈性課程系列 link
-
從turtle海龜動畫 學習 Python - 高中彈性課程系列 8 碎形 (分形 fractal) link
-
從turtle海龜動畫 學習 Python - 高中彈性課程系列 8.1 碎形 L-system link
-
從turtle海龜動畫 學習 Python - 高中彈性課程系列 9 Python 物件導向介紹 link
-
從turtle海龜動畫 學習 Python - 高中彈性課程系列 9.1 Python 物件導向的練習 link
-
從turtle海龜動畫 學習 Python - 高中彈性課程系列 10 藝術畫 自定義海龜形狀 link
-
從turtle海龜動畫 學習 Python - 高中彈性課程系列 10.1 藝術畫 python繪製天然雪花結晶 https://blog.csdn.net/m0_47985483/article/details/122262036 link
-
從turtle海龜動畫 學習 Python - 高中彈性課程系列 10.2 藝術畫 Python 製作生成式藝術 link
-
從turtle海龜動畫 學習 Python - 高中彈性課程系列 11.1 氣泡排序 - 用 turtle 呈現演算法之執行動作 link
-
從turtle海龜動畫 學習 Python - 高中彈性課程系列 11.2 maze 迷宮 - 用 turtle 呈現演算法之執行動作 link
-
從turtle海龜動畫 學習 Python - 高中彈性課程系列 11.3 連分數演算法與轉轉相除法- 用 turtle 呈現演算法之執行動作 link
-
從turtle海龜動畫 學習 Python - 高中彈性課程系列 11.4 最短路徑 Dijkstra- 用 turtle 呈現演算法之執行動作 link
文章目录
5. 烏龜開始畫圖
Ref:
A. 參考賴鵬仁老師講義: Python常用Turtle指令-例子講解.doc
B. Turtle的精采示範講義有碎形: SevenWaysToUseTurtle-PyCon2009.pdf
C. 官網 turtle module 手冊: Turtle graphics-Python 3.8 (舊版是24.1節).pdf
要進行烏龜繪圖, 需載入 turtle 模組,
而 turtle 是內建模組, 不須要另外安裝, 只需要在程式碼一開始寫入
import turtle
或是
from turtle import *
就可以開始執行 烏龜繪圖的所有動作
5.1 以下細講起手步驟:
- 必須先載入 turtle module,
>>>import turtle - 接著產生一個烏龜物件取名為 myTurtle
>>>myTurtle = turtle.Turtle()
會產生一個畫布, 有一個箭頭在原點處, 箭頭是烏龜預設的形狀 classic,
(註: 之後我們再改成烏龜的形狀, 下這個指令就可以改 myTurtle.shape(‘turtle’), 內建有6種形狀).
烏龜前進100單位
>>>myTurtle.forward(100)
烏龜左轉90度
>>>myTurtle.left(90)
烏龜再前進100單位
>>>myTurtle.forward(100)
如果要讓烏龜畫一個正方形, 就重複以上動作
>>> myTurtle.left(90)
>>> myTurtle.forward(100)
再做一次左轉及前進
>>> myTurtle.left(90)
>>> myTurtle.forward(100)
烏龜動作的基本指令
Move and draw 前進後退轉頭等:
forward() | fd() 前進
backward() | bk() | back() 後退
right() | rt() 右轉
left() | lt() 左轉
goto() | setpos() | setposition() 跳躍至
setx() 重設 x 座標
sety() 重設 y 座標
setheading() | seth() 重設前進方向
home() 回到預設狀態, 也就是 頭向右方, 位於原點
5.2 用 for 的方法執行重複性的動作 令烏龜畫正四邊形
以上我們重複"前進再左轉", 做了4次, 完成一個正四邊形,
現在我們可以改用 for 的方法 畫一個正方形,
程式碼會較精簡, 也一目明瞭,
以上的重複性動作, 改成如下
( myTurtle.reset() 會把畫面清除, 烏龜回到一開始的狀態.)
>>> myTurtle.reset()
>>> for i in range(1,5):
myTurtle.forward(100)
myTurtle.left(90)
5.3 用 for 的方法 令烏龜畫正五邊形
如果我們想將上面的畫正四邊形的程式碼直接重複利用, 會發現第一個須修改的是轉彎的角度, 不再是90度, 此時我們需計算出下圖的角度, 那正是烏龜畫正五邊形時, 頭部前進方向轉動的角度,
Ex: 請同學求出下圖正五邊形右下方兩向量之間的夾角, 即正五邊形的外角
Sol:
我們先將正五邊形切割為3個三角形, 如下圖
發現3個三角形的內角和加總, 就是正五邊形的內角和, 故
正五邊形的內角和
=
∑
n
=
1
3
三角形的內角和
=
∑
n
=
1
3
π
=
3
π
正五邊形的內角和 = \sum_{n=1}^{3} 三角形的內角和 = \sum_{n=1}^{3} \pi = 3 \pi
正五邊形的內角和=n=1∑3三角形的內角和=n=1∑3π=3π
則得到
正五邊形的內角
=
正五邊形的內角和
5
=
3
π
5
正五邊形的內角 = \frac{正五邊形的內角和}{5} = \frac{ 3 \pi}{5}
正五邊形的內角=5正五邊形的內角和=53π
則我們得到下圖
由此可得 正五邊形的外角
正五邊形的外角
=
π
−
正五邊形的內角
=
π
−
3
π
5
=
2
π
5
正五邊形的外角 = \pi - 正五邊形的內角 = \pi- \frac{ 3 \pi}{5} = \frac{ 2 \pi}{5}
正五邊形的外角=π−正五邊形的內角=π−53π=52π
經過以上推導, 得知
正五邊形的外角
=
2
π
5
=
72
°
正五邊形的外角=\frac{2\pi}{5}=72 \degree
正五邊形的外角=52π=72°
可以用 Python 簡單的計算 =
2
π
5
\frac{2\pi}{5}
52π 換算成degree是多少,
在 Python 要取用
π
\pi
π值, 要先載入 math 模組, 下
import math
再下
math.pi
由
1
π
r
a
d
i
a
n
=
180
°
1 \pi\; radian=180 \degree
1πradian=180°
可得
1
r
a
d
i
a
n
=
180
π
°
=
57.29577951308232
1 \; radian=\frac{180}{\pi} \;\degree =57.29577951308232
1radian=π180°=57.29577951308232
也就是 (一個 radian) 約等於 (57 degree)
故可以計算
2
π
5
\frac{2\pi}{5}
52π radian 約等於
2
π
5
∗
57
∼
2
∗
(
3.14
)
5
∗
57
∼
72
°
\frac{2\pi}{5}*57 \sim \frac{2*(3.14)}{5}*57 \sim 72 \degree
52π∗57∼52∗(3.14)∗57∼72°
以下計算得到為
72
°
72 \degree
72°.
>>> import math
>>> oneRadian = 180/math.pi
>>> oneRadian
57.29577951308232
>>> outerAngle = 2*math.pi/5
>>> outerAngle
1.2566370614359172
>>> outerAngle = 2*math.pi/5*oneRadian
>>> outerAngle
72.0
經過以上的討論, 我們可以將前一節畫正四邊形的程式碼直接重複利用, 如下
>>> import turtle
>>> myTurtle=turtle.Turtle()
>>> for i in range(1,6):
myTurtle.forward(100)
myTurtle.left(72)
5.4 turtlesize(n,m,k)
調整海龜外型、大小與顏色 畫一個正四邊形
調整顏色
S.fillcolor("blue")
# 海龜身上內部的顏色
S.pencolor("green")
# 畫筆顏色
以上兩個指令可以合併成一個
S.color("green", "blue")
調整大小
S.turtlesize(5)
#海龜大小
S.pensize(4)
#畫筆粗細
turtlesize(n,m,k)
事實上有3個參數, 分別是體寬, 身高, 及輪廓之厚度.
3個參數當你想要讓海龜是一個細長的長方形時(在官方 turtle模組的例子之一: sorting), 是很好用的.
海龜輪廓的顏色是跟畫筆一致
打開 IDLE 編輯器 執行多行一連串的程式指令
之前都是在 IDLE consola(終端機模式) 畫面下一行一行下指令, 如果程式碼多行時, 會有困擾, 終端機模式輸入多行指令並不方便, 故以下介紹使用 IDLE 的編輯區(小作家):
可以打開 IDLE 編輯器, 新增一個草稿檔, 在這個草稿檔上寫程式, 然後執行:
可以打開 IDLE 左上方 File/New File
, 產生一個空白的類似小作家編輯器, 輸入以下程式碼, 再按 F5
執行編譯(run), 會要求存此草稿檔, 你可以指定在例如, 桌面, 等, 例如以下:
我們可以在新開的編輯區輸入以下codes 去定義函數:
def adder(x, y):
return x + y
# Ref: 官網的文件: python-3.3.2-docs-pdf-a4
def adder(x, y):
return x + y
再在 IDLE consola 畫面下 adder(2,3)
等指令,
>>> adder(2,3)
5
所以, 底下的程式碼, 就改成在 草稿檔上寫了, 切記: 在編輯區輸入codes 完之後, 記得 按 F5
執行編譯(run).
兩種載入海龜模組方法
第一種載入海龜模組方法 from turtle import *
(不推薦)
此種方法較不建議使用, 會造成使用的這些海龜指令, 會讓讀程式碼的人無法分辨是不是內建的指令,
以下我們執行更改海龜形狀, 大小跟顏色的指令:
from turtle import *
S=Turtle()
S.shape("turtle") # 形狀設成烏龜
S.turtlesize(5) #烏龜大小, 可以有3個引數
# S.turtlesize(3, 5, 20) 表示長3倍寬5倍, 輪廓粗佔總體20%.
S.fillcolor("blue") # 烏龜身上內部的顏色
S.pencolor("green") # 畫筆顏色
# 以上兩個指令可以合併成一個 S.color("green", "blue")
S.pensize(4) #畫筆粗細
S.speed(50) # 烏龜移動速度
S.penup() # 提起畫筆
S.goto(0,-100) # 跳躍至此座標
S.pendown() # 放下畫筆
再加上畫正方形的 for loop,
for i in range(1,5):
S.fd(100)
S.lt(360/4)
就會出現以下的海龜之顏色大小與畫出之正方形, 畫布呈現執行動畫:
程式碼:
from turtle import *
S=Turtle()
S.shape("turtle") # 形狀設成烏龜
S.turtlesize(5) #烏龜大小
S.fillcolor("blue") # 烏龜身上內部的顏色
S.pencolor("green") # 畫筆顏色
S.pensize(4) #畫筆粗細
S.speed(50) # 烏龜移動速度
S.penup() # 提起畫筆
S.goto(0,-100) # 跳躍至此座標
S.pendown() # 放下畫筆
for i in range(1,5):
S.fd(100)
S.lt(360/4)
推薦使用另一種載入方法 import turtle
推薦用第二種方法較
如果是用
import turtle
則產生一個turtle 物件是使用以下:
S=turtle.Turtle()
指令前方需多一個 turtle. 的接頭, 讓人可以分辨出這是 turtle 模組的指令!
import turtle
S=turtle.Turtle()
S.shape("turtle") # 形狀設成烏龜
S.turtlesize(5) #烏龜大小
S.fillcolor("blue") # 烏龜身上內部的顏色
S.pencolor("green") # 畫筆顏色
S.pensize(10) #畫筆粗細
S.speed(50) # 烏龜移動速度
S.penup() # 提起畫筆
S.goto(0,-100) # 跳躍至此座標
S.pendown() # 放下畫筆
for i in range(1,5):
S.fd(100)
S.lt(360/4)
Ex: : 調整烏龜外型、大小與顏色 用 for 的方法 畫一個正五邊形
Ex: 調整烏龜外型、大小與顏色 用 for 的方法 畫一個正n邊形
Ex: 以上分別畫正方形, 正五邊形, 正 n 邊形 時, 烏龜每次需要轉多少度?