最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

你們要的Python繪畫3D太陽系詳細代碼

 更新時間:2021年10月14日 11:59:55   作者:微小冷  
這篇文章主要給大家介紹了關于如何利用Python 繪畫3D太陽系,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

Python畫一個平面的太陽系得到一些朋友的欣賞,然后有同學提出了繪制三維太陽系的要求。

從Python畫圖的角度來說,三維太陽系其實并不難,問題在于八大行星對黃道面的傾斜太小,所以盡管畫個三維的圖,但就觀感而言,無非是把二維的嵌入到三維空間罷了。

在這里插入圖片描述

來點小行星

在這里插入圖片描述

代碼如下

from os import cpu_count
import numpy as np
from numpy.random import rand
import matplotlib.pyplot as plt
from matplotlib import animation
au,G,RE,ME = 1.48e11,6.67e-11,1.48e11,5.965e24
m = np.array([3.32e5,0.055,0.815,1,0.107,317.8])*ME*G
r = np.array([0,0.387,0.723,1,1.524,5.203])*RE
v = np.array([0,47.89,35.03,29.79,24.13,13.06])*1000
theta = rand(len(m))*np.pi*2
cTheta,sTheta = np.cos(theta), np.sin(theta)
xyz = r*np.array([cTheta, sTheta, 0*r])     #位置三分量,因為參數太多,所以把這三個分量寫在了一起
uvw = v*np.array([-sTheta, cTheta, 0*v])    #速度三分量
N_ast = 100
m_ast = rand(N_ast)*1e20
r_ast = (rand(N_ast)*3.5+1.6)*RE
v_ast = np.sqrt(G*3.32e5*ME/r_ast)  #小行星速度sqrt(GM/R)
theta = rand(N_ast)*np.pi*2
phi = (rand(N_ast)-0.5)*0.3     #給一個隨機的小傾角
cTheta,sTheta = np.cos(theta), np.sin(theta)
cPhi,sPhi = np.cos(phi),np.sin(phi)
xyza = r_ast*np.array([cTheta*cPhi, sTheta*cPhi, sPhi])
uvwa = v_ast*np.array([-sTheta*cPhi, cTheta*cPhi, sPhi])
name = "solar.gif"
fig = plt.figure(figsize=(10,10))
ax = fig.add_subplot(projection='3d')
ax.grid()
ax.set_xlim3d([-5.5*RE,5.5*RE])
ax.set_ylim3d([-5.5*RE,5.5*RE])
ax.set_zlim3d([-5.5*RE,5.5*RE])
traces = [ax.plot([],[],[],'-', lw=0.5)[0] for _ in range(len(m))]
pts = [ax.plot([],[],[],marker='o')[0] for _ in range(len(m))]
pt_asts = [ax.plot([],[],[],marker='.')[0] for _ in range(N_ast)]
N = 500
dt = 3600*50
ts =  np.arange(0,N*dt,dt)
xyzs,xyzas = [],[]
for _ in ts:
    xyz_ij = (xyz.reshape(3,1,len(m))-xyz.reshape(3,len(m),1))
    r_ij = np.sqrt(np.sum(xyz_ij**2,0))
    xyza_ij = (xyz.reshape(3,1,len(m))-xyza.reshape(3,N_ast,1))
    ra_ij = np.sqrt(np.sum(xyza_ij**2,0))
    for j in range(len(m)):
        for i in range(len(m)):
            if i!=j :
                uvw[:,i] += m[j]*xyz_ij[:,i,j]*dt/r_ij[i,j]**3
        for i in range(N_ast):
            uvwa[:,i] += m[j]*xyza_ij[:,i,j]*dt/ra_ij[i,j]**3
    xyz += uvw*dt
    xyza += uvwa*dt
    xyzs.append(xyz.tolist())
    xyzas.append(xyza.tolist())
