tft每日頭條

 > 生活

 > python畫國旗講解

python畫國旗講解

生活 更新时间:2024-06-29 20:36:53

我們曾經用Python繪制了黨旗,也用Scratch繪制過國旗。不過在Python中繪制标準國旗并不簡單,我們采用的方法在數學上稱為解析法。

1.準備工作

1.國旗标準圖案及分析

python畫國旗講解(Python繪制标準國旗)1

把整個國旗換成直角坐标系,中心坐标為(0,0)。每個小格邊長20,則國旗左上角坐标為(-300,200)、國旗長600,高400。五星所在的區域為第二象限,橫坐标為負,縱坐标為正。

大五星正立放置的,而4顆小五星則是頂點中心軸線正對着大五星的中心,即是大五星中心、小五星中心和小五星頂點在一條直線上,而且上下1、4兩顆和右側2、3兩顆是關于第五個橫格對稱的。

2.五星的坐标及相關參數

設定坐标的标度為每個小格20,大五星的中心坐标為(-200,100),半徑60,頂點坐标為(-200,160)。

小五星的半徑為20。4個小五星中心坐标分别為(-100,160)、(-60,120)、(-60,60)、(-100,20)。

大五星頂點中心正上方,橫向長度為0,縱向為3。小五星對應大五星中心相對橫縱長度(x,y)分别為(5,3)、(7,1)、(7,-2)、(5,-4)。負值表示在相對中心的下方。

3.三角函數及反三角函數

小五星的頂點要正對着大五星的中心,所以需要知道小五星頂點中心軸的方向角。具體算法從略,我在源代碼中做了簡單的注釋。

2.程序設計

1.導入Turtle庫和Math庫

Turtle是小海龜繪圖庫,Math是數學庫,我們要用到裡面的三角函數和反三角函數,以及圓周率pi值。from導入方法能使程序簡化一點,詳細作用請參考其它資料。

python畫國旗講解(Python繪制标準國旗)2

2.國旗外圍框

python畫國旗講解(Python繪制标準國旗)3

3.大五星

大五星的起始點,我們能最準确得到的,就是上面的頂點,坐标為(-300,200),其它頂點均不是整數。這個頂點要畫五角星,需要向斜下方開始畫,我們使用絕對角度setheading()設置小海龜的方向。

大五星的直徑為120,頂角為360,綠色直角三角形中,斜邊是直徑,上側銳角為180(藍色箭頭所指),所以移動的步數為直角三角形中180角的鄰邊,即120*cos(18*pi/180),這裡注意18度角要轉換為弧度制,所以要乘以,除以180。Turtle運動方向為圖中白色箭頭方向。

python畫國旗講解(Python繪制标準國旗)4

python畫國旗講解(Python繪制标準國旗)5

4.四個小五星

(1)1号小五星中心相對大五星中心,橫x=5格,縱y=3格,那麼這個銳角的正切值tanA=y/x=3/5,數學上這個銳角的大小為arctan3/5,右轉18度角,才是白色線用箭頭所指方向。

python畫國旗講解(Python繪制标準國旗)6

在Python中有兩個反正切函數,atan(x)和atan2(y,x),它倆的區别在于,第一個函數隻需要一個參數,比如atan(3/5),而第二個函數需要兩個參數atan2(3,5)。那麼他們的區别在哪裡呢?就是正切函數的定義域問題,90度時,正切值沒有意義,即atan(3/0)沒有意義,不能返回90度角度值,而atan2(3,0)能返回90度值。因而我們使用第二個函數求解。

由于海龜起始角度很難計算,因而使用絕對角度setheading(),這樣就能準确地計算海龜的方向。

python畫國旗講解(Python繪制标準國旗)7

(2)其它2、3、4号五星和1号五星類似,就是起始位置和相對大五星中心和橫縱長度不同,因而程序就具有重複性,我們可以将重複性的代碼封裝起來,每次畫五星調用他就可以了,這就是自定義函數。

5.自定義函數

畫小五星需要五角星的中心坐标、外接圓半徑和所畫五角星相對大五星中心的橫縱長度。因而封裝的函數,需要這5個參數。

3.整體測試

1.更新程序并測試

python畫國旗講解(Python繪制标準國旗)8

通過大五星和1号小五星調用自定義函數進行反複測試。

2.完成全部代碼

測試成功後補全其他小五星參數。設置速度,可以利用(speed())函數,速度值從 1 到 10,畫線和海龜轉向的動畫效果逐級加快。

python畫國旗講解(Python繪制标準國旗)9

3.總結

本以為很簡單的程序,沒想到涉及了不少三角函數的相關知識,在Turtle坐标的定義和高中數學是完全一緻的。這更有助于學生的學習。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved