用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
- canvas繪製太陽系Canvas
- 手搓大模型Task03:手搓一個最小的 Agent 系統大模型
- canvas繪製太陽系運動效果Canvas
- 搓一個Pythonic listPython
- three.js 郭先生製作太陽系JS
- CSS3 太陽系星球旋轉效果CSSS3
- ARKit如何將太陽系裝進iPhone(二)iPhone
- 太陽分享:一些關於Python語言的爭議Python
- Python模擬太陽-地球-月亮運動模型Python模型
- 太陽(藍橋杯14屆)
- 用Vue全家桶純手工搓了一個開源版「抖音」Vue
- 網際網路之父瑟夫稱 要把網際網路送到整個太陽系
- 基於 HTML5 + WebGL 的太陽系 3D 展示系統HTMLWeb3D
- 【IDL】幫助科學家瞭解太陽系的形成
- css地球月亮太陽環繞旋轉CSS
- 暴力破解太陽鏡++ (607字)
- 基於 HTML5 + WebGL 的太陽系 3D 視覺化系統HTMLWeb3D視覺化
- LulzSec如何黑掉《太陽報》網站的?網站
- 太陽軟體站長:學爬蟲怎麼能不會這8個技巧?爬蟲
- canvas實現太陽、地球和月亮旋轉效果Canvas
- OA系統價格太昂貴?來用開源專案搭建一個吧!
- 手搓一個兔子問題(分享一個C語言問題,持續更新…)C語言
- 《太陽的後裔》熱播 新一輪追劇旅行熱潮來襲
- Spectacles智慧太陽鏡 能拍小影片的眼鏡
- 這8個工具,用來做python應用程式開發太合適了!Python
- 太陽軟體站長丨Python比動態ip代理更適合人工智慧Python人工智慧
- Three.js實現太陽系八大行星的自轉公轉JS
- 嗯,手搓一個TinyPng壓縮圖片的WebpackPlugin也SoEasy啦WebPlugin
- GitHub 熱榜第一!這個 Python 專案超 8.4k 標星,網友:太實用!GithubPython
- 《太陽之子》現已發售:一發子彈,團滅邪教!時間差不多咯!
- 資料太亂看不懂?教你用Python一招搞定!Python
- 在太陽城網賭提不了款的解決辦法
- 太陽軟體帶你溫習:反爬手段有幾何?
- 刷爆了!GitHub標星1.6W,這個 Python 專案太實用!GithubPython
- Zungle Panther智慧太陽鏡:是骨傳導耳機還很時尚
- 接電話免耳機的智慧太陽鏡 聲音骨傳導