Python繪制動態(tài)的521玫瑰花
敲了這么多年代碼,每年都得畫一些心啊花啊什么的,所以現在常規(guī)的已經有些倦怠了,至少也得來個三維圖形才看著比較合理,而且光是三維的也沒啥意思,最好再加上能動起來。
靜態(tài)的玫瑰
網上有很多生成玫瑰花的代碼,比如下面這個
from matplotlib import cm
import matplotlib.pyplot as plt
import numpy as np
[x,t]=np.meshgrid(np.arange(25)/24.0,
np.arange(0,575.5,0.5)/575*17*np.pi-2*np.pi)
p=(np.pi/2)*np.exp(-t/(8*np.pi))
u=1-(1-np.mod(3.6*t,2*np.pi)/np.pi)**4/2
y=2*(x**2-x)**2*np.sin(p)
r=u*(x*np.sin(p)+y*np.cos(p))
X,Y = r*np.cos(t), r*np.sin(t)
Z = u*(x*np.cos(p)-y*np.sin(p))
ax=plt.subplot(projection='3d')
ax.plot_surface(X, Y, Z, lw=0, rstride=1,
cstride=1,cmap=cm.gist_rainbow_r)
plt.axis('off')
plt.show()
效果如下

其公式為

旋轉的玫瑰
但是,如果只有這一朵花,就算色彩很絢麗,看久了也會感覺枯燥,所以下面來給這張圖片加上一點動作,比如讓這朵花在空間中旋轉,方法非常簡單,只要乘上一個旋轉矩陣就OK為了書寫方便,記Sθ=sinθ,Cθ=cosθ,可列出下表。

下面的代碼的含義就是,玫瑰花繞著Z軸旋轉。
from matplotlib import animation
import imageio
cos = lambda th : np.cos(np.deg2rad(th))
sin = lambda th : np.sin(np.deg2rad(th))
# 此為旋轉矩陣
Rz = lambda th : np.array([
[cos(th) , -sin(th), 0],
[sin(th), cos(th), 0],
[0 , 0, 1]])
xyz = np.array([X,Y,Z]).reshape(3,-1)
gifImgs = []
for n in np.arange(0,30,1):
xd,yd,zd = (Rx(n)@Ry(n)@Rz(n)@xyz).reshape(3,1151,25)
ax = plt.subplot(projection='3d')
ax.plot_surface(xd,yd,zd, lw=0, rstride=1,
cstride=1,cmap=cm.gist_rainbow_r)
plt.axis('off')
plt.savefig("%d.jpg" % n)
gifImgs.append(imageio.imread("%d.jpg" % n))
imageio.mimsave("test.gif",gifImgs,fps=5)
ani = animation.FuncAnimation(fig, animate,
range(0, 360, 2), interval=25, blit=True)
#plt.show()
ani.save("zyx.gif")
但最后的效果不太理想,貌似在抽搐,感覺非常離奇

到此這篇關于Python繪制動態(tài)的521玫瑰花的文章就介紹到這了,更多相關Python玫瑰花內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
pytorch 權重weight 與 梯度grad 可視化操作
這篇文章主要介紹了pytorch 權重weight 與 梯度grad 可視化操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06
Blender?Python編程實現批量導入網格并保存渲染圖像
這篇文章主要為大家介紹了Blender?Python?編程實現批量導入網格并保存渲染圖像示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08

