在今年第24期繪制標準黨旗的案例中,我們在畫鐮刀時遇到了一個問題,在兩點間畫兩條圓弧,即使封閉也只會填充出一個半圓,而不是我們期望的鐮刀。于是我就想到Python的填充究竟遵循哪些規(guī)律呢?
這個Python案例也是等級考試一級內(nèi)容的延伸知識點。
填充問題,是Python考試中turtle的重要知識點。
1. 要設(shè)置填充顏色,有兩種方法:
(1)color(“畫筆顏色”,“填充顏色”);如color(“red”,“green”)。
(2)fillcolor(“填充顏色”)。
2.要使用填充命令:begin_fill()和end_fill()開始填充和結(jié)束填充。
3.需要填充的語句塊必須在填充命令中間。
4.填充的圖形必須是封閉圖形。
以上是Python課程里講解的知識點,那么這足夠完成我們需要的填充嗎?
我們根據(jù)這些基本知識,做幾個封閉圖形,看看填充情況,這時我們自然會發(fā)現(xiàn):填充是有規(guī)律的(世上萬物皆有律)!所以我們的思路就是做基本程序,解基本問題。
根據(jù)turtle知識和填充的基本要求,我設(shè)計了幾個畫月牙的實例,運行后看看有什么規(guī)律。
1. 填充問題分析
(1)實例一(圖1)
運行后發(fā)現(xiàn),雖然畫出了封閉曲線,但沒有按照我們的思路填充一個彎月,而是填充了整個半圓(圖2)。
(2)實例二(圖3)
修改上述代碼,我們先從下方起點畫到上方頂點后,直接從上方頂點畫回到下方起點,中間沒有抬筆過程。這樣畫出的也是一個封閉曲線,填充正常(圖4)!
其實上兩例中,例子1的第11行和第12行代碼,例子2的第7行到第9行,旋轉(zhuǎn)的角度和圓弧半徑都是經(jīng)過幾次修改測試得到的。
這些角度和圓弧半徑不影響后面的規(guī)律驗證。
(3)實例三
實例三從同一點出發(fā),畫封閉圖形,運行結(jié)果,大家可以看到,填充不正常(圖5)。
(4)實例四
實例四也是從同一點出發(fā),畫封閉圖形,運行結(jié)果,大家可以看到,填充正常(圖6)。
2. 結(jié)論
那么問題來了,從同一點出發(fā)畫的兩個圖形,填充效果怎么會不同?
通過試驗和分析,我總結(jié)出一個結(jié)論:涉及圓弧圖形的填充時,默認為弧線內(nèi)填充(圓心和弧線之間)。當需要外側(cè)填充時,必須是用turtle順次畫出的封閉曲線才能正常填充。根據(jù)我們總結(jié)的規(guī)律,將實例三做修改,經(jīng)過測試,證明了這結(jié)論正確(圖7)。
理解這個關(guān)鍵所在后,大家可以自己編程測試。下面我們就利用這個結(jié)論來畫出任意大小的月相,當然還是先從簡單的開始。
1.月亮基本代碼
月有陰晴圓缺,怎么畫呢?使用circle(半徑,弧度數(shù)如果不規(guī)定則畫圓,步數(shù)如果給出就畫出多邊形)命令(圖8)。
同樣,代碼第8行半徑和角度,第9行的距離,也是我一點點修改、測試出來的。運行效果如圖,發(fā)現(xiàn)月牙大了(圖9)。