搜尋

繪製圓餅圖

這篇教學會利用 Scratch 的畫筆功能,搭配簡單的「畫圓」數學式,根據清單的數值,在畫布裡快速繪製圓餅圖。

快速導覽:

圓形 ( 圓餅圖 ) 公式

圓餅圖其實是「圓形」圖案的變形版本,差別在於圓形要繪製一整圈 360 度,圓餅圖則只需繪製固定的角度,繪製圓形的公式如下:

  • 圓心:(x0,y0)
  • 半徑:r
  • 夾角:θ ( 角度 )
  • 圓周上每個點的 x = x0 + r × cos(θ)
  • 圓周上每個點的 y = y0 + r × sin(θ)

Scratch 教學 - 繪製圓餅圖 - 圓形 ( 圓餅圖 ) 公式

繪製圓形與扇形

首先使用「繪圖」工具建立一個「空白」的角色,空白的角色表示只有一個造型,且造型為空。

Scratch 教學 - 繪製圓餅圖 - 建立一個「空白」的角色

根據公式撰寫程式,使用重複 360 次的方式 ( 圓周為 360 度 ),就能將角色定位在圓形圓周的每個點的座標上,運用畫筆就能畫出一個圓心 (0, 0) 半徑 100 的空心圓形。

Scratch 教學 - 繪製圓餅圖 - 將角色定位在圓形圓周的每個點的座標上

由於 Scratch 的重複迴圈搭配定位積木,預設有 0.03 秒的等待時間,完成後點擊綠旗就會看見舞台上「逐漸顯示」圓形。

Scratch 教學 - 繪製圓餅圖 - 舞台上「逐漸顯示」圓形

如果要將圓形改成扇形,則要從「圓心下筆」,下筆後將座標移動到圓形的圓周,等待前往指定的角度後,再將畫筆移動回圓心

Scratch 教學 - 繪製圓餅圖 - 將圓形改成扇形

完成後點擊綠旗就會看見舞台上「逐漸顯示」扇形。

Scratch 教學 - 繪製圓餅圖 - 舞台上「逐漸顯示」扇形

使用函式,勾選執行完畢再更新畫面

為了避免 Scratch 預設的 0.03 秒延遲,造成緩慢的繪圖過程,可以新增一個名為「繪製圓形」的函式,勾選「執行完畢再更新畫面」,勾選後 Scratch 就會在函式裡取消預設的等待延遲

Scratch 教學 - 繪製圓餅圖 - 執行完畢再更新畫面

將剛剛繪製圓形的程式積木放到函式裡,執行函式後,舞台上就會立刻出現一個圓形。

Scratch 教學 - 繪製圓餅圖 - 舞台上就會立刻出現一個圓形

為了讓函式更能夠「重複利用」,編輯「繪製圓形」函式,替函式加上 x、y、r 和 angle 四個參數與說明文字,如此一來就能單純改變參數,重複利用函式。

Scratch 教學 - 繪製圓餅圖 - 替函式加上 x、y、r 和 angle 四個參數與說明文字

將函式的參數按照下圖放到指定的位置,並在繪圖結束後停筆。

Scratch 教學 - 繪製圓餅圖 - 替函式加上 x、y、r 和 angle 四個參數與說明文字

完成後執行程式,舞台中就會立刻出現兩個圓 ( 因為執行不同參數的函式兩次 )。

Scratch 教學 - 繪製圓餅圖 - 舞台中就會立刻出現兩個圓

下圖的程式碼執行後,會在舞台中畫出兩個扇形。

Scratch 教學 - 繪製圓餅圖 - 在舞台中畫出兩個扇形

繪製圓餅圖

圓餅圖的原理就是「多個扇形的組合」,首先在原本的扇形程式碼裡,加入「返回圓心」的積木,執行後就會產生許多「密集的放射線」,這些放射線只要足夠密集,就能產生「實心」的扇形,以下圖為例,如果以每隔一度的方式繪製放射線,還是會看到一些背景顏色 ( 放射線越往外,彼此的間距就會變大 )。

Scratch 教學 - 繪製圓餅圖 - 這些放射線只要足夠密集,就能產生「實心」的扇形

修改程式碼,將重複的次數增加 10 倍,每次重複改變的角度改為 1/10 倍,就能得到漂亮的實心圖案。

