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

Python算法繪制特洛伊小行星群實(shí)現(xiàn)示例

 更新時(shí)間:2021年10月19日 10:16:22   作者:微小冷  
這篇文章主要介紹了Python算法繪制特洛伊小行星群實(shí)現(xiàn)示例,這個(gè)小示例完成后非常的有意思也會(huì)使你在Python學(xué)習(xí)的道路上感到一絲絲小成就

書接上文

用Python搓一個(gè)太陽(yáng)系
你們要的3D太陽(yáng)系
3體人真的存在嗎
太長(zhǎng)不看版

在這里插入圖片描述

在這里插入圖片描述

最小勢(shì)能點(diǎn)

在由兩個(gè)大質(zhì)量物體構(gòu)成的重力系統(tǒng)中,有一些特殊的區(qū)域會(huì)在兩個(gè)天體的頂級(jí)拉扯之下達(dá)到平衡,這些點(diǎn)就是拉格朗日點(diǎn)。而所謂平衡并非受力平衡,而是要求這個(gè)區(qū)域的物體會(huì)跟著雙星系統(tǒng)以相同的角速度運(yùn)動(dòng)。

在這里插入圖片描述

根據(jù)上帝是個(gè)胖子這個(gè)假定,狀態(tài)穩(wěn)定意味著低勢(shì)能。所以在解析求解拉格朗日點(diǎn)之前,我們可以試著畫出這個(gè)雙星系統(tǒng)的勢(shì)能分布。

在這里插入圖片描述

接下來搞一下太陽(yáng)和木星:

在這里插入圖片描述

在這里插入圖片描述

可見木星在太陽(yáng)的引力場(chǎng)下根本無法自己,但若把坐標(biāo)系調(diào)整一下,會(huì)看到木星雖小,卻還是有自己地盤的,畢竟也是有諸多衛(wèi)星的,這就意味著木星和太陽(yáng)之間必然存在一些相對(duì)平衡的位置。

為了看得更加仔細(xì),取對(duì)數(shù)是個(gè)不錯(cuò)的方法

在這里插入圖片描述

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm,ticker
R = 7.1492e7
M1,M2 = 1.9891e30, 1.8982e27
G = 6.67e-11
mu = M2/M1
R1,R2 = np.array([mu,1])/(1+mu)*R
x,y = np.meshgrid(
    np.arange(-0.5,1.5,1e-3)*R2
   ,np.arange(-1,1,1e-3)*R2)
H = -G*M1/np.sqrt((x+R1)**2+y**2)
H -= G*M2/np.sqrt((x-R2)**2+y**2)
H -= G*(M1+M2)*(x**2+y**2)/2/R**3
absH = np.abs(H)
absH[absH>1e14] = 1e14  #去除奇點(diǎn)
absH -= (np.min(absH)-1)
print(np.max(absH),np.min(absH))
plt.contourf(x,y,np.log(absH),50,alpha=0.75,
    cmap=cm.PuBu_r)
plt.show()

拉格朗日點(diǎn)

公式預(yù)警→_→

根據(jù)剛剛的圖可以看出,一般天體都會(huì)有一個(gè)屬于自己的私密區(qū)域,在這個(gè)區(qū)域里,別的天體的引力作用甚微,此區(qū)域即希爾球,拉格朗日點(diǎn)則是兩個(gè)天體希爾球的分界處。

在這里插入圖片描述

在極坐標(biāo)下,可得

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

對(duì)于木星來說,五個(gè)拉格朗日點(diǎn)一般默認(rèn)為

在這里插入圖片描述

特洛伊小行星群

在這里插入圖片描述

參考此前的太陽(yáng)系行星位置,得到其三維圖

在這里插入圖片描述

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
theta[-1] = 0   #木星初始角度為0
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
x_ast = xyz[0][-1]/2*(
    1+(np.random.rand(100)-0.5)*0.1)
y_ast = xyz[0][-1]/2*np.sqrt(3)*(
    1+(np.random.rand(100)-0.5)*0.1)
y_flag = np.random.rand(100)>0.5
y_ast = y_ast*(2*y_flag-1)
m_ast = rand(N_ast)*1e20
r_ast = np.sqrt(x_ast**2+y_ast**2)
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 = x_ast/r_ast, y_ast/r_ast
cPhi,sPhi = np.cos(phi),np.sin(phi)
xyza = np.array([x_ast, y_ast, sPhi])
uvwa = v_ast*np.array([-sTheta*cPhi, cTheta*cPhi, sPhi])
name = "solar1.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='.',lw=0.2)[0] for _ in range(N_ast)]
N = 10000
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(1,N,100), interval=10, blit=True)
plt.show()
ani.save(name)

