用Python搓一個太陽系
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import animation
m = [1.33e20,3.98e14,4.9e12]
x = np.array([0,1.5e11,1.5e11+3.8e8])
y = np.array([0.0,0,0])
u = np.array([0.0,0,0])
v = np.array([0,2.88e4,2.88e4+1.02e3])
fig = plt.figure(figsize=(12,12))
ax = fig.add_subplot(xlim=(-2e11,2e11),ylim=(-2e11,2e11))
ax.grid()
trace0, = ax.plot([],[],'-', lw=0.5)
trace1, = ax.plot([],[],'-', lw=0.5)
trace2, = ax.plot([],[],'-', lw=0.5)
pt0, = ax.plot([x[0]],[y[0]] ,marker='o')
pt1, = ax.plot([x[0]],[y[0]] ,marker='o')
pt2, = ax.plot([x[0]],[y[0]] ,marker='o')
k_text = ax.text(0.05,0.85,'',transform=ax.transAxes)
textTemplate = 't = %.3f days\n'
N = 1000
dt = 36000
ts = np.arange(0,N*dt,dt)/3600/24
xs,ys = [],[]
for _ in ts:
x_ij = (x-x.reshape(3,1))
y_ij = (y-y.reshape(3,1))
r_ij = np.sqrt(x_ij**2+y_ij**2)
for i in range(3):
for j in range(3):
if i!=j :
u[i] += (m[j]*x_ij[i,j]*dt/r_ij[i,j]**3)
v[i] += (m[j]*y_ij[i,j]*dt/r_ij[i,j]**3)
x += u*dt
y += v*dt
xs.append(x.tolist())
ys.append(y.tolist())
xs = np.array(xs)
ys = np.array(ys)
def animate(n):
trace0.set_data(xs[:n,0],ys[:n,0])
trace1.set_data(xs[:n,1],ys[:n,1])
# 繪圖時的地月距離擴大 100 倍,否則看不清
tempX2S =外匯跟單gendan5.com xs[:n,1]+100*(xs[:n,2]-xs[:n,1])
tempY2S = ys[:n,1]+100*(ys[:n,2]-ys[:n,1])
trace2.set_data(tempX2S,tempY2S)
pt0.set_data([xs[n,0]],[ys[n,0]])
pt1.set_data([xs[n,1]],[ys[n,1]])
tempX = xs[n,1]+100*(xs[n,2]-xs[n,1])
tempY = ys[n,1]+100*(ys[n,2]-ys[n,1])
pt2.set_data([tempX],[tempY])
k_text.set_text(textTemplate % ts[n])
return trace0, trace1, trace2, pt0, pt1, pt2, k_text
ani = animation.FuncAnimation(fig, animate,
range(N), interval=10, blit=True)
plt.show()
ani.save("3.gif")
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946337/viewspace-2857854/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一個太陽系HTMLHTML
- 用HTML5的canvas畫太陽系HTMLCanvas
- 手搓大模型Task03:手搓一個最小的 Agent 系統大模型
- 搓一個Pythonic listPython
- Python如何運用turtle繪製陰陽太極圖Python
- python中turtle如何畫太陽花?Python
- 太陽分享:一些關於Python語言的爭議Python
- Python模擬太陽-地球-月亮運動模型Python模型
- three.js 郭先生製作太陽系JS
- 用Vue全家桶純手工搓了一個開源版「抖音」Vue
- 【IDL】幫助科學家瞭解太陽系的形成
- 太陽(藍橋杯14屆)
- SEIA:太陽意味著生意
- 基於 HTML5 + WebGL 的太陽系 3D 展示系統HTMLWeb3D
- 在風能和太陽能儲存中的新應用
- 手搓一個兔子問題(分享一個C語言問題,持續更新…)C語言
- OA系統價格太昂貴?來用開源專案搭建一個吧!
- 太陽系真的存在第九顆行星?比冥王星更遠
- 這8個工具,用來做python應用程式開發太合適了!Python
- 太陽能光伏企業天合光能:加勒比地區最大太陽能發電廠開建
- 基於 HTML5 + WebGL 的太陽系 3D 視覺化系統HTMLWeb3D視覺化
- Echarts中太陽圖(Sunburst)的例項Echarts
- css地球月亮太陽環繞旋轉CSS
- 曬太陽還會變胖?最新研究表明,曬太陽會刺激男性進食,女性卻不受影響
- 1光年到底有多遠?太陽系的直徑有幾光年?
- 嗯,手搓一個TinyPng壓縮圖片的WebpackPlugin也SoEasy啦WebPlugin
- GitHub 熱榜第一!這個 Python 專案超 8.4k 標星,網友:太實用!GithubPython
- 那是一個陽關明媚的早晨
- 對抗煙霧支援太陽能發電
- IEA:整合太陽能和風能報告
- 個人專案——基於STM32的太陽能供電智慧花盆
- 太陽軟體站長:學爬蟲怎麼能不會這8個技巧?爬蟲
- 資料太亂看不懂?教你用Python一招搞定!Python
- 太陽軟體站長丨Python比動態ip代理更適合人工智慧Python人工智慧
- 刷爆了!GitHub標星1.6W,這個 Python 專案太實用!GithubPython
- DIY一款多快充協議太陽能充電器!----專案起源協議
- 手把手教你用python做一個年會抽獎系統Python
- Three.js實現太陽系八大行星的自轉公轉JS