陳染
國(guó)慶節(jié)就要到來(lái)了,今年國(guó)慶恰逢中華人民共和國(guó)成立70周年,在這個(gè)盛大節(jié)日來(lái)臨之際,中小學(xué)紛紛開(kāi)展了各種形式的愛(ài)國(guó)主義教育。愛(ài)國(guó)主義教育不僅僅是思想政治課程的工作任務(wù),更應(yīng)該融入每一個(gè)課程中。對(duì)于科技輔導(dǎo)員而言,將科技教育與愛(ài)國(guó)主義教育融合也是我們責(zé)無(wú)旁貸的工作責(zé)任,它體現(xiàn)在科技輔導(dǎo)員的工作任務(wù)和工作方法兩方面。
為了幫助科技輔導(dǎo)員更好地將科技教育與愛(ài)國(guó)主義教育結(jié)合起來(lái),9月初,科技學(xué)堂“Python turtle圖形編程入門(mén)”的牛毅昕老師設(shè)計(jì)了一節(jié)“用Python turtle繪制國(guó)旗”的課程。下面我們以此為例分析如何讓科技教育與愛(ài)國(guó)主義教育結(jié)合起來(lái)。
在這個(gè)任務(wù)中,學(xué)生需要用Python turtle繪制1面國(guó)旗(當(dāng)然,你也可以選擇其他編程語(yǔ)言作為繪制工具)。作為一次愛(ài)國(guó)主義教育導(dǎo)向的課程,我們?cè)谡n程開(kāi)始之前需要引導(dǎo)學(xué)生對(duì)國(guó)旗產(chǎn)生更深入的認(rèn)識(shí)。我們可以通過(guò)五星紅旗是怎么產(chǎn)生的,其象征和意義是什么等內(nèi)容作為課程引入部分,引導(dǎo)學(xué)生理解繪制國(guó)旗的意義。
我們都知道中國(guó)國(guó)旗是五星紅旗,但很少會(huì)有學(xué)生意識(shí)到并不是所有的五星紅旗都是國(guó)旗。如果直接讓學(xué)生繪制國(guó)旗,學(xué)生可能會(huì)繪制出各種似是而非的五星紅旗。作為國(guó)家象征,國(guó)旗繪制活動(dòng)更要注重準(zhǔn)確性,我們可以通過(guò)學(xué)習(xí)《中華人民共和國(guó)國(guó)旗法》讓學(xué)生們認(rèn)識(shí)到繪制國(guó)旗的嚴(yán)肅性?!吨腥A人民共和國(guó)國(guó)家標(biāo)準(zhǔn)·國(guó)旗(GB12982—2004)》(下文簡(jiǎn)稱(chēng)《標(biāo)準(zhǔn)》)詳細(xì)記載了國(guó)旗的形狀、顏色和規(guī)格。這是一個(gè)強(qiáng)制性標(biāo)準(zhǔn),是一個(gè)具有法規(guī)性質(zhì)的技術(shù)性規(guī)范。
《標(biāo)準(zhǔn)》的附錄為我們提供了詳細(xì)的國(guó)旗制法,我們可以從中學(xué)習(xí)到國(guó)旗設(shè)計(jì)中的很多數(shù)學(xué)知識(shí)。因此,在開(kāi)始用程序繪制之前,我們建議時(shí)間允許的教師先引導(dǎo)學(xué)生用直尺和圓規(guī)在紙面上繪制出國(guó)旗,這個(gè)過(guò)程不僅能提升學(xué)生的作圖能力,培養(yǎng)愛(ài)國(guó)主義精神,同時(shí)也是順理邏輯的過(guò)程,幫助學(xué)生更好地構(gòu)建程序設(shè)計(jì)思路。
接下來(lái)就是正式的繪制環(huán)節(jié)了,我們可以把任務(wù)分解成旗面、大五角星和4顆小五角星3部分。
《標(biāo)準(zhǔn)》對(duì)于國(guó)旗規(guī)格的描述是“旗面為紅色,長(zhǎng)方形,其長(zhǎng)與高為三與二之比”。這意味著我們需要定義長(zhǎng)寬比為3∶2的旗面,我們用以下代碼繪制出長(zhǎng)寬比滿(mǎn)足比例的旗面,并填充為紅色。在程序中,我們把起筆定在(-200,200)的位置,長(zhǎng)度定為438,寬度定為292,當(dāng)然,你可以自由設(shè)置長(zhǎng)度和高度的數(shù)值,只要符合3∶2的長(zhǎng)寬比就可以了。程序如下:
import turtle
turtle.speed(10)#繪制速度
turtle.up()
turtle.goto(-200,200)
turtle.down()
turtle.begin_fill()
turtle.fillcolor(“red”)
turtle.pencolor(“red”)
for I inrange(2):
turtle.forward(438)
turtle.right(90)
turtle.forward(292)
turtle.right(90)
turtle.end_fill()
畫(huà)出了紅色的旗面后,我們要將5顆五角星放置到旗面上?!稑?biāo)準(zhǔn)》對(duì)于五角星的描述是“一星較大,其外接圓直徑為旗高十分之三,居左;四星較小,其外接圓直徑為旗高十分之一,環(huán)拱于大星之右”。并且,《標(biāo)準(zhǔn)》附錄中的國(guó)旗制法詳細(xì)敘述了如何通過(guò)等分法確定五角星的位置。對(duì)于大五角星,其表述如下:“為便于確定五星之位置,先將旗面對(duì)分為四個(gè)相等的長(zhǎng)方形,將左上方之長(zhǎng)方形上下劃為十等分,左右劃分為十五等分。大五角星的中心點(diǎn),在該長(zhǎng)方形上五下五、左五右十之處,其畫(huà)法為:
以此點(diǎn)為圓心,以三等分為半徑作一圓,在此圓周上,定出五個(gè)等距離的點(diǎn),其一點(diǎn)須位于圓之正上方,然后將此五點(diǎn)中各相隔的兩點(diǎn)相聯(lián),使各成一直線(xiàn)。此五直線(xiàn)所構(gòu)之外輪廓線(xiàn),即為所需之大五角星,五角星之一個(gè)角尖正向上方?!?/p>
根據(jù)《標(biāo)準(zhǔn)》中的表述,我們可以計(jì)算出每一個(gè)星星的位置。前面我們已經(jīng)設(shè)置了旗面的坐標(biāo)位置、長(zhǎng)度和寬度,可以計(jì)算出大五角星的坐標(biāo)位置。在程序中我們將turtle的筆觸和填充顏色設(shè)置為黃色,把turtle移動(dòng)到起始位置,通過(guò)循環(huán)語(yǔ)句繪制出五角星,程序如下:
Import turtle
turtle.speed(10)
#更改海龜?shù)漠?huà)筆顏色和填充顏色
turtle.fillcolor(“yellow”)
turtle.pencolor(“yellow”)
turtle.up()
turtle.goto(-170,145)#五角星的坐標(biāo)
turtle.down()
turtle.begin_fill()
for x in range(5):
turtle.forward(50)#
turtle.right(144)#
turtle.end_fill()
值得注意的是,我們需要將for循環(huán)的部分放在begin_fill()和end_fill()之間,這樣我們才能將顏色填充到五角星中。同時(shí),begin_fill()和end_fill()方法一定要成對(duì)出現(xiàn),缺一不可。
完成了大五角星的繪制,我們可以繪制4顆小五角星了。首先還是查閱《標(biāo)準(zhǔn)》中關(guān)于4顆小五角星位置的描述:“四顆小五角星的中心點(diǎn),第一點(diǎn)在該長(zhǎng)方形上二下八、左十右五之處,第二點(diǎn)在上四下六、左十二右三之處,第三點(diǎn)在上七下三、左十二右三之處,第四點(diǎn)在上九下一、左十右五之處。其畫(huà)法為:以以上四點(diǎn)為加圓心,各以一等分為半徑,分別作四個(gè)圓。在每個(gè)圓上各定出五個(gè)等距離的點(diǎn),其中均須各有一點(diǎn)位于大五角星中心點(diǎn)與以上四個(gè)圓心的各聯(lián)結(jié)線(xiàn)上,然后用構(gòu)成大五角星的同樣方法,構(gòu)成小五角星。此四顆小五角星均各有一個(gè)角尖對(duì)大五角星的中心點(diǎn)?!?/p>
值得注意的是,每顆小五角星都有一角與大五角星的中心點(diǎn)相對(duì),也就是說(shuō),我們需要為每個(gè)小五角星設(shè)置不同的轉(zhuǎn)動(dòng)角度,我們可以通過(guò)平面幾何計(jì)算出每一顆星星轉(zhuǎn)動(dòng)的角度。對(duì)于低年級(jí)的學(xué)生而言,我們可以用量角器測(cè)量出每一顆星星的角度,這也是為什么我們建議教師們?cè)诨顒?dòng)開(kāi)始前引導(dǎo)學(xué)生手繪國(guó)旗的原因。在程序中,我們可以用turtle.setheading()語(yǔ)句實(shí)現(xiàn)星星的轉(zhuǎn)向,根據(jù)計(jì)算,從上到下4顆小五角星的轉(zhuǎn)向角度分別是305、30、3和300。
根據(jù)《標(biāo)準(zhǔn)》,我們換算出每顆小五角星的長(zhǎng)度是20,并根據(jù)平面幾何知識(shí)可以計(jì)算出每顆小五角星的具體坐標(biāo),從上到下4顆小五角星的坐標(biāo)分別是(-100,180)(-85,150)(-85,120)和(-100,100)。通過(guò)以下程序畫(huà)出第1個(gè)小五角星。
turtle.up()
turtle.goto(-100,180)
turtle.setheading(305)#設(shè)置當(dāng)前海龜朝向:會(huì)改變海龜?shù)姆较騮urtle.down()
turtle.begin_fill()
for i in range(5):
turtle.forward(20)
turtle.left(144)
turtle.end_fill()
調(diào)整turtle.setheading()和turtle.goto()的參數(shù),就可以繪制出剩下3顆小五角星,這里就不贅述具體的程序了。最后,別忘了在程序結(jié)尾處加上hideturtle()語(yǔ)句隱藏小海龜,并加上turtle.done()表示繪制完成,這樣我們的國(guó)旗就停留在屏幕上了。
turtle.hideturtle()
turtle.done()
通過(guò)用Python turtle繪制國(guó)旗的課程,科技教師提升了學(xué)生的愛(ài)國(guó)情感,讓學(xué)生更加嚴(yán)肅地對(duì)待國(guó)旗,同時(shí)也提升了學(xué)生的Python編程水平,這正是科技輔導(dǎo)員“提升青少年的文明素質(zhì)”的工作任務(wù)和“活動(dòng)內(nèi)容與德育結(jié)合的必要性和可行性”的工作原則的體現(xiàn)。