有人能帮我画这幅图吗
但在点 (0,0) 处有一个小圆负向,就像这里
我是 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
时,它不会产生箭头!换句话说,(及其变体,例如) 是唯一有效的选项。<-
|<-
->
->|