Python實(shí)現(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畫的是散點(diǎn)圖,c=cs為顏色映射參數(shù),所以溫馨提示,選取的地球圖片不宜過大,否則點(diǎn)太多會讓電腦爆掉。
最后得到的效果如下

讓地球轉(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實(shí)現(xiàn)繪制3D地球旋轉(zhuǎn)效果的詳細(xì)內(nèi)容,更多關(guān)于Python3D地球旋轉(zhuǎn)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python實(shí)現(xiàn)web應(yīng)用框架之增加響應(yīng)對象
這篇文章主要介紹了python利用web應(yīng)用框架如何增加響應(yīng)對象的,文中有相應(yīng)的代碼示例,對大家的學(xué)習(xí)或工作有一定的參考價值,需要的同學(xué)可以參考下2023-05-05
利用Python第三方庫實(shí)現(xiàn)預(yù)測NBA比賽結(jié)果
今天給大家?guī)淼氖顷P(guān)于Python的相關(guān)知識,文章圍繞著利用Python實(shí)現(xiàn)預(yù)測NBA比賽結(jié)果展開,文中有非常詳細(xì)的介紹,需要的朋友可以參考下2021-06-06
python調(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實(shí)現(xiàn)簡單的前后端分離
因?yàn)閜ython開發(fā)的高效性,python web開發(fā)也受到越來越多人的關(guān)注,下面這篇文章主要給大家介紹了關(guān)于如何利用Python+Vue實(shí)現(xiàn)簡單的前后端分離的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07
打包Python代碼的常用方法實(shí)現(xiàn)程序exe應(yīng)用
Python是一門強(qiáng)大的編程語言,但在將Python代碼分享給其他人時,讓他們安裝Python解釋器并運(yùn)行腳本可能有點(diǎn)繁瑣,這時,將Python代碼打包成可執(zhí)行的應(yīng)用程序(.exe)可以大大簡化這個過程,本文將介紹幾種常用的方法,輕松地將Python代碼變成獨(dú)立的可執(zhí)行文件2023-12-12
window環(huán)境pip切換國內(nèi)源(pip安裝異常緩慢的問題)
這篇文章主要介紹了window環(huán)境pip切換國內(nèi)源(pip安裝異常緩慢的問題),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
PyQt5+QtChart實(shí)現(xiàn)繪制極坐標(biāo)圖
QChart是一個QGraphicScene中可以顯示的QGraphicsWidget。本文將利用QtChart實(shí)現(xiàn)極坐標(biāo)圖的繪制,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-12-12