Scratch 教學 - 繪製圓餅圖 - 得到漂亮的實心圖案

為了可以調整扇形的「起始角度」和「顏色」,按照下圖將「繪製圓形」函式改名成「繪製扇形」,並加入 deg1、deg2 和 color 參數 ( deg1 由 angle 參數修改而來 )。

Scratch 教學 - 繪製圓餅圖 - 為了可以調整扇形的「起始角度」和「顏色」

修改函式內容,將 deg1、deg2 和 color 參數放入指定的位置,並增加 repeat 參數計算重複次數,因為在 deg2 大於 deg1 的正常狀態下,扇形會「逆時針」繪製,但如果 deg1 大於 deg2 就會變成順時針繪製,為了避免這個狀況,需要將 deg2 增加 360,才能正常的逆時針繪圖

此外將原本筆跡顏色積木,改成可以透過數字調整的「筆跡顏色設定」積木,並加入筆跡亮度 100 積木。

Scratch 教學 - 繪製圓餅圖 - 增加 repeat 參數計算重複次數

多次執行函式,就能在舞台中畫出圓餅圖。

Scratch 教學 - 繪製圓餅圖 - 在舞台中畫出圓餅圖

根據資料繪製圓餅圖

在點擊綠旗的時候,新增 data 清單和 total 總數,參考下圖,在清單裡加入 5~10 筆 100~1000 的隨機數,並計算清單數值的總和。

Scratch 教學 - 繪製圓餅圖 - 新增 data 清單和 total 總數

新增名為「繪製圓餅圖」函式,勾選「執行完畢再更新畫面」。

Scratch 教學 - 繪製圓餅圖 - 執行完畢再更新畫面

參考下圖編輯函式內容,讓函式可以根據資料和資料總和的關係,計算出起始角度和結束角度,並呼叫「繪製扇形」函式進行繪圖。

Scratch 教學 - 繪製圓餅圖 - 新增 data 清單和 total 總數

完成後,執行函式,就能夠根據資料,得到漂亮的圓餅圖。

Scratch 教學 - 繪製圓餅圖

範例解答

範例解答:Scratch 教學 - 繪製圓餅圖

意見回饋

如果有任何建議或問題,可傳送「意見表單」給我,謝謝~

Scratch 教學

基本介紹

關於 Scratch 使用 Scratch 3 註冊與登入 操作介面 我的東西

圖形與聲音

繪製造型&背景 編輯音效

程式積木

積木種類 動作 外觀 音效 事件 控制 偵測 運算 變數 清單 函式積木

擴充功能

音樂 畫筆 視訊偵測 文字轉語音 翻譯

技巧&觀念

全域變數、區域變數 深入理解區域變數 控制指定分身 控制所有分身的方法 雲端變數 雲端變數記錄文字 變數串接文字 判斷英文字母大小寫 中斷與停止程式 廣播訊息並等待 鍵盤與滑鼠 滑鼠點擊與長按 偵測所有鍵盤按鍵 點擊隱藏的角色 突破角色尺寸限制 角色與舞台邊界 重複積木的等待時間 音樂暫停與繼續播放 使用造型名稱建立清單 使用造型代替變數 文字轉清單 清單合併為文字 判斷兩個清單是否相同 複製清單、反轉清單 清單數字排序 清單最大值最小值

入門範例

鍵盤控制貓咪 指向中間的箭頭 水果音樂鋼琴 貓咪的影分身之術 貓咪的細胞分裂 螃蟹跑來跑去 吃水果 摸蝴蝶 小狗追棒球 魚兒水中游 小鳥往前飛 舞棍阿伯 小時鐘 搖骰子 轉動的眼球 抽獎輪盤 大樂透電腦選號 卡牌抽籤 ( 20 中 1 ) 移動到邊緣切換場景 人物依序跳舞 ( 廣播 ) 按鈕控制貓咪 ( 廣播 )

進階範例

