使用 Tikz 绘制相对论因果结构图

使用 Tikz 绘制相对论因果结构图

我对在 Tikz 中绘制因果结构的相对论图表很感兴趣。在这些图表中,人们通常对绘制某个区域的因果未来和过去感兴趣。这些因果未来和过去通常以 45º 角与该区域相切,然后沿着该区域的边界,然后以另一条切线离开该区域。以下是 Christian Bär 的一个例子,我从研究之门在此处输入图片描述

如何在 Tikz 中绘制这样的图形?对于最简单的情况,即斑点 A 是椭圆形,我设法通过手动计算线条应接触斑点的位置来进行正确的绘制,但我想知道是否有更通用的方法可以允许使用其他形状的斑点。

这是椭圆形斑点的 MWE:

\documentclass[tikz]{standalone}
\usetikzlibrary{calc}
\begin{document}
\pgfmathsetmacro\a{3}
\pgfmathsetmacro\b{2}
\pgfmathsetmacro\l{1.6*sqrt(\a^2+\b^2)}
\pgfmathsetmacro\THETA{acos(\a/sqrt(\a^2+\b^2))}
\begin{tikzpicture}
\draw[black, ultra thick] (0,0) ellipse [x radius=\a, y radius=\b];
\draw[red, ultra thick] ($\a*cos(\THETA)*(1,0)+\b*sin(\THETA)*(0,1) + (315:\l)$) -- ($\a*cos(\THETA)*(1,0)+\b*sin(\THETA)*(0,1)$) arc [start angle=\THETA, end angle=180-\THETA, x radius=\a, y radius=\b] -- +(225:\l);
\draw[blue, ultra thick] ($\a*cos(\THETA)*(1,0)-\b*sin(\THETA)*(0,1) + (45:\l)$) -- ($\a*cos(\THETA)*(1,0)-\b*sin(\THETA)*(0,1)$) arc [start angle=-\THETA, end angle=-180+\THETA, x radius=\a, y radius=\b] -- +(135:\l);
\end{tikzpicture}
\end{document}

它的输出如下:

在此处输入图片描述

答案1

正如评论中提到的,一般方法需要非常复杂的技术。但是,你可以用一种简单的方法绘制类似的图表。让点 A、B、C、D 固定。通过调整其他点,你可以改变 blob 的形状。这可以使用 TikzEdt 轻松完成。

\documentclass[tikz,border=10]{standalone}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}[thick,bullet/.style={circle,fill,inner sep=1.5pt}]
  \coordinate (A) at (0.2,-0.1);
  \coordinate (B) at (0.2,1);
  \coordinate (C) at (5,1.7);
  \coordinate (D) at (5,0);
  \path[save path=\blob] plot[smooth cycle,tension=0.5]
    coordinates{(A)  (0,0.4)  (B) (1.2,1.4) (2.6,1.4) (3.9,2.2) (C) (5.3,0.9) (D) (3.5,-0.6) (0.8,-0.4) };
  \draw[use path=\blob];
  \draw[blue] (A) -- +(135:5);
  \draw[blue] (D) -- +(45:5);
  \draw[red] (B) -- +(-135:5);
  \draw[red] (C) -- +(-45:5);
  \begin{scope}
    \clip ($(B)+(0,-1)$) rectangle ($(C)+(0,1)$);
    \draw[red,use path=\blob];
  \end{scope}
  \begin{scope}
    \clip ($(A)+(0,-1)$) rectangle ($(D)+(0,1)$);
    \draw[blue,use path=\blob];
  \end{scope}
  \foreach \p in {A,B,C,D}
    \node[bullet,label=above:$\p$] at (\p) {};
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容