以上就是Python算法繪制特洛伊小行星群實(shí)現(xiàn)示例的詳細(xì)內(nèi)容,更多關(guān)于Python算法繪制特洛伊小行星群的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python改變?nèi)罩?logging)存放位置的示例

    python改變?nèi)罩?logging)存放位置的示例

    示例主要解決的問題是通過傳入日志文件參數(shù)的方式來改變?nèi)罩镜拇娣盼恢?需要的朋友可以參考下
    2014-03-03
  • pytorch實(shí)現(xiàn)查看當(dāng)前學(xué)習(xí)率

    pytorch實(shí)現(xiàn)查看當(dāng)前學(xué)習(xí)率

    這篇文章主要介紹了pytorch實(shí)現(xiàn)查看當(dāng)前學(xué)習(xí)率,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Python實(shí)現(xiàn)批量添加視頻文本水印

    Python實(shí)現(xiàn)批量添加視頻文本水印

    這篇文章主要為大家詳細(xì)介紹了如何基于PyQt5開發(fā)一個(gè)視頻水印批量添加工具,旨在為多個(gè)視頻文件添加文本水印,感興趣的小伙伴可以參考一下
    2025-02-02
  • Python多線程threading模塊實(shí)例詳解

    Python多線程threading模塊實(shí)例詳解

    這篇文章主要介紹了Python多線程threading模塊,對(duì)于一個(gè)python程序,如果需要同時(shí)大量處理多個(gè)任務(wù),有使用多進(jìn)程和多線程兩種方法,在python中,實(shí)現(xiàn)多線程主要通過threading模塊,需要的朋友可以參考下
    2025-04-04
  • Python?tkinter中四個(gè)常用按鈕的用法總結(jié)

    Python?tkinter中四個(gè)常用按鈕的用法總結(jié)

    tkinter中有四個(gè)控件被冠以Button之名,分別是:Button,?Checkbutton,?Radiobutton,?Menubutton,下面小編就來和大家聊聊它們的具體用法,感興趣的可以學(xué)習(xí)一下
    2023-09-09
  • Python+Opencv實(shí)現(xiàn)圖像模板匹配詳解

    Python+Opencv實(shí)現(xiàn)圖像模板匹配詳解

    模板匹配可以看作是對(duì)象檢測(cè)的一種非常基本的形式。使用模板匹配,我們可以使用包含要檢測(cè)對(duì)象的“模板”來檢測(cè)輸入圖像中的對(duì)象。本文為大家介紹了圖像模板匹配的實(shí)現(xiàn)方法,需要的可以參考一下
    2022-09-09
  • 使用python裝飾器驗(yàn)證配置文件示例

    使用python裝飾器驗(yàn)證配置文件示例

    項(xiàng)目中用到了一個(gè)WriteData的函數(shù)保存用戶填寫的配置,為了實(shí)現(xiàn)驗(yàn)證用戶輸入的需求,在不影響接口的使用的前提下,采用了python的裝飾器實(shí)現(xiàn),代碼片段演示了如何驗(yàn)證WriteData函數(shù)的輸入?yún)?shù)
    2014-02-02
  • python+selenium?實(shí)現(xiàn)掃碼免密登錄示例代碼

    python+selenium?實(shí)現(xiàn)掃碼免密登錄示例代碼

    這篇文章主要介紹了python+selenium?實(shí)現(xiàn)掃碼免密登錄,首先掃碼登錄獲取cookies保存到本地未后面免密登錄做準(zhǔn)備,本文通過示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • Python3訪問MySQL數(shù)據(jù)庫(kù)的實(shí)現(xiàn)步驟

    Python3訪問MySQL數(shù)據(jù)庫(kù)的實(shí)現(xiàn)步驟

    要實(shí)現(xiàn)一個(gè)簡(jiǎn)單的IM(即時(shí)通訊)系統(tǒng),支持用戶注冊(cè)、登錄和聊天記錄存儲(chǔ),你可以使用Python和mysql數(shù)據(jù)庫(kù),以下是一個(gè)基本的實(shí)現(xiàn)步驟,并通過代碼示例講解的非常詳細(xì),需要的朋友可以參考下
    2024-11-11
  • python實(shí)現(xiàn)Oracle查詢分組的方法示例

    python實(shí)現(xiàn)Oracle查詢分組的方法示例

    這篇文章主要介紹了python實(shí)現(xiàn)Oracle查詢分組的方法,結(jié)合實(shí)例形式分析了python使用group by子句及having子句實(shí)現(xiàn)Oracle查詢分組的相關(guān)操作技巧,需要的朋友可以參考下
    2020-04-04

最新評(píng)論

泾阳县| 陵水| 绥德县| 五河县| 曲阜市| 会东县| 许昌县| 贡嘎县| 昌宁县| 出国| 长海县| 青岛市| 康定县| 六盘水市| 洮南市| 铁岭县| 高阳县| 柳河县| 苏尼特右旗| 鄯善县| 宝清县| 东兴市| 大田县| 理塘县| 如皋市| 牟定县| 鹤峰县| 津南区| 崇仁县| 疏勒县| 通州市| 中牟县| 达拉特旗| 江口县| 怀集县| 始兴县| 德令哈市| 进贤县| 长白| 铜梁县| 葫芦岛市|