首頁 > 軟體

用Python繪製一個仿黑洞影象

2023-02-25 06:01:20

簡介

黑洞影象大家都知道,畢竟前幾年剛釋出的時候曾火遍全網,甚至都做成表情包了。

問題在於,憑什麼認為這就是黑洞的照片,而不是一個甜甜圈啥的給整模糊了得到的呢?有什麼理論依據嗎?

單位制

利用einsteinpy模組中的Shadow類,可以實現黑洞吸積盤的發射強度,換言之,用理論模擬一下黑洞的照片應該是什麼樣子的。

22年5月份釋出的是人馬座A*的照片,這個"黑洞"的質量為8.26×1036kg,距離地球26673光年。

根據原始碼推測,einstenipy中採用幾何單位制,光速和萬有引力常數設為1, 即c=G=1。現設幾何單位制下的時間、距離以及質量單位為S,M,KG,國際制單位為s,m,kg,若以時間單位秒為基本單位,即1s=1S,由於幾何單位制下光速Sc=1M/S,則可得到距離單位的換算關係

同理,根據萬有引力常數可得到質量單位的換算關係

所以質量和距離可以分別表示為

觀測繪圖

儘管我們在地球上觀測這個黑洞,但由於相機鏡頭等因素,實際上肯定不能用這麼大的尺度來觀測,所以稍微選一個差不多的距離就好

import astropy.units as u
from einsteinpy.rays import Shadow
mass = 1.98 * u.kg         
fov  = 100 * u.km
shadow = Shadow(mass=mass, fov=fov, n_rays=1000)

shadow就是其發射模型,其內部用於繪圖的主要成員有

  • fb1 x xx負半軸
  • fb2 x xx正半軸
  • intensity 發射強度

下面繪製一下不同距離處的發射強度

import matplotlib.pyplot as plt
plt.plot(shadow.fb1, shadow.intensity, "r")
plt.plot(shadow.fb2, shadow.intensity, "r")
plt.xlabel("Impact Paramter (b)")
plt.ylabel("Intensity (Emissivity)")
plt.title("Intensity Plot")
plt.grid()
plt.show()

結果如下圖所示,果然中間凹了下去

einsteinpy內嵌了繪圖函數,通過ShadowPlotter(shadow, is_line_plot=True)可以更加方便地繪製上述影象,如果將is_line_plot設為False,則可得到強度分佈圖

from einsteinpy.plotting import ShadowPlotter
obj = ShadowPlotter(shadow=shadow, is_line_plot=False)
obj.plot()
obj.show()
plt.show()

這樣一看是不是覺得和前面的那個甜甜圈確有相似之處。

這個模型是根據Cosimo Bambi的文章編寫的,論文地址在這:Cosimo Bambi, 10.1103/PhysRevD.87.107501。本來合計著把這篇文章的公式啥的粘過來解讀一下,但考慮到貼在這也沒人看,想想還是算了。

到此這篇關於用Python繪製一個仿黑洞影象的文章就介紹到這了,更多相關Python仿黑洞內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com