您現在的位置是:首頁 > 網路遊戲首頁網路遊戲
少兒程式設計Python系列之七:拼圖裡的幾何圖形——“聰明的烏鴉”
- 2022-02-20
烏鴉翅膀怎麼畫
《烏鴉喝水》是我們小學課本里學到的一則寓言故事。它告訴我們:
遇到困難要善於思考、勤懂腦,再困難的事情也會迎刃而解。
同時,這個故事也讓我們認識到,烏鴉也是極聰明的一類動物,雖然它的腦容量不到人腦的1%,但具有完全自主的智慧,能感知、認知、推理、學習和執行。
分享這樣一則科學小故事:
一隻烏鴉找到堅果,但卻砸不開。它發現把堅果放在馬路上讓車軋過去可弄開堅果,但飛馳的車輛很危險;它又發現靠近紅綠燈的路口,車子和人有時會停下來。於是,它把堅果拋在斑馬線上,等車子行人通過後的間歇去吃被砸開的堅果。
本篇就帶領讀者一起,通過幾何圖形學習如何繪製一隻聰明的烏鴉。
01
圖形分析
首先匯入海龜庫,建立畫筆、停止動畫等操作是每個作品必須牢記的內容。本文建立的畫筆名稱為
p
。基礎程式碼輪廓如下:
import
turtle
p=turtle。Pen
()
……
turtle。done
()
等腰三角形構成一個長又尖的
嘴巴
,兩個90°的扇形上下反向擺放組成
脖子
,一個矩形加一個半圓構成
身體
的主體部分,上下兩個彎彎的
月牙
形狀的翅膀不斷讓其更具靈動性,再加上身後三根彎彎的
短線條
的尾巴。最後在右下角繪上本作品的主題:
CROW
(烏鴉),一隻聰明的烏鴉就勾勒完成。
等腰三角形 1個——嘴巴
90°扇形 2個——脖子
矩形 1個——身體部分
半圓 1個——身體部分
月牙 2個——翅膀
短線條 3個——尾巴
02
重難點分析
扇形的繪製在前面
小魚
的繪製案例中有重點講解。請參考如下連結:
少兒程式設計Python系列之三:拼圖裡的幾何圖形——“一條小魚”
烏鴉的翅膀是透過兩個圓形錯位重疊的遮擋構造而成。如下圖:先定位到指定位置座標(40,0),繪製一個直徑為120的紅點;在向左移動一小段位置,即定位(5,0)座標,繪製一個直徑為120的藍點,並遮擋了紅點的大半部分。剩餘的紅色區域即為月牙效果,修改藍點為白色,與背景顏色吻合,則整個月牙效果凸顯。
烏鴉的尾巴,設定畫筆變粗,透過畫弧線的方式來完成,即:呼叫
circle(半徑,弧度)
,設定引數即可。
其他部分為規則形狀,繪製時控制好定位,確定角度即可。為了更好的佈局定位,
建議從身體矩形開始繪製,依次是脖子、嘴、尾巴、翅膀等部分。
03
圖形繪製(完整程式碼)
參考程式碼如下:
1、矩形——身體前半部分
p。penup
()
p。goto
(
-30
,
60
)
p。pendown
()
p。pencolor
(
“#00CACA”
)
p。fillcolor
(
“#00CACA”
)
p。begin_fill
()
for
i
in
range
(
4
):
if
i%
2
==
0
:
p。forward
(
60
)
else
:
p。forward
(
120
)
p。right
(
90
)
p。end_fill
()
上述程式碼中,注意迴圈巢狀結構中的程式碼縮排。
2、扇形——脖子
p。penup
()
p。goto
(
-40
,
60
)
p。pendown
()
p。pencolor
(
“green”
)
p。fillcolor
(
“green”
)
p。begin_fill
()
p。setheading
(
180
)
p。forward
(
60
)
p。left
(
90
)
p。circle
(
60
,
90
)
p。left
(
90
)
p。forward
(
60
)
p。end_fill
()
p。pencolor
(
“#00CACA”
)
p。fillcolor
(
“#00CACA”
)
p。penup
()
p。goto
(
-100
,
70
)
p。pendown
()
p。begin_fill
()
p。setheading
(
90
)
p。forward
(
60
)
p。right
(
90
)
p。circle
(
-60
,
90
)
p。right
(
90
)
p。forward
(
60
)
p。end_fill
()
3、等腰三角形——嘴
p。penup
()
p。goto
(
-110
,
70
)
p。pendown
()
p。pencolor
(
“yellow”
)
p。fillcolor
(
“yellow”
)
p。begin_fill
()
p。seth
(
90
)
p。forward
(
60
)
p。left
(
105
)
p。forward
(
120
)
p。left
(
150
)
p。forward
(
120
)
p。end_fill
()
4、半圓——身體後半部分
p。penup
()
p。goto
(
40
,
60
)
p。pendown
()
p。pencolor
(
“#ff0099”
)
p。fillcolor
(
“#ff0099”
)
p。begin_fill
()
p。seth
(
0
)
p。circle
(
-60
,
180
)
#向右旋轉
p。seth
(
90
)
p。forward
(
120
)
p。end_fill
()
5、短弧線——尾巴
p。penup
()
p。goto
(
110
,
30
)
p。pendown
()
p。pensize
(
15
)
p。pencolor
(
“green”
)
p。seth
(
5
)
p。circle
(
50
,
80
)
p。penup
()
p。goto
(
120
,
0
)
p。pendown
()
p。pencolor
(
“yellow”
)
p。seth
(
0
)
p。circle
(
50
,
80
)
p。penup
()
p。goto
(
120
,
-30
)
p。pendown
()
p。pencolor
(
“blue”
)
p。seth
(
-30
)
p。circle
(
50
,
80
)
6、月牙——翅膀
#繪製翅膀(上面)
p。penup
()
p。goto
(
40
,
130
)
p。pendown
()
p。pencolor
(
“red”
)
p。fillcolor
(
“red”
)
p。pensize
(
2
)
p。dot
(
120
)
p。goto
(
5
,
130
)
p。pencolor
(
“white”
)
p。dot
(
120
)
#繪製翅膀(下面)
p。penup
()
p。goto
(
50
,
-130
)
p。pendown
()
p。pencolor
(
“yellow”
)
p。dot
(
120
)
p。goto
(
90
,
-120
)
p。pencolor
(
“white”
)
p。dot
(
120
)
7、文字標註
#寫文字
p。penup
()
p。goto
(
200
,
-250
)
p。pendown
()
p。pencolor
(
“green”
)
p。write
(
“CROW”
,
font=
(
“Arial”
,
20
))
p。hideturtle
()
至此,完整圖形繪製完畢。
04
總結
本案例的重點是學習月牙的繪製技巧,當然還有其他方式同樣也可以實現。
提供的參考程式碼並非最佳化程式碼,讀者可以嘗試用函式封裝程式碼,或從其他的實現角度改寫程式碼。只有將所學知識轉化為應用實踐案例,學習才會更有意義。
一起來試試吧。