貓咪跑步 ( 連續背景 ) 貓咪跑步 ( 超長背景 ) 大型數字 ( 圖形數字 ) 拖拉怪獸碰撞牆壁 鍵盤鋼琴 ( 記錄音符 ) 中文字逐字稿 英文字逐字稿 計算機 1 ( 顯示數字 ) 計算機 2 ( 加減乘除 ) 雲端聊天室 音樂播放器 推貓咪 ( 視訊偵測 ) 圍捕小魚 ( 視訊偵測 ) 戳泡泡 ( 視訊偵測 )

視覺特效範例

視差效果 水中吐泡泡 雪花隨風飄 鍵盤鋼琴 ( 音符動畫 ) 無限循環畫中畫 水底探照燈 狙擊望遠鏡 ( 兩倍變焦 ) 貓咪萬花筒 仙女棒 ( 光跡效果 ) 駭客任務背景特效 放煙火 1 ( 往上發射 ) 放煙火 2 ( 爆炸效果 )

繪圖範例

鏡射畫圖 ( 對稱圖形 ) 小畫家 ( 舞台上畫圖 ) 記錄畫圖軌跡 繪製圓形 繪製橢圓形 繪製立方體 ( 會動 ) 繪製正多邊形 繪製正多角星形 ( 單純 ) 繪製正多角星形 ( 多線 ) 繪製拋物線 繪製折線圖 繪製圓餅圖 繪製圓餅圖 ( 指示線 ) 蜘蛛結網 ( 八邊形網 ) 繪製舞台方格 繪製正弦波形 ( sin ) 正弦波毛毛蟲動畫 顯示聲波圖形

物理&模擬範例

鐘擺運動 簡單磁鐵效果 兩個磁鐵的磁力線 立體空間 ( 三度空間 ) 循跡移動 拋物線發射炮彈 地球繞著太陽轉 彈跳的籃球 電風扇 ( 控制強度 ) 拉不走的彈力球 慣性移動 ( 滑鼠 ) 慣性移動 ( 鍵盤 )

入門遊戲範例

猴子接香蕉 打地鼠 打地鼠 ( 體感視訊偵測 ) 刮刮樂 吹風機吹頭髮 太空狗閃躲隕石 九九乘法測驗 英文單字測驗 釣魚遊戲 拍西瓜 ( 儲存最高分 ) 寶可夢猜猜我是誰 ( 基本 ) 形狀配對拼圖 台灣地圖拼圖 英文打字機 英文打字機 ( 判斷大小寫 ) 射擊外星人 猜數字 ( 猜大小 ) 猜數字 ( 幾 A 幾 B ) 連連看 ( 產生器 ) 連連看

進階遊戲範例

青蛙過河 青蛙過馬路 反彈球 ( 乒乓球 ) 打磚塊 狙擊氣球 ( 兩倍變焦 ) Flappy Bird Flappy Bird ( 聲控版 ) 走迷宮 ( 基本 ) 大型迷宮 ( 鍵盤控制 ) 大型迷宮 ( 滑鼠控制 ) 翻卡記憶遊戲 翻卡記憶遊戲 ( 改良版 ) 井字棋 ( 圈圈叉叉 ) 九宮格拼圖 九宮格拼圖 ( 改良版 ) 音階記憶 貪吃蛇 ( 分身版 ) 貪吃蛇 ( 畫筆版 ) 小雞下樓梯 拉霸機

團康遊戲範例

搖骰子 ( 1~3 個 ) 比手畫腳 ( 猜動物 ) 音樂傳球遊戲 大聲公 ( 比賽誰的氣長 ) 抽籤 ( 可調整中籤數量 ) 轉盤指針 ( 指到誰就當鬼 ) 倒數計時器 ( 基本版 ) 倒數計時器 ( 大數字版 )

遊戲設計技巧

角色 ( 地上移動 ) 角色 ( 蹲下、左右轉 ) 角色 ( 跳耀、兩段跳 ) 角色 ( 牆壁、爬牆 ) 地圖 ( 清單轉換 ) 地圖 ( 二維陣列 ) 地圖 ( 控制移動 ) 地圖 ( 牆壁碰撞偵測 ) 地圖 ( 吃東西偵測 ) 俄羅斯方塊 ( 角色與背景 ) 俄羅斯方塊 ( 移動與碰撞 ) 俄羅斯方塊 ( 放置方塊 ) 俄羅斯方塊 ( 消除完成方塊 ) 俄羅斯方塊 ( 下個形狀 )