经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Python » 查看文章
用Python绘制一个仿黑洞图像
来源:jb51  时间:2023/2/27 9:41:57  对本文有异议

简介

黑洞图像大家都知道,毕竟前几年刚发布的时候曾火遍全网,甚至都做成表情包了。

问题在于,凭什么认为这就是黑洞的照片,而不是一个甜甜圈啥的给整模糊了得到的呢?有什么理论依据吗?

单位制

利用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,则可得到距离单位的换算关系

同理,根据万有引力常数可得到质量单位的换算关系

所以质量和距离可以分别表示为

观测绘图

尽管我们在地球上观测这个黑洞,但由于相机镜头等因素,实际上肯定不能用这么大的尺度来观测,所以稍微选一个差不多的距离就好

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

shadow就是其发射模型,其内部用于绘图的主要成员有

  • fb1 x xx负半轴
  • fb2 x xx正半轴
  • intensity 发射强度

下面绘制一下不同距离处的发射强度

  1. import matplotlib.pyplot as plt
  2. plt.plot(shadow.fb1, shadow.intensity, "r")
  3. plt.plot(shadow.fb2, shadow.intensity, "r")
  4. plt.xlabel("Impact Paramter (b)")
  5. plt.ylabel("Intensity (Emissivity)")
  6. plt.title("Intensity Plot")
  7. plt.grid()
  8. plt.show()

结果如下图所示,果然中间凹了下去

einsteinpy内嵌了绘图函数,通过ShadowPlotter(shadow, is_line_plot=True)可以更加方便地绘制上述图像,如果将is_line_plot设为False,则可得到强度分布图

  1. from einsteinpy.plotting import ShadowPlotter
  2. obj = ShadowPlotter(shadow=shadow, is_line_plot=False)
  3. obj.plot()
  4. obj.show()
  5. plt.show()

这样一看是不是觉得和前面的那个甜甜圈确有相似之处。

这个模型是根据Cosimo Bambi的文章编写的,论文地址在这:Cosimo Bambi, 10.1103/PhysRevD.87.107501。本来合计着把这篇文章的公式啥的粘过来解读一下,但考虑到贴在这也没人看,想想还是算了。

到此这篇关于用Python绘制一个仿黑洞图像的文章就介绍到这了,更多相关Python仿黑洞内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号