Python繪制浪漫星空的示例代碼
Python繪圖基礎(chǔ)
Turtle入門(mén)
Python的turtle是一個(gè)基于tkinter的Python圖形庫(kù),可以幫助初學(xué)者輕松地理解和繪制圖形。它模仿了一個(gè)烏龜,與繪圖窗口交互,畫(huà)筆隨烏龜移動(dòng)而移動(dòng),完成特定的繪圖任務(wù)。
turtle庫(kù)是Python標(biāo)準(zhǔn)庫(kù)中的一部分,所以在使用前不需要進(jìn)行任何安裝和下載。通過(guò)import turtle語(yǔ)句引入turtle庫(kù),就可以使用它提供的一些函數(shù)和方法了。
turtle庫(kù)中最基本的函數(shù)包括:
- turtle.forward(distance):向當(dāng)前方向移動(dòng)distance個(gè)像素的距離
- turtle.backward(distance):向相反方向移動(dòng)distance個(gè)像素的距離
- turtle.right(angle):向右旋轉(zhuǎn)angle度
- turtle.left(angle):向左旋轉(zhuǎn)angle度
- turtle.penup():抬起畫(huà)筆
- turtle.pendown():放下畫(huà)筆
- turtle.color(color):設(shè)置畫(huà)筆顏色
- turtle.pensize(size):設(shè)置畫(huà)筆大小
- turtle.speed(speed):設(shè)置畫(huà)筆速度
使用turtle庫(kù)繪制圖形時(shí),需要注意的是:
- 繪圖的起點(diǎn)在屏幕中心點(diǎn),即坐標(biāo)(0,0)處;
- turtle.forward()和turtle.backward()函數(shù)移動(dòng)的距離單位是像素;
- turtle.right()和turtle.left()函數(shù)旋轉(zhuǎn)的角度單位是度數(shù);
- turtle.color()函數(shù)可以接收顏色名稱(chēng)或RGB值作為參數(shù),例如“red”、“#FF0000”;
- turtle.speed()函數(shù)可以設(shè)置畫(huà)筆速度,速度越快越接近實(shí)時(shí);
當(dāng)需要繪制完多個(gè)圖形后,可以使用turtle.done()函數(shù)停止turtle工作。
總之,Python的turtle庫(kù)是一個(gè)非常好的圖形庫(kù),可以幫助初學(xué)者理解和掌握?qǐng)D形繪制的基礎(chǔ)知識(shí)。從簡(jiǎn)單的繪制幾何圖形開(kāi)始,逐漸掌握函數(shù)使用方法,最終能夠繪制出復(fù)雜的圖形。由于turtle庫(kù)的易學(xué)、易用,所以它也成為了Python繪圖庫(kù)中的一個(gè)入門(mén)品種。
Turtle繪圖
以下是turtle庫(kù)中的一些簡(jiǎn)單例子,您可以通過(guò)運(yùn)行這些代碼來(lái)了解turtle庫(kù)的使用方法:
1. 繪制一個(gè)正方形
import turtle for i in range(4): turtle.forward(100) turtle.right(90) turtle.done()
2. 繪制一個(gè)五角星
import turtle turtle.left(72) for i in range(5): turtle.forward(100) turtle.right(144) turtle.forward(100) turtle.left(72) turtle.done()
3. 繪制一個(gè)彩虹
import turtle colors = ["red", "orange", "yellow", "green", "blue", "purple"] turtle.pensize(10) for i in range(6): turtle.pencolor(colors[i]) turtle.circle(50) turtle.right(60) turtle.done()
4. 繪制一個(gè)螺旋線
import turtle turtle.pensize(2) for i in range(100): turtle.forward(i*2) turtle.right(90) turtle.done()
這些示例只是turtle庫(kù)中的一小部分,通過(guò)學(xué)習(xí)這些例子,您可以開(kāi)始熟悉turtle庫(kù)的使用方法,并且可以通過(guò)修改代碼來(lái)創(chuàng)造自己的圖形。
Python浪漫星空
程序設(shè)計(jì)
import math import turtle as tu import random as ra tu.setup(1.0, 1.0) tu.screensize(1.0, 1.0) # 設(shè)置畫(huà)布大小 tu.bgcolor('black') # 設(shè)置畫(huà)布顏色 t = tu.Pen() t.ht() # 隱藏畫(huà)筆 colors2 = ['yellow', 'gold', 'orange'] # 星星的顏色列表 colors3 = ['skyblue', 'white', 'cyan', 'aqua'] # 流星的顏色列表 class Star(): # 流星類(lèi) def __init__(self): self.x1 = -850 self.y1 = 300 self.x2 = ra.randint(-1500, 1000) # 星星的橫坐標(biāo) self.y2 = ra.randint(-500, 500) # 星星的縱坐標(biāo) self.r2 = ra.randint(1, 5) self.x3 = ra.randint(-1500, 1000) # 流星的橫坐標(biāo) self.y3 = ra.randint(-500, 500) # 流星的縱坐標(biāo) self.r3 = ra.randint(50, 100) # 流星的半徑 self.t = ra.randint(1, 3) self.speed2 = ra.randint(1, 3) # 星星流星移動(dòng)速度 self.speed3 = ra.randint(10, 15) # 流星的移動(dòng)速度 self.color2 = ra.choice(colors2) # 星星的顏色 self.color3 = ra.choice(colors3) # 流星的顏色 def moon(self): # 畫(huà)月亮 t.penup() t.goto(self.x1, self.y1) t.pendown() t.pencolor("yellow") t.begin_fill() t.fillcolor("gold") t.circle(66) t.end_fill() def star1(self): # 畫(huà)星星的函數(shù) t.pensize(1) # 設(shè)置畫(huà)筆大小 t.penup() # 提筆 t.goto(self.x2, self.y2) # 設(shè)置星星在畫(huà)布中的初始坐標(biāo) t.pendown() # 落筆 t.speed(0) # 畫(huà)星星的速度,范圍為0~10(0最快) t.color(self.color2) # 設(shè)置星星的外框顏色 t.begin_fill() # 開(kāi)始填色 t.fillcolor(self.color2) # 星星的內(nèi)部顏色 for i in range(5): # 循環(huán)畫(huà)星星 t.forward(self.r2) t.right(144) t.forward(self.r2) t.left(72) t.end_fill() # 結(jié)束填充顏色 def star2(self): # 畫(huà)流星函數(shù) t.pensize(1) # 流星的大小 t.penup() # 提筆 t.goto(self.x3, self.y3) # 隨機(jī)位置 t.pendown() # 落筆 t.color(self.color3) t.begin_fill() t.fillcolor(self.color3) t.setheading(-30) t.right(self.t) t.forward(self.r3) t.left(self.t) t.circle(self.r3 * math.sin(math.radians(self.t)), 180) t.left(self.t) t.forward(self.r3) t.end_fill() def move(self): # 移動(dòng)函數(shù) if self.x1 <= 850: # 當(dāng)月亮還在畫(huà)布中時(shí) self.x1 += 1 # 設(shè)置左右移動(dòng)速度 else: self.x1 = -850 if self.x2 <= 1000: # 當(dāng)星星還在畫(huà)布中時(shí) self.x2 += 2 * self.speed2 # 設(shè)置左右移動(dòng)速度 else: self.r2 = ra.randint(1, 5) self.x2 = ra.randint(-1500, -1000) self.speed2 = ra.randint(1, 3) self.color2 = ra.choice(colors2) if self.y3 >= -500: # 當(dāng)流星還在畫(huà)布中時(shí) self.y3 -= self.speed3 # 設(shè)置上下移動(dòng)速度 self.x3 += 2 * self.speed3 # 設(shè)置左右移動(dòng)速度 else: self.r3 = ra.randint(50, 100) self.t = ra.randint(1, 3) self.x3 = ra.randint(-1500, -750) self.y3 = ra.randint(-500,1000) self.speed3 = ra.randint(10, 15) self.color3 = ra.choice(colors3)
程序分析
此代碼實(shí)現(xiàn)了一個(gè)星空夜景的動(dòng)畫(huà)效果,包括月亮、星星和流星。整個(gè)代碼分為四個(gè)部分:初始化,定義類(lèi)Star,創(chuàng)建星星和流星對(duì)象,繪制動(dòng)畫(huà)。
首先,在初始化部分,引入了必要的庫(kù)和模塊,設(shè)置了畫(huà)布大小和背景顏色,并創(chuàng)建了畫(huà)筆對(duì)象t。接著定義了兩個(gè)顏色列表,colors2存儲(chǔ)星星顏色,colors3存儲(chǔ)流星顏色。
在定義Star類(lèi)部分,首先初始化了各個(gè)變量,包括星星和流星的坐標(biāo)、半徑和顏色等,其中坐標(biāo)、半徑、速度和顏色都是隨機(jī)生成的。然后定義了三個(gè)函數(shù),分別用于繪制月亮、星星和流星。繪制月亮使用了begin_fill()和end_fill()來(lái)填充黃色和金色,繪制星星使用了for循環(huán)來(lái)繪制五角星,繪制流星使用了circle()和setheading()方法來(lái)繪制弧線和轉(zhuǎn)向。最后定義了move()函數(shù)來(lái)控制各個(gè)星星和流星的移動(dòng),當(dāng)它們移動(dòng)出畫(huà)布范圍后,重新賦值坐標(biāo)和速度等參數(shù),使得它們能夠持續(xù)移動(dòng)。
在創(chuàng)建Star對(duì)象部分,首先創(chuàng)建了一個(gè)空的列表Stars,然后使用for循環(huán)創(chuàng)建100個(gè)Star對(duì)象,并將它們依次添加到列表Stars中。
最后,在繪制動(dòng)畫(huà)部分,使用while循環(huán)來(lái)不斷更新畫(huà)布,并在其中使用tu.tracer(0)來(lái)關(guān)閉圖形繪制時(shí)的延遲效果,從而使得繪制流暢。在每次循環(huán)時(shí),首先清空畫(huà)布,然后繪制月亮和所有的星星,最后繪制所有的流星,最后使用tu.update()方法將畫(huà)布更新。
總的來(lái)說(shuō),此代碼實(shí)現(xiàn)了一個(gè)星空夜景的動(dòng)畫(huà)效果,通過(guò)隨機(jī)生成參數(shù)來(lái)使得星星和流星的位置、速度和顏色等變得多樣化,使得動(dòng)畫(huà)看起來(lái)更加真實(shí)和生動(dòng)。同時(shí),通過(guò)類(lèi)的封裝和函數(shù)的定義,使得代碼結(jié)構(gòu)更加模塊化和易于維護(hù)。
以上就是Python繪制浪漫星空的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于Python繪制星空的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
pymysql.err.DataError:1366的報(bào)錯(cuò)解決
通過(guò)python把數(shù)據(jù)同步至mysql數(shù)據(jù)庫(kù)的過(guò)程中,遇到錯(cuò)誤,本文主要介紹了pymysql.err.DataError:1366的報(bào)錯(cuò)解決,具有一定的參考價(jià)值,感興趣的可以了解一下2024-05-05利用python-docx模塊寫(xiě)批量生日邀請(qǐng)函
這篇文章主要為大家詳細(xì)介紹了利用python-docx模塊批量生日邀請(qǐng)函,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08python基礎(chǔ)教程之csv文件的寫(xiě)入與讀取
CSV即逗號(hào)分隔值(也稱(chēng)字符分隔值,因?yàn)榉指舴梢圆皇嵌禾?hào)),是一種常用的文本格式,用以存儲(chǔ)表格數(shù)據(jù),包括數(shù)字或者字符,下面這篇文章主要給大家介紹了關(guān)于python基礎(chǔ)教程之csv文件的寫(xiě)入與讀取的相關(guān)資料,需要的朋友可以參考下2022-08-08Python 實(shí)現(xiàn)的 Google 批量翻譯功能
這篇文章主要介紹了Python 實(shí)現(xiàn)的 Google 批量翻譯功能,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08基于python實(shí)現(xiàn)音樂(lè)播放器代碼實(shí)例
這篇文章主要介紹了基于python實(shí)現(xiàn)音樂(lè)播放器代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07在python里使用await關(guān)鍵字來(lái)等另外一個(gè)協(xié)程的實(shí)例
這篇文章主要介紹了在python里使用await關(guān)鍵字來(lái)等另外一個(gè)協(xié)程的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05淺析Django 接收所有文件,前端展示文件(包括視頻,文件,圖片)ajax請(qǐng)求
這篇文章主要介紹了Django 接收所有文件,前端展示文件(包括視頻,文件,圖片)ajax請(qǐng)求,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2020-03-03