亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

你們要的Python繪畫(huà)3D太陽(yáng)系詳細(xì)代碼

 更新時(shí)間:2021年10月14日 11:59:55   作者:微小冷  
這篇文章主要給大家介紹了關(guān)于如何利用Python 繪畫(huà)3D太陽(yáng)系,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

Python畫(huà)一個(gè)平面的太陽(yáng)系得到一些朋友的欣賞,然后有同學(xué)提出了繪制三維太陽(yáng)系的要求。

從Python畫(huà)圖的角度來(lái)說(shuō),三維太陽(yáng)系其實(shí)并不難,問(wèn)題在于八大行星對(duì)黃道面的傾斜太小,所以盡管畫(huà)個(gè)三維的圖,但就觀感而言,無(wú)非是把二維的嵌入到三維空間罷了。

在這里插入圖片描述

來(lái)點(diǎn)小行星

在這里插入圖片描述

代碼如下

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])     #位置三分量,因?yàn)閰?shù)太多,所以把這三個(gè)分量寫(xiě)在了一起
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     #給一個(gè)隨機(jī)的小傾角
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)

總結(jié)

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • Python Pygame實(shí)戰(zhàn)之水果忍者游戲的實(shí)現(xiàn)

    Python Pygame實(shí)戰(zhàn)之水果忍者游戲的實(shí)現(xiàn)

    大家還記得水果忍者這個(gè)游戲嗎?想當(dāng)年,這也是個(gè)風(fēng)靡全國(guó)的游戲,基本每個(gè)人都玩過(guò)。今天小編就用Python中的Pygame庫(kù)復(fù)刻這一經(jīng)典游戲,需要的可以參考一下
    2022-02-02
  • 基于Python實(shí)現(xiàn)銀行卡識(shí)別的示例代碼

    基于Python實(shí)現(xiàn)銀行卡識(shí)別的示例代碼

    銀行卡識(shí)別是一個(gè)在金融、安全等領(lǐng)域具有重要應(yīng)用的問(wèn)題,本文主要為大家介紹了如何使用Python和深度學(xué)習(xí)技術(shù)來(lái)實(shí)現(xiàn)銀行卡識(shí)別功能,需要的可以參考下
    2024-03-03
  • Anaconda安裝之后Spyder打不開(kāi)解決辦法(親測(cè)有效!)

    Anaconda安裝之后Spyder打不開(kāi)解決辦法(親測(cè)有效!)

    這篇文章主要給大家介紹了關(guān)于Anaconda安裝之后Spyder打不開(kāi)解決辦法,文中將解決的過(guò)程介紹的非常詳細(xì),親測(cè)有效,對(duì)同樣遇到這個(gè)問(wèn)題的朋友具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-04-04
  • 利用PyCharm操作Github(倉(cāng)庫(kù)新建、更新,代碼回滾)

    利用PyCharm操作Github(倉(cāng)庫(kù)新建、更新,代碼回滾)

    這篇文章主要介紹了利用PyCharm操作Github(倉(cāng)庫(kù)新建、更新,代碼回滾),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • python爬蟲(chóng)教程之bs4解析和xpath解析詳解

    python爬蟲(chóng)教程之bs4解析和xpath解析詳解

    這篇文章主要給大家介紹了關(guān)于python爬蟲(chóng)教程之bs4解析和xpath解析的相關(guān)資料,bs4、xpath比較容易上手但是功能有限,正則比較晦澀難懂但是功能超級(jí)強(qiáng)大,需要的朋友可以參考下
    2022-02-02
  • python3.5基于TCP實(shí)現(xiàn)文件傳輸

    python3.5基于TCP實(shí)現(xiàn)文件傳輸

    這篇文章主要為大家詳細(xì)介紹了python3.5基于TCP實(shí)現(xiàn)文件傳輸?shù)拇a,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • 在Linux中通過(guò)Python腳本訪問(wèn)mdb數(shù)據(jù)庫(kù)的方法

    在Linux中通過(guò)Python腳本訪問(wèn)mdb數(shù)據(jù)庫(kù)的方法

    這篇文章主要介紹了在Linux中通過(guò)Python腳本訪問(wèn)mdb數(shù)據(jù)庫(kù)的方法,本文示例基于debian系的Linux系統(tǒng),需要的朋友可以參考下
    2015-05-05
  • Python通過(guò)getattr函數(shù)獲取對(duì)象的屬性值

    Python通過(guò)getattr函數(shù)獲取對(duì)象的屬性值

    這篇文章主要介紹了Python通過(guò)getattr函數(shù)獲取對(duì)象的屬性值,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • 基于Python實(shí)現(xiàn)文件的壓縮與解壓縮

    基于Python實(shí)現(xiàn)文件的壓縮與解壓縮

    在日常工作中,除了會(huì)涉及到使用Python處理文本文件,有時(shí)候還會(huì)涉及對(duì)壓縮文件的處理。本文為大家總結(jié)了利用Python可以實(shí)現(xiàn)的幾種文件壓縮與解壓縮實(shí)現(xiàn)代碼,需要的可以參考一下
    2022-03-03
  • 利用Python第三方庫(kù)實(shí)現(xiàn)預(yù)測(cè)NBA比賽結(jié)果

    利用Python第三方庫(kù)實(shí)現(xiàn)預(yù)測(cè)NBA比賽結(jié)果

    今天給大家?guī)?lái)的是關(guān)于Python的相關(guān)知識(shí),文章圍繞著利用Python實(shí)現(xiàn)預(yù)測(cè)NBA比賽結(jié)果展開(kāi),文中有非常詳細(xì)的介紹,需要的朋友可以參考下
    2021-06-06

最新評(píng)論