TikZ 和基本域

TikZ 和基本域

首先,如果这个问题之前已经问过,我要道歉。我试图描绘出一个基本领域的行动图景。模块化(即$PSL_2(\mathbb{Z})$)在庞加莱双曲平面上作用TikZ,我想知道是否有一种简单的方法可以做到这一点。特别是,我想重新创建本文第 33 页上的图像:http://www.math.ou.edu/~kmartin/mfs/ch3.pdf,或者参见维基百科中的这张图片:

来自维基百科

任何帮助都将受到赞赏。

答案1

我不知道如何计算每次迭代的半径或如何确定 x 步数,但原则上你可以做这样的事情:

代码

\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{arrows}

\begin{document}

\pgfmathsetmacro{\myxlow}{-2}
\pgfmathsetmacro{\myxhigh}{2}
\pgfmathsetmacro{\myiterations}{6}

\begin{tikzpicture}[scale=2]
    \draw[-latex](\myxlow-0.1,0) -- (\myxhigh+0.2,0);
    \pgfmathsetmacro{\succofmyxlow}{\myxlow+0.5}
    \foreach \x in {\myxlow,\succofmyxlow,...,\myxhigh}
    {   \draw (\x,0) -- (\x,-0.05) node[below,font=\tiny] {\x};
    }
    \foreach \y  in {0.2,0.4,...,1}
    {   \draw (0,\y) -- (-0.05,\y) node[left,font=\tiny] {\pgfmathprintnumber{\y}};
    }
    \draw[-latex](0,-0.1) -- (0,1.2);
    \clip (\myxlow,0) rectangle (\myxhigh,1.1);
    \foreach \i in {1,...,\myiterations}
    {   \pgfmathsetmacro{\mysecondelement}{\myxlow+1/pow(2,floor(\i/3))}
        \pgfmathsetmacro{\myradius}{pow(1/3,\i-1}
        \foreach \x in {-2,\mysecondelement,...,2}
        {   \draw[very thin, blue] (\x,0) arc(0:180:\myradius);
            \draw[very thin, blue] (\x,0) arc(180:0:\myradius);
        }   
    }
\end{tikzpicture}

\end{document}

输出

在此处输入图片描述


编辑1:为了随后填充区域,我将 放在clip一个范围内以保持效果的局部性。如果您clip多次使用,则使用所有值的交集,因此我按以下方式进行操作:首先,我剪切一个从 -0.5 到 0.5 的矩形区域,然后剪切中间圆弧的“外部”,从而得到您要查找的区域。提示:您可以将 s 替换clip为 ,\fill[opacity=0.5]以直观地了解剪切区域的构造方式。

输出,无图层

在此处输入图片描述

如您所见,事后填充的缺点是它会覆盖现有线条。这可以通过使用图层来解决。首先在主图层中绘制所有内容,然后填充背景图层:

代码

\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{arrows}

\pgfdeclarelayer{background}
\pgfsetlayers{background,main}

\begin{document}

\pgfmathsetmacro{\myxlow}{-2}
\pgfmathsetmacro{\myxhigh}{2}
\pgfmathsetmacro{\myiterations}{6}

\begin{tikzpicture}[scale=2]
    \draw[-latex](\myxlow-0.1,0) -- (\myxhigh+0.2,0);
    \pgfmathsetmacro{\succofmyxlow}{\myxlow+0.5}
    \foreach \x in {\myxlow,\succofmyxlow,...,\myxhigh}
    {   \draw (\x,0) -- (\x,-0.05) node[below,font=\tiny] {\x};
    }
    \foreach \y  in {0.2,0.4,...,1.4}
    {   \draw (0,\y) -- (-0.05,\y) node[left,font=\tiny] {\pgfmathprintnumber{\y}};
    }
    \draw[-latex](0,-0.1) -- (0,1.6);
    \begin{scope}   
        \clip (\myxlow,0) rectangle (\myxhigh,1.1);
        \foreach \i in {1,...,\myiterations}
        {   \pgfmathsetmacro{\mysecondelement}{\myxlow+1/pow(2,floor(\i/3))}
            \pgfmathsetmacro{\myradius}{pow(1/3,\i-1}
            \foreach \x in {-2,\mysecondelement,...,2}
            {   \draw[very thin, blue] (\x,0) arc(0:180:\myradius);
                \draw[very thin, blue] (\x,0) arc(180:0:\myradius);
            }   
        }
    \end{scope}
    \begin{scope}
        \begin{pgfonlayer}{background}
            \clip (-0.5,0) rectangle (0.5,1.7);
            \clip   (1,1.7) -| (-1,0) arc (180:0:1) -- cycle;
            \fill[gray,opacity=0.8] (-1,-1) rectangle (1,2);
        \end{pgfonlayer}
    \end{scope}
\end{tikzpicture}

\end{document}

Outout,有层次

在此处输入图片描述

相关内容