Python實現(xiàn)繪制3D地球旋轉(zhuǎn)效果
畫一個地球
想畫一個轉(zhuǎn)動的地球,那么首先要有一個球,或者說要有一個球面,用參數(shù)方程可以表示為
x?=rcos?cosθ
y=rcos?sinθ
z=rsin??
然后要有一個地球,或者說要有一個地圖,用來作為貼圖,映射到球面上。
import numpy as np import matplotlib.pyplot as plt path = "earth1.jpg" img = plt.imread(path) h, w, c = img.shape ys, xs = np.indices([h, w]) th = xs/w*np.pi*2 phi = np.pi/2 - ys/h*np.pi x = np.cos(phi)*np.cos(th) y = np.cos(phi)*np.sin(th) z = np.sin(phi) cs = [tuple(c/255) for c in img.reshape(-1,3)] ax = plt.subplot(projection='3d') ax.scatter(x, y, z, marker='.', c=cs) plt.axis('off') plt.show()
其中scatter
畫的是散點圖,c=cs
為顏色映射參數(shù),所以溫馨提示,選取的地球圖片不宜過大,否則點太多會讓電腦爆掉。
最后得到的效果如下
讓地球轉(zhuǎn)起來
三維空間中的旋轉(zhuǎn)矩陣如下表所示,具體講解可參考這兩篇博客:旋轉(zhuǎn)坐標(biāo)軸??旋轉(zhuǎn)正方體
有了旋轉(zhuǎn)矩陣,接下來就是讓地球轉(zhuǎn)起來。
import numpy as np import matplotlib.pyplot as plt from matplotlib import animation 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) fig = plt.figure(figsize=(5,5)) ax = fig.add_subplot(projection='3d') ax.grid() lines = ax.scatter(x, y, z, marker='.', c=cs) def animate(n): # 按照xyz順序旋轉(zhuǎn) axis = [2,1,0] shape = xyz.shape lines._offsets3d = Rz(n)@xyz return lines, ani = animation.FuncAnimation(fig, animate, range(0, 360, 2), interval=25, blit=True) #plt.show() ani.save("zyx.gif")
效果如下
以上就是Python實現(xiàn)繪制3D地球旋轉(zhuǎn)效果的詳細(xì)內(nèi)容,更多關(guān)于Python3D地球旋轉(zhuǎn)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python實現(xiàn)web應(yīng)用框架之增加響應(yīng)對象
這篇文章主要介紹了python利用web應(yīng)用框架如何增加響應(yīng)對象的,文中有相應(yīng)的代碼示例,對大家的學(xué)習(xí)或工作有一定的參考價值,需要的同學(xué)可以參考下2023-05-05利用Python第三方庫實現(xiàn)預(yù)測NBA比賽結(jié)果
今天給大家?guī)淼氖顷P(guān)于Python的相關(guān)知識,文章圍繞著利用Python實現(xiàn)預(yù)測NBA比賽結(jié)果展開,文中有非常詳細(xì)的介紹,需要的朋友可以參考下2021-06-06python調(diào)用dll出現(xiàn)精度問題解決
本文主要介紹了python調(diào)用dll出現(xiàn)精度問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02如何利用Python+Vue實現(xiàn)簡單的前后端分離
因為python開發(fā)的高效性,python web開發(fā)也受到越來越多人的關(guān)注,下面這篇文章主要給大家介紹了關(guān)于如何利用Python+Vue實現(xiàn)簡單的前后端分離的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07打包Python代碼的常用方法實現(xiàn)程序exe應(yīng)用
Python是一門強大的編程語言,但在將Python代碼分享給其他人時,讓他們安裝Python解釋器并運行腳本可能有點繁瑣,這時,將Python代碼打包成可執(zhí)行的應(yīng)用程序(.exe)可以大大簡化這個過程,本文將介紹幾種常用的方法,輕松地將Python代碼變成獨立的可執(zhí)行文件2023-12-12window環(huán)境pip切換國內(nèi)源(pip安裝異常緩慢的問題)
這篇文章主要介紹了window環(huán)境pip切換國內(nèi)源(pip安裝異常緩慢的問題),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12PyQt5+QtChart實現(xiàn)繪制極坐標(biāo)圖
QChart是一個QGraphicScene中可以顯示的QGraphicsWidget。本文將利用QtChart實現(xiàn)極坐標(biāo)圖的繪制,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-12-12