50行Python代碼繪製滿天星

今天用50行Python代碼繪製了星空滿天的動圖。解釋下爲何要作這樣一件事,由於昨天是青年節,但願經過這樣的方式去表達出每一個年輕人都像是星空中的一顆星星,散發這本身的光芒照亮整個夜空。效果以下:web

user-gold-cdn.xitu.io/2020/5/6/17…api

我用的是 turtle 工具,它是 Python 的標準庫,能夠描繪繪圖軌跡,操做簡單、快捷,api通俗易懂。dom

下面來看下具體代碼,首先作一些全局的設置編輯器

import turtle
import random
import time
 # 設置畫筆大小,數值越小畫出的線條越細 turtle.pensize(1) # 繪畫延遲,單位:毫秒,數值越小繪畫速度越快 turtle.delay(1) # 隱藏畫筆 turtle.hideturtle() # 設置畫布大小 turtle.setup(800, 800) 複製代碼

這裏主要設置 turtle 的畫筆大小、繪圖延遲和畫布大小。ide

繪製星空最關鍵的就是五角星,下面咱們就來建立一個繪製五角星的函數函數

def star(x, y, left_angle, edge_len, color='yellow'):
    """ 畫一個五角星 :param x: 起始x座標 :param y: 起始y座標 :param left_angle: 畫筆方向逆時針轉動度數 :param edge_len: 五角星邊的長度 :param color: 五角星顏色 :return: """
    # 五角星邊的顏色
    turtle.pencolor(color)
    # 五角星內部填充色
    turtle.fillcolor(color)
    # 繪製速度,0表明最快,1-10:數字越大越快
    turtle.speed(0)
 turtle.pu() # 擡起畫筆 turtle.goto(x, y) # 移動到初始位置 turtle.pd() # 放下畫筆  turtle.begin_fill() # 開始填充圖形 # 畫筆方向以水平方向爲基準 # 逆時針轉動 left_angle 度 turtle.left(left_angle) # 循環繪製五角星的 5 條邊 for _ in range(5): # 向畫筆方向移動edge_len像素長度 # 即:繪製五角星的一條邊 turtle.forward(edge_len) # 畫筆方向順時針旋轉144度 # 因爲五角星內角是36度,所以旋轉180-36=144度 turtle.right(144) turtle.end_fill() # 填充完成 # 將畫筆方向恢復爲水平方向,以避免影響後續畫圖 turtle.left(-left_angle) 複製代碼

上述代碼主要涉及 tutle api 的使用,代碼註釋已有說明,這裏就再也不贅述了。工具

單獨解釋下爲何調用turtle.left(left_angle)函數來旋轉畫筆的方向。默認畫筆的方向是水平的,若是不旋轉,那麼畫出來的五角星都是同一個方向的,整個畫面看起來沒有層次感。下圖是這兩種效果的對比 另外,調用turtle.speed(1)能夠看到慢速的繪圖過程。spa

有了五角星以後,咱們就能夠不斷調用star()函數實現漫天星空的效果了,代碼以下code

# 繪製滿天星
# 添加背景圖,須要是gif格式
turtle.bgpic('./bg.gif')
# 繪製 200 顆星星
for _ in range(200):  
    # 隨機生成起始座標、畫筆方向和五角星邊長
    rand_x = random.randint(-400, 400)
    rand_y = random.randint(0, 400)
    edge_len = random.randint(3, 8)
    left_angle = random.randint(0, 180)
    star(rand_x, rand_y, left_angle, edge_len, '#B7C5D2')
複製代碼

上述代碼比較簡單這裏就不解釋了,下面繼續繪製五星紅旗cdn

# 繪製五星紅旗
# 清空以前圖形
turtle.clear()
# 從新設置背景圖
turtle.bgpic('./red_bg.gif')
 # 一次繪製國旗上的五顆星 star(-360, 320, 0, 80) star(-260, 350, 40, 18) star(-235, 330, 20, 18) star(-235, 295, 0, 18) star(-260, 270, -10, 18)  # 讓畫布停留 turtle.done() 複製代碼

這樣,整個代碼就介紹完了,代碼量不大且比較容易理解,須要源碼的朋友能夠在公衆號回覆關鍵字 星空 獲取。

五四青年節快樂,補一個問候。

歡迎公衆號「渡碼」,輸出別地兒看不到的乾貨。

相關文章
相關標籤/搜索