yuchenxi2000 / gravitational-lens

黑洞引力透镜效应

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Gravitational Lens

简介

一个计算黑洞引力透镜效应的demo。

B站视频 https://www.bilibili.com/video/BV1bo4y1973Q

demo图

Icon

各版本之间差别说明

  • archive/*, matlab-demo/*: 第一版,渲染图片

  • src/*, pics/*: 第二版,渲染图片

  • video-rendering/*: 第三版,可以渲染图片+视频

第一版只适用于r趋于无穷的情况(至少取30),因为做的近似比较大。

第二版、第三版适用于所有正数r。

第一版、第二版算法见“数学推导.pdf”“讲稿.pdf”。这两个版本光子方程没有解全,少了一类解,是我当时的疏忽。面向黑洞时渲染没问题,背对时画面中会有一块黑色区域,就是少的一族解。

第三版用的算法和第一版、第二版类似,具体解的形式、实现上有略微差别,pdf还在写。。(咕咕咕)(写完就删第一版、第二版,彻底解决历史遗留问题)

目前最完整的就是第三版,而且第三版可以渲染视频。所以就看video-rendering/*下的内容吧。

TODO

现在还存在的问题:

采样背景图时采用全局坐标,事实上应当使用观察者的局域坐标系。

局域坐标系与运动状态有关,很复杂,等我有空再弄。而且,就算观察者静止,局域坐标系和全局坐标也有区别。具体可参考观测量理论,俞允强写的《广义相对论引论》,北京大学出版社,第四章。

但是如果离黑洞较远(r趋于无穷),局域坐标系可以近似为全局坐标。所以,r较大时的图像是准确的,r较小时只能做参考。

光子轨迹具体是怎么算的?

旧版(糊,别看了)

见 数学推导.pdf

纠错(2019-11-26):

  1. 第5页开头theta_m少了一个常数1/w/sqrt(1+m)
  2. 轨道常数D的计算过于复杂,其实D=1/sqrt(cc)。(第1页第5行方程直接取u=0,注意D=d{theta}/du=1/sqrt(cc))
  3. pdf里使用的图片采样方式是平铺,第二版c++程序里使用天空盒。

讲稿

讲稿.pdf

(本人某课的课程报告)

我也想渲染图片、视频

  1. 到 video-rendering/ 目录下

  2. 把 lensing.cpp 编译成动态库,编译器需要开启C++17

  3. 运行 lensing.py (python需要装opencv、scipy)

About

黑洞引力透镜效应

License:GNU General Public License v3.0


Languages

Language:C++ 95.5%Language:C 4.2%Language:CMake 0.1%Language:Python 0.1%Language:MATLAB 0.1%