用Python绘制一个仿黑洞图像
作者:微小冷
简介
黑洞图像大家都知道,毕竟前几年刚发布的时候曾火遍全网,甚至都做成表情包了。
问题在于,凭什么认为这就是黑洞的照片,而不是一个甜甜圈啥的给整模糊了得到的呢?有什么理论依据吗?
单位制
利用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仿黑洞内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!