從 Logo 海龜繪圖 學習 Python – 高中彈性課程系列 4 烏龜開始畫圖


文章目录

    • 5. 烏龜開始畫圖
      • 5.1 以下細講起手步驟:
      • 5.2 用 for 的方法令烏龜畫正四邊形
      • 5.3 用 for 的方法令烏龜畫正五邊形
      • 5.4 調整烏龜外型、大小與顏色 畫一個正四邊形

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 以下細講起手步驟:

  1. 必須先載入 turtle module,
    >>>import turtle
  2. 接著產生一個烏龜物件取名為 myTurtle
    >>>myTurtle = turtle.Turtle()
    會產生一個畫布, 有一個箭頭在原點處, 箭頭是烏龜預設的形狀 classic,
    (註: 之後我們再改成烏龜的形狀, 下這個指令就可以改 myTurtle.shape(‘turtle’), 內建有6種形狀).

myTurtle = turtle.Turtle()

烏龜前進100單位
>>>myTurtle.forward(100)
myTurtle.forward(100)

烏龜左轉90度
>>>myTurtle.left(90)
myTurtle.left(90)

烏龜再前進100單位
>>>myTurtle.forward(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() 會把畫面清除, 烏龜回到一開始的狀態.)

1
2
3
4
>>> myTurtle.reset()
>>> for i in range(1,5):
   myTurtle.forward(100)
   myTurtle.left(90)

myTurtle_square_for_7

5.3 用 for 的方法令烏龜畫正五邊形

如果我們想將上面的畫正四邊形的程式碼直接重複利用, 會發現第一個須修改的是轉彎的角度, 不再是90度, 此時我們需計算出下圖的角度, 那正是烏龜畫正五邊形時, 頭部前進方向轉動的角度,
Ex: 請同學求出下圖正五邊形右下方兩向量之間的夾角, 即正五邊形的外角
烏龜繪圖_正五轉角
Sol:
我們先將正五邊形切割為3個三角形, 如下圖
烏龜繪圖_正五轉角_計算內角和.ggb
發現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π?
則我們得到下圖
烏龜繪圖_正五轉角_內角大小.ggb
由此可得 正五邊形的外角

=

π

?

=

π

?

3

π

5

=

2

π

5

正五邊形的外角 = \pi - 正五邊形的內角 = \pi- \frac{ 3 \pi}{5} = \frac{ 2 \pi}{5}

正五邊形的外角=π?正五邊形的內角=π?53π?=52π?
烏龜繪圖_正五轉角_外角大小.ggb
經過以上推導, 得知

=

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) 約等於 (52 degree)
故可以計算

2

π

5

\frac{2\pi}{5}

52π? radian 約等於

2

π

5

?

57

\frac{2\pi}{5}*57

52π??57
以下計算得到為

72

°

72 \degree

72°.

1
2
3
4
5
6
7
8
9
10
>>> 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

經過以上的討論, 我們可以將前一節畫正四邊形的程式碼直接重複利用, 如下

1
2
3
4
5
>>> import turtle
>>> myTurtle=turtle.Turtle()
>>> for i in range(1,6):
    myTurtle.forward(100)
    myTurtle.left(72)

烏龜繪圖_畫正五邊形

5.4 調整烏龜外型、大小與顏色 畫一個正四邊形

from turtle import *

T=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() # 放下畫筆

Pyhton一個正四邊形
程式碼:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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)

Ex: : 調整烏龜外型、大小與顏色 用 for 的方法 畫一個正五邊形
Ex: 調整烏龜外型、大小與顏色 用 for 的方法 畫一個正n邊形
Ex: 以上分別畫正方形, 正五邊形, 正 n 邊形 時, 烏龜每次需要轉多少度?