python3的matplotlib的模擬太陽-地球-月亮運動示意圖代碼分析

1.太陽系


python3的matplotlib的模擬太陽-地球-月亮運動示意圖代碼分析

2.用python的matplotlib模擬太陽-地球-月亮,順帶學習相關知識,難點在他們之間的函數關係,可以自己百度,重點在python和matplotlib的作圖熟悉上。

3.條件:

本機是python3.8,應該python3.5都可以吧?


4.第1步:這裡要求中文設置,所以也複習matplotlib的中文設置。

<code>#---第1步---導出模塊---
import numpy as np
import matplotlib as mpl
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.animation as animmation
#導出通用字體設置
from matplotlib import font_manager
#定義引出字體模塊、位置、大小
my_font = font_manager.FontProperties(fname="hwfs.ttf",size=20)/<code>

5.第2步:

<code>#---第2步---初始化定義---
#r1的大小與月球的速度和距離地球距離有關,越大越不好,建議10
r1 = 10
#r2是月球與地球的半徑大小
r2 = 2
#π=圓周率(Pai)是圓的周長與直徑的比值
#omega1=2π是一個圓,是地球的運動一圈;1×π=為半圓。

omega1 = 2 * np.pi
#定義omega2為幾個π,與月球的公轉速度有關
#建議24π=代表月球以地球公轉的一圈分12部分,12+12半圈
#比如48π=24+24半圈,即將地球繞太陽一圈在分24部分,月球自轉和公轉的速度也加快
omega2 = 48 * np.pi
#月球自轉和公轉的角度與地球公轉的水平夾角
phi = 5 * np.pi / 180 /<code>

6.第3步:

<code>#---第3步---更新函數定義---
def update(data):
#聲明為全局變量
global line1, line2 , line3
#地球公轉運動的更新
line1.set_data([data[0], data[1]])
line1.set_3d_properties(data[2])
#月球運動更新
line2.set_data([data[3], data[4]])
line2.set_3d_properties(data[5])
#月球自轉線的更新
line3.set_data([data[6], data[7]])
line3.set_3d_properties(data[8])
return line1,line2,line3,/<code>

7.第4步:

<code>#---第4步---初始化框架---
def init():
global line1, line2, line3
ti = 0
t = t_drange[np.mod(ti, t_dlen)]
xt1 = x0 + 2*r1 * np.cos(omega1 * t)
yt1 = y0 + 2*r1 * np.sin(omega1 * t)
zt1 = z0 + 0
xt2 = xt1 + 2*r2 * np.sin(omega2 * t)
yt2 = yt1 + 2*r2 * np.cos(omega2 * t)/(np.cos(phi) * (1 + np.tan(phi) ** 2))

zt2 = zt1 + (yt2 - yt1) * np.tan(phi)
xt21 = xt1 + r2 * np.sin(2 * np.pi * t_range)
yt21 = yt1 + r2 * np.cos(2 * np.pi * t_range)/(np.cos(phi) * (1 + np.tan(phi) ** 2))
zt21 = zt1 + (yt21 - yt1) * np.tan(phi)

#地球位置、形狀、顏色、大小設置
line1, = ax.plot([xt1], [yt1], [zt1], marker='o', color='blue',markersize=20)
#月球位置、形狀、顏色、大小設置
line2, = ax.plot([xt2], [yt2], [zt2], marker='o', color='orange',markersize=12)
#月球繞地球的軌跡線和顏色purple=紫色
line3, = ax.plot(xt21, yt21, zt21, color='purple')
return line1,line2,line3,/<code>

8.第5步:

<code>#---第5步---運動數據的產生---
def data_gen():
global x0,y0,z0,t_dlen
data = []
for ti in range(1,t_dlen):
t = t_drange[ti]
xt1 = x0 + r1 * np.cos(omega1 * t)
yt1 = y0 + r1 * np.sin(omega1 * t)
zt1 = z0
xt2 = xt1 + r2 * np.sin(omega2 * t)
yt2 = yt1 + r2 * np.cos(omega2 * t)/(np.cos(phi) * (1 + np.tan(phi) ** 2))
zt2 = zt1 + (yt2 - yt1) * np.tan(phi)
xt21 = xt1 + r2 * np.sin(2 * np.pi * t_range)
yt21 = yt1 + r2 * np.cos(2 * np.pi * t_range)/(np.cos(phi) * (1 + np.tan(phi) ** 2))
zt21 = zt1 + (yt21 - yt1) * np.tan(phi)
data.append([xt1, yt1, zt1, xt2, yt2, zt2, xt21, yt21, zt21])
return data/<code>

9.第6步:

<code>#---第6步---定義取值範圍0~10,每個0.005取
#地球公轉的軌跡線刻度,越小越好,建議0.005,否則軌跡線不是圓形,有鋸齒樣類圓形
t_range = np.arange(0, 10 + 0.005, 0.005)
#地球公轉速度,越大速度越大,建議0.005,

t_drange = np.arange(0,10, 0.005 )
t_len = len(t_range)
t_dlen = len(t_drange)/<code>

10.第7步:

<code>#---第7步---三大星球的大小、顏色、座標---
#太陽的座標位置,三維座標
x0 =y0=z0= 0

#地球的運動中的座標
x1 = x0 + r1 * np.cos(omega1 * t_range)
y1 = y0 + r1 * np.sin(omega1 * t_range)
z1 = z0 + np.zeros(t_len)/<code>

11.第8步:

<code>#---第8步---定義圖片f和ax等---
#窗口大小也就是展示圖片的畫布大小:22=2200,14=1400,即2200×1400
#這是窗口的背景顏色,有區別,默認白色
f = plt.figure(figsize=(22,14),facecolor='black',edgecolor='white')
#這是畫布的背景顏色,默認白色
ax = f.add_subplot(111,projection='3d',facecolor='black')/<code>

12.第9步:

<code>#---第9步---太陽和地球軌跡線設置---
#太陽的設置顏色,位置,大小
ax.plot([0], [0], [0], marker='o', color= 'red', markersize=100)
#地球公轉的軌跡線和顏色g=green=綠色,三維座標
ax.plot(x1, y1, z1, 'g')/<code>

13.第10步:

<code>#---第10步---圖片的座標刻度設置--- 

#座標軸刻度雖然不顯示,但刻度的標記對整個圖形有一定的拉伸影響
#x座標軸刻度範圍
ax.set_xlim([-(r1 + 2), (r1 + 2)])
#y座標軸刻度範圍
ax.set_ylim([-(r1 + 5), (r1 + 5)])
#z座標軸刻度範圍
ax.set_zlim([-15, 15])/<code>

14.第11步:

<code>#---第11步---圖片標題等設置---
#圖示的標題
#動畫走起,f圖片掛起動畫裡,不斷更新,interval = 20=數值越小,速度越快
ani = animmation.FuncAnimation(f, update, frames = data_gen(), init_func = init,interval = 20)
#座標及其刻度隱藏
plt.axis('off')
#圖片標題、字體、顏色
plt.title(u'太陽-地球-月亮模擬示意圖', fontproperties=my_font,color='r')
#圖片展現
plt.show()/<code>

15.效果圖:


python3的matplotlib的模擬太陽-地球-月亮運動示意圖代碼分析


分享到:


相關文章: