绘制复杂积分

绘制复杂积分

有人能帮我画这幅图吗图片1。

但在点 (0,0) 处有一个小圆负向,就像这里

图片 2.

我是 tikz 的新手,这对我来说太复杂了。任何帮助我都感激不尽。

更新。我使用了您的解决方案(非常感谢大家),结果如下

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc,decorations.markings}
\begin{document}

\begin{tikzpicture}
% Configurable parameters
\def\gap{0.2}
\def\bigradius{3}
\def\littleradius{0.5}

% Axes
\draw [help lines,->] (-1.25*\bigradius, 0) -- (1.25*\bigradius,0);
\draw [help lines,->] (0, -1.25*\bigradius) -- (0, 1.25*\bigradius);
% Red path
\draw[line width=1pt,   decoration={ markings,
  mark=at position 0.2455 with {\arrow[line width=1.2pt]{>}},
  mark=at position 0.765 with {\arrow[line width=1.2pt]{>}},
  mark=at position 0.87 with {\arrow[line width=1.2pt]{>}},
  mark=at position 0.97 with {\arrow[line width=1.2pt]{>}}},
  postaction={decorate}]
  let
     \n1 = {asin(\gap/2/\bigradius)},
     \n2 = {asin(\gap/2/\littleradius)}
  in (\n1:\bigradius) arc (\n1:360-\n1:\bigradius)
  -- (-\n2:\littleradius) arc (-\n2:-360+\n2:\littleradius)
  -- cycle;

% The labels
\node at (3.6,-0.2){$x$};
\node at (-0.24,3.53) {$iy$};
\node at (-0.6,0.43) {$\gamma_{\varepsilon}$};
\node at (-1.8,2.8) {$\gamma_{R}$};
\node at (1.9,0.29) {$l_1$};
\node at (1.555,-0.32) {$l_2$};

\end{tikzpicture}
\end{document} 

我的工作

再次感谢你帮助我。

答案1

我猜最难的部分是红色路径。这里有一个想法:使用极坐标,用一点三角学知识计算每个圆弧的起始角度。

更新另一个困难的部分是将小箭头放在红色路径上。这需要库,decorations.markings但每个箭头的位置的指定很棘手。您可以将其指定为路径总长度的分数(因此 0 表示起点,1 表示终点),但很难猜测中间点的正确值,或者您可以将它们指定为与路径起点的距离(以毫米为单位)。这些可以根据半径的特定值计算,但也很难有一个通用的解决方案。

我选择了“长度的分数”解决方案,经过反复试验后,我得到了正确的值:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc,decorations.markings}
\begin{document}

\begin{tikzpicture}
% Configurable parameters
\def\gap{0.2}
\def\bigradius{3}
\def\littleradius{0.5}

% Axes
\draw (-1.1*\bigradius, 0) -- (1.1*\bigradius,0)
      (0, -1.1*\bigradius) -- (0, 1.1*\bigradius);
% Red path
\draw[red, thick,   decoration={ markings,
      mark=at position 0.17 with {\arrow{latex}}, 
      mark=at position 0.53 with {\arrow{latex}},
      mark=at position 0.755 with {\arrow{latex}},  
      mark=at position 0.955 with {\arrow{latex}}}, 
      postaction={decorate}]  
  let
     \n1 = {asin(\gap/2/\bigradius)},
     \n2 = {asin(\gap/2/\littleradius)}
  in (\n1:\bigradius) arc (\n1:360-\n1:\bigradius)
  -- (-\n2:\littleradius) arc (-\n2:-360+\n2:\littleradius)
  -- cycle;
\end{tikzpicture}
\end{document}

结果

编辑:我最初的答案是atan2(radius,gap/2)找到角度,但我意识到正确的公式应该是asin(gap/2/radius)。对于如此小的角度,差异几乎不可察觉,但正确的就是正确的 :-)

答案2

使用 PSTricks。

在此处输入图片描述

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pstricks-add,pst-eucl}

\psset
{
        PointName=none,
        PointSymbol=none,
        linecap=1,
        linecolor=red,
}

\def\Radius{1.8}
\def\radius{0.5}
\def\Angle{2.5}

\begin{document}
\begin{pspicture}[showgrid=false](-3,-3)(3,3)
    \psaxes[labels=none,ticks=none,linecolor=gray]{->}(0,0)(-3,-3)(2.7,2.7)[$\textbf{Re}\, z$,-90][$\textbf{Im}\, z$,180]
    \pstGeonode 
        (0,0){O}
        (\Radius;\Angle){A}
        (\Radius;90){B}
        (\Radius;-90){C}
        (\Radius;-\Angle){D}
        (\radius;0|D){E}
        (\radius;0|A){F}
    \pstArcOAB[arrows=->,arcsepB=-3pt]{O}{A}{B}
    \pstArcOAB[arrows=->,arcsepB=-3pt]{O}{B}{C}
    \pstArcOAB{O}{C}{D}
    \pstLineAB[ArrowInside=->]{D}{E}
    \pstArcnOAB{O}{E}{F}
    \pstLineAB[ArrowInside=->]{F}{A}
    %labeling
    \psset{labelsep=2pt}
    \uput[45](\Radius;45){$\Gamma$}
    \uput[135](\radius;135){$\gamma$}
    \uput[-45](\Radius;0){$R$}
    \uput[-135](\Radius;180){$-R$}  
\end{pspicture}
\end{document}

注意,实际上这种问题已经得到回答这里

动画版

在此处输入图片描述

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pstricks-add,pst-eucl}

\psset
{
        PointName=none,
        PointSymbol=none,
        linecap=1,
        linecolor=red,
}


\def\Radius{1.8}

\begin{document}
\multido{\nr=0.25+0.05,\na=1.0+1.0}{15}{%
\def\Angle{\na}
\def\radius{\nr}
\begin{pspicture}[showgrid=false](-3,-3)(3,3)
    \psaxes[labels=none,ticks=none,linecolor=gray]{->}(0,0)(-3,-3)(2.7,2.7)[$\textbf{Re}\, z$,-90][$\textbf{Im}\, z$,180]
    \pstGeonode 
        (0,0){O}
        (\Radius;\Angle){A}
        (\Radius;90){B}
        (\Radius;-90){C}
        (\Radius;-\Angle){D}
        (\radius;0|D){E}
        (\radius;0|A){F}
    \pstArcOAB[arrows=->,arcsepB=-3pt]{O}{A}{B}
    \pstArcOAB[arrows=->,arcsepB=-3pt]{O}{B}{C}
    \pstArcOAB{O}{C}{D}
    \pstLineAB[ArrowInside=->]{D}{E}
    \pstArcnOAB{O}{E}{F}
    \pstLineAB[ArrowInside=->]{F}{A}
    %labeling
    \psset{labelsep=3pt}
    \uput[45](\Radius;45){$\Gamma$}
    \uput[135](\radius;135){$\gamma$}
    \uput[-45](\Radius;0){$R$}
    \uput[-135](\Radius;180){$-R$}  
\end{pspicture}}
\end{document}

警告:

的一个特殊之处是,当(及其变体,例如) 被赋值给它ArrowInside时,它不会产生箭头!换句话说,(及其变体,例如) 是唯一有效的选项。<-|<-->->|

相关内容