您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關怎么用Python實現流星雨效果,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
流星雨的前提是得先有一個流星,所謂流星,就是一個拖著尾巴的直線。所謂拖著尾巴,實際上是我們的浪漫想象,實質無非是尺寸和顏色的漸變罷了。
而matplotlib
并不能給一條曲線映射多個顏色,故而可將一條線拆分成多條,效果如圖所示
代碼為
import numpy as np import matplotlib.pyplot as plt from matplotlib.collections import LineCollection x0,y0 = 1,1 #此為流星位置 ts = np.arange(0,1,0.01) #參數 xs,ys = x0+ts, y0+ts #繪圖線條 points = np.array([xs, ys]).T.reshape(-1, 1, 2) segments = np.concatenate([points[:-1], points[1:]], axis=1) ax = plt.subplot() lc = LineCollection(segments, cmap='viridis') lc.set_array(ts) lc.set_linewidth(ts[::-1]) line = ax.add_collection(lc) ax.set_xlim(0, 3) ax.set_ylim(0, 3) plt.show()
接下來就要把這個流星變成流星雨,很簡單,多加一些流星就可以了,效果如下,盡管是在白天,但是不是感覺有點意思了。
代碼為
from numpy.random import rand, randint N,L = 20,100 #流星個數和線段數 ts = np.array([ np.linspace(0,rand(),L) for _ in range(N)]).T x0,y0 = rand(2*N).reshape(2,1,N) x0 *= 5 xs,ys = x0+ts, y0+ts #繪圖線條1 points = np.array([xs, ys]).T.reshape(N,L,-1,2) ax = plt.subplot() for i in range(N): segs = np.concatenate([points[i][:-1], points[i][1:]], axis=1) lc = LineCollection(segs, cmap='viridis') lc.set_array(ts[:,i]) lc.set_linewidth(ts[::-1,i]) ax.add_collection(lc) ax.set_xlim(0, 6) ax.set_ylim(-2, 3) ax.set_axis_off() #取消坐標軸 plt.show()
如果想讓天黑下去,方法為
plt.figure(facecolor="black") #將背景設為黑色
此外,背景設為黑色之后,注意要把顏色映射調整一下,想知道更多具體的顏色映射表戳這里:matplotlib中的偽彩映射
lc = LineCollection(segs, cmap='viridis_r')
所以就是這種
關于“怎么用Python實現流星雨效果”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。