TikZ:黑洞透镜效应

TikZ:黑洞透镜效应

我正在尝试在 tikz 中绘制一个黑洞,然后将其叠加在背景中有星星的真实天文图像上。因此,我拍摄了一张真实图像,然后在星星之间插入了一个黑洞,目标是理想情况下它应该看起来像这张图片

困难的部分是透镜效应,也就是黑洞周围的光环。我真的不知道该怎么做才能让它看起来逼真。

我的第一次天真的尝试是:

\documentclass{article}

\usepackage{tikz}

\usepackage[active,tightpage]{preview}  %generates a tightly fitting border around the work
\PreviewEnvironment{tikzpicture}
\setlength\PreviewBorder{2mm}


\begin{document}

\begin{tikzpicture}

\draw [orange,fill=white,very thin] (0,0) circle (.515);
\shade[ball color = black] (0,0) circle (.5);

\end{tikzpicture}

\end{document}

当与一片这张天文图像(向下滚动可查看不同质量的下载链接),这张还不太令人满意的图片:

在此处输入图片描述

我该如何改善这个现象,特别是黑洞周围的光环?

它不需要像照片一样逼真。但如果能比我目前所得到的效果有所改进就太好了!非常感谢您的帮助和建议!

答案1

在此处输入图片描述

我使用随机生成的白点和多个段落(\foreach循环使得代码相当长)来表示星星,并使用一些具有各种透明度的圆圈来表示黑洞透镜效果。我不知道这是否接近您想要的效果。

代码

\documentclass[11pt, border=.5cm]{standalone}
\usepackage{tikz} 
\usetikzlibrary{fadings}

\xdefinecolor{B}{RGB}{2, 17, 34}

\begin{document}

\tikzfading[name=fade out, inner color=transparent!0,
outer color=transparent!100]
\tikzset{
  star/.style={B, fill=white, path fading=fade out}
}
\begin{tikzpicture}
  % background color
  \clip (-4, -4) rectangle (4, 4);
  \draw[white, shading=mradial, inner color=black,
  middle color=B!60!black, outer color=B]
  (-4, -4) rectangle (4, 4);

  % stars foreground
  \foreach \i in {1, ..., 40}{%
    \pgfmathparse{random()}
    \pgfmathsetmacro{\a}{\pgfmathresult}
    \pgfmathparse{random()}
    \pgfmathsetmacro{\d}{\pgfmathresult}
    \filldraw[star] ({\a*360}: 1+\d/6) circle (.75pt);
  }
  \foreach \i in {1, ..., 30}{%
    \pgfmathparse{random()}
    \pgfmathsetmacro{\a}{\pgfmathresult}
    \pgfmathparse{random()}
    \pgfmathsetmacro{\d}{\pgfmathresult}
    \pgfmathparse{random()}
    \pgfmathsetmacro{\r}{\pgfmathresult}
    \draw[star] ({\a*360}: 1+1/6+\d) circle (\r pt);
  }
  \foreach \i in {1, ..., 30}{%
    \pgfmathparse{random()}
    \pgfmathsetmacro{\a}{\pgfmathresult}
    \pgfmathparse{random()}
    \pgfmathsetmacro{\d}{\pgfmathresult}
    \pgfmathparse{random()}
    \pgfmathsetmacro{\r}{\pgfmathresult}
    \draw[star] ({\a*360}: 2+1/6+\d) circle (1.5*\r pt);
  }
  \foreach \i in {1, ..., 30}{%
    \pgfmathparse{random()}
    \pgfmathsetmacro{\a}{\pgfmathresult}
    \pgfmathparse{random()}
    \pgfmathsetmacro{\d}{\pgfmathresult}
    \pgfmathparse{random()}
    \pgfmathsetmacro{\r}{\pgfmathresult}
    \draw[star] ({\a*360}: 3+1/6+\d) circle (1.25*\r pt);
  }

  stars background
  \foreach \i in {1, ..., 180}{%
    \pgfmathparse{rand}
    \pgfmathsetmacro{\x}{\pgfmathresult}
    \pgfmathparse{rand}
    \pgfmathsetmacro{\y}{\pgfmathresult}
    \filldraw[white] (4*\x, 4*\y) circle (.3 pt);
  }

  % black hole
  \foreach \i [evaluate=\i as \t using 1/\i] in {2, 3, ..., 20}{%
    \draw[white, thick, opacity=\t] (0, 0) circle (.9+\i/100);
  }
  \fill[black, opacity=.9] (0, 0) circle (1);
\end{tikzpicture} 
\end{document}

相关内容