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)文章
Django項(xiàng)目中動態(tài)設(shè)置靜態(tài)文件路徑的全過程
這篇文章主要給大家介紹了關(guān)于Django項(xiàng)目中動態(tài)設(shè)置靜態(tài)文件路徑的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2022-02-02
解決python使用pd.read_csv()出現(xiàn)錯誤UnicodeDecodeError:?'utf-8&
你是否有過之前用pd.read打開csv文件都正常,但突然有一天運(yùn)行以前的代碼就突然報錯,這篇文章主要給大家介紹了關(guān)于如何解決python使用pd.read_csv()出現(xiàn)錯誤UnicodeDecodeError:?'utf-8'?codec?can't?decode......的相關(guān)資料,需要的朋友可以參考下2023-12-12
Python?pytest自動化測試庫十個強(qiáng)大用法示例
本文將介紹Python的pytest庫的10個強(qiáng)大用法,并提供相應(yīng)的代碼示例,幫助你更好地理解和應(yīng)用單元測試,它提供了許多高級功能和便利的用法,能夠讓我們更輕松地編寫和執(zhí)行單元測試2024-01-01
PyQt5的PyQtGraph實(shí)踐系列3之實(shí)時數(shù)據(jù)更新繪制圖形
這篇文章主要介紹了PyQt5的PyQtGraph實(shí)踐系列3之實(shí)時數(shù)據(jù)更新繪制圖形,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-05-05
Python把excel文件數(shù)據(jù)轉(zhuǎn)化為字典格式存儲詳解
這篇文章主要介紹了Python把excel文件數(shù)據(jù)轉(zhuǎn)化為字典格式存儲詳解,在Python中有時候需要操作excel表格的數(shù)據(jù),把excel表格轉(zhuǎn)化為字典存起來,方便讀取,今天我們就來看看如何轉(zhuǎn)換,需要的朋友可以參考下2023-08-08

