基于Python繪制3D立體愛心圖案的示例詳解
更新時間:2022年11月11日 10:51:13 作者:弦masamasa
這篇文章主要為大家詳細介紹了利用Python實現(xiàn)繪制3D立體愛心圖案的四種不同方法,文中的示例代碼講解詳細,感興趣的小伙伴可以動手嘗試一下
原理
1.使用python中的mtplotlib庫。
2.立體愛心面公式
點畫法(實心)
代碼
import matplotlib.pyplot as plt #導(dǎo)入繪圖模塊 from mpl_toolkits.mplot3d import Axes3D #3d繪圖模塊 import numpy as np #導(dǎo)入數(shù)值計算拓展模塊 #start generating points x_lim=np.linspace(-10,10,150) y_lim=np.linspace(-10,10,150) z_lim=np.linspace(-10,10,150) X_points=[] #用來存放繪圖點X坐標(biāo) Y_points=[] #用來存放繪圖點Y坐標(biāo) Z_points=[] #用來存放繪圖點Z坐標(biāo) for x in x_lim: for y in y_lim: for z in z_lim: if (x**2+(9/4)*y**2+z**2-1)**3-(9/80)*y**2*z**3-x**2*z**3<=0: X_points.append(x) Y_points.append(y) Z_points.append(z) plt.style.use('seaborn') fig=plt.figure() ax=fig.add_subplot(111,projection='3d') ax.scatter(X_points,Y_points,Z_points,color="red") plt.show()
運行效果
這個畫法側(cè)面看起來很無語。
點畫法(空心)
代碼
import matplotlib.pyplot as plt #導(dǎo)入繪圖模塊 from mpl_toolkits.mplot3d import Axes3D #3d繪圖模塊 import numpy as np #導(dǎo)入數(shù)值計算拓展模塊 #start generating points x_lim=np.linspace(-10,10,200) y_lim=np.linspace(-10,10,200) z_lim=np.linspace(-10,10,200) X_points=[] #用來存放繪圖點X坐標(biāo) Y_points=[] #用來存放繪圖點Y坐標(biāo) Z_tmp=[] Z_points=[] #用來存放繪圖點Z坐標(biāo) for y in y_lim: for x in x_lim: for z in z_lim: k=(x**2+(9/4)*y**2+z**2-1)**3-(9/80)*y**2*z**3-x**2*z**3 if k<=0 : Z_tmp.append(z) if y<=-0.55 or y>=0.55: X_points.append(x) Y_points.append(y) Z_points.append(z) if Z_tmp: X_points.append(x) Y_points.append(y) Z_points.append(max(Z_tmp)) X_points.append(x) Y_points.append(y) Z_points.append(min(Z_tmp)) Z_tmp.clear() plt.style.use('seaborn') fig=plt.figure() ax=fig.add_subplot(111,projection='3d') ax.set_zlim(-1, 1) ax.set_xlim(-1, 1) ax.set_ylim(-1, 1) ax.scatter(X_points,Y_points,Z_points) plt.show()
運行效果
折線畫法 (線團)
代碼
import matplotlib.pyplot as plt #導(dǎo)入繪圖模塊 from mpl_toolkits.mplot3d import Axes3D #3d繪圖模塊 import numpy as np #導(dǎo)入數(shù)值計算拓展模塊 #start generating points x_lim=np.linspace(-10,10,150) y_lim=np.linspace(-10,10,150) z_lim=np.linspace(-10,10,150) X_points=[] #用來存放繪圖點X坐標(biāo) Y_points=[] #用來存放繪圖點Y坐標(biāo) Z_tmp=[] Z_points=[] #用來存放繪圖點Z坐標(biāo) for y in y_lim: for x in x_lim: for z in z_lim: k=(x**2+(9/4)*y**2+z**2-1)**3-(9/80)*y**2*z**3-x**2*z**3 if k<=0 : Z_tmp.append(z) if y<=-0.55 or y>=0.55: X_points.append(x) Y_points.append(y) Z_points.append(z) if Z_tmp: X_points.append(x) Y_points.append(y) Z_points.append(max(Z_tmp)) X_points.append(x) Y_points.append(y) Z_points.append(min(Z_tmp)) Z_tmp.clear() plt.style.use('seaborn') fig=plt.figure() ax=fig.add_subplot(111,projection='3d') ax.set_zlim(-1, 1) ax.set_xlim(-1, 1) ax.set_ylim(-1, 1) ax.plot(X_points,Y_points,Z_points) plt.show()
運行效果
等高線畫法(線框)
代碼
from mpl_toolkits.mplot3d import Axes3D from matplotlib import cm from matplotlib.ticker import LinearLocator, FormatStrFormatter import matplotlib.pyplot as plt import numpy as np def heart_3d(x, y, z): return (x**2+(9/4)*y**2+z**2-1)**3-x**2*z**3-(9/80)*y**2*z**3 def plot_implicit(fn, bbox=(-1.5, 1.5)): xmin, xmax, ymin, ymax, zmin, zmax = bbox*3 fig = plt.figure() ax = fig.add_subplot(projection='3d') A = np.linspace(xmin, xmax, 100) # resolution of the contour B = np.linspace(xmin, xmax, 10) # number of slices A1, A2 = np.meshgrid(A, A) # grid on which the contour is plotted for z in B: # plot contours in the XY plane X, Y = A1, A2 Z = fn(X, Y, z) cset = ax.contour(X, Y, Z+z, [z], zdir='z', colors=('r',)) for y in B: # plot contours in the XZ plane X, Z = A1, A2 Y = fn(X, y, Z) cset = ax.contour(X, Y+y, Z, [y], zdir='y', colors=('red',)) for x in B: # plot contours in the YZ plane Y, Z = A1, A2 X = fn(x, Y, Z) cset = ax.contour(X+x, Y, Z, [x], zdir='x', colors=('red',)) # must set plot limits because the contour will likely extend # way beyond the displayed level. Otherwise matplotlib extends the plot limits # to encompass all values in the contour. ax.set_zlim3d(zmin, zmax) ax.set_xlim3d(xmin, xmax) ax.set_ylim3d(ymin, ymax) plt.show() if __name__ == '__main__': plot_implicit(heart_3d)
運行效果
以上代碼整理于網(wǎng)絡(luò),需要的小伙伴可以參考一下
到此這篇關(guān)于基于Python繪制3D立體愛心圖案的示例詳解的文章就介紹到這了,更多相關(guān)Python繪制3D立體愛心內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Anaconda下配置python+opencv+contribx的實例講解
今天小編就為大家分享一篇Anaconda下配置python+opencv+contribx的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08Python selenium 父子、兄弟、相鄰節(jié)點定位方式詳解
這篇文章主要介紹了Python selenium 父子、兄弟、相鄰節(jié)點定位方式詳解的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-09-09