從turtle海龜動畫 學習 Python - 高中彈性課程系列 4 烏龜開始畫圖

46 篇文章 1 订阅
32 篇文章 1 订阅

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

  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() 會把畫面清除, 烏龜回到一開始的狀態.)

>>> 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=13三角形的內角和=n=13π=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) 約等於 (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π5752(3.14)5772°
以下計算得到為 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)

就會出現以下的海龜之顏色大小與畫出之正方形, 畫布呈現執行動畫:
Pyhton一個正四邊形
程式碼:

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 邊形 時, 烏龜每次需要轉多少度?

Ref

  1. https://docs.python.org/zh-tw/3/library/turtle.html#turtle.shape link

  2. https://docs.python.org/3/library/turtle.html#turtle.shape link

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值