xyzs = np.array(xyzs).transpose(2,1,0)
xyzas = np.array(xyzas).transpose(2,1,0)
def animate(n):
    for i in range(len(m)):
        xyz = xyzs[i]
        traces[i].set_data(xyz[0,:n],xyz[1,:n])
        traces[i].set_3d_properties(xyz[2,:n])
        pts[i].set_data(xyz[0,n],xyz[1,n])
        pts[i].set_3d_properties(xyz[2,n])
    for i in range(N_ast):
        pt_asts[i].set_data(xyzas[i,0,n],xyzas[i,1,n])
        pt_asts[i].set_3d_properties(xyzas[i,2,n])
    return traces+pts+pt_asts
ani = animation.FuncAnimation(fig, animate, 
    range(N), interval=10, blit=True)
plt.show()
ani.save(name)

總結

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內容!

相關文章

  • Python實戰(zhàn)小項目之Mnist手寫數字識別

    Python實戰(zhàn)小項目之Mnist手寫數字識別

    MNIST 數據集已經是一個被”嚼爛”了的數據集, 很多教程都會對它”下手”, 幾乎成為一個 “典范”. 不過有些人可能對它還不是很了解, 下面通過一個小實例來帶你了解它
    2021-10-10
  • Python使用tkinter寫一個本地密碼管理器

    Python使用tkinter寫一個本地密碼管理器

    閑來無事,看到自己有很多網站的賬戶密碼,有些網站可能打開一兩次也就忘記了,下一次在輸入賬戶密碼就想不起來,這樣很容易丟失賬號。所以本文就來用Python和tkinter寫一個本地密碼管理器吧
    2023-05-05
  • python中reduce()函數的使用方法示例

    python中reduce()函數的使用方法示例

    reduce() 函數會對參數序列中元素進行累積,下面這篇文章主要給大家介紹了關于python中reduce()函數的使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-09-09
  • Python用SSH連接到網絡設備

    Python用SSH連接到網絡設備

    這篇文章主要介紹了Python用SSH連接到網絡設備,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2021-02-02
  • Python實現自動收集參數的技巧分享

    Python實現自動收集參數的技巧分享

    在Python中,充分利用函數參數的自動收集和靈活處理,是寫出高效且易維護代碼的關鍵之一,本文將深入研究Python函數參數的收集方式,感興趣的小伙伴可以了解下
    2023-12-12
  • Python實現購物系統(tǒng)(示例講解)

    Python實現購物系統(tǒng)(示例講解)

    下面小編就為大家?guī)硪黄狿ython實現購物系統(tǒng)(示例講解)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • selenium XPath定位的實現示例

    selenium XPath定位的實現示例

    XPath是一種在XML文檔中定位和選擇節(jié)點的語言,通過路徑表達式遍歷XML樹,支持節(jié)點選取、字符串匹配、數值計算、邏輯運算等功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-10-10
  • 詳解Python中的字符串格式化

    詳解Python中的字符串格式化

    這篇文章主要為大家介紹了Python中的字符串格式化,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • python字典快速保存于讀取的方法

    python字典快速保存于讀取的方法

    下面小編就為大家分享一篇python字典快速保存于讀取的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • Python基于字典實現switch case函數調用

    Python基于字典實現switch case函數調用

    這篇文章主要介紹了Python基于字典實現switch case函數調用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07

最新評論

龙海市| 沅陵县| 茌平县| 浦东新区| 泰兴市| 台东市| 博罗县| 陆丰市| 沐川县| 慈利县| 温州市| 巧家县| 兴文县| 彰化市| 安义县| 工布江达县| 宜州市| 宁陕县| 葵青区| 明星| 许昌县| 施秉县| 马公市| 饶河县| 上饶县| 叙永县| 伊吾县| 偏关县| 鲜城| 遂平县| 原阳县| 上杭县| 兰考县| 闵行区| 河间市| 藁城市| 谢通门县| 饶阳县| 蓬安县| 镇远县| 彭泽县|