기둥 주위에 호를 그리는 방법은 무엇입니까?

기둥 주위에 호를 그리는 방법은 무엇입니까?

나는 다음과 같은 그림을 그리고 싶습니다. 여기에 이미지 설명을 입력하세요

지금까지 내 코드는 다음과 같습니다.

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc,decorations.markings}
\begin{document}
\begin{tikzpicture}[scale=2]
% axes
\draw [->] (0,-1) --(0,1.5) node [left] {$\mathrm{Im}(p)$};
\draw [->] (-2,0) --(2,0) node [below] {$\mathrm{Re}(p)$};
% pole
\foreach \i/\j in {-0.3/c}{\node[circle, inner sep=1pt] (\j) at (0.9,\i) {$\times$};}
% line
\draw [thick] (-1.5,0) --(0.8,0);
\draw [thick] (1,0) --(1.5,0);
% C - bromwich contour
\node at (-1.2,0) [below right] {$C$};
% mathmode
\draw[<-,shorten <=2mm] (1,-0.3)-- ++ (-20:0.5) node[right] {$v_z=\frac{\mathrm{i}p}{k}$};
% vertical lines
\draw [thick] (0.8,0) -- (0.8,-0.1);
\draw [thick] (1,0) -- (1,-0.1);
% semi circle
\draw (1,-0.1) arc[radius=2mm, start angle=20, end angle=-250];     
\end{tikzpicture}
\end{document}

내 문제는 극 주위에 호를 그리는 방법입니다. 나는 명령을 사용하여 여러 번 시도했습니다그러나 나는 비슷한 그림을 만드는 데 실패했습니다.

그래서 이런 종류의 호/곡선을 수행하는 더 효율적인 방법이 있는지 궁금합니다.

미리 감사드립니다.

답변1

원 위의 화살표가 올바르지 않으며 이 해결 방법을 고려할 수 있는지 모르겠습니다.효율적인그러나 그것은 출발점이 될 수 있습니다.

코드는 cross out극에 모양을 사용합니다. 보이지 않는 원형 노드가 모든 극 위에 그려집니다. 이 노드는 두 조각으로 그려지는 주변 호에 대한 참조로 사용됩니다.

\documentclass[border=2mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc, decorations.markings, shapes.misc}
\begin{document}
\begin{tikzpicture}[scale=2,
    pole/.style={cross out, draw=black, minimum size=2mm}
    ]
% axes
\draw [->] (0,-1) --(0,1.5) node [left] {$\mathrm{Im}(p)$};
\draw [->] (-2,0) --(2,0) node [below] {$\mathrm{Re}(p)$};

% pole
\node[pole] (c) at (0.9,-.3) {};

\node[circle, minimum size=6mm] (aux) at (c) {};

% line
\draw [ultra thick, 
    blue, 
    decoration={markings, 
        mark=at position .05 with {\arrowreversed{stealth}},        
        mark=at position .40 with {\arrowreversed{stealth}}, 
        mark=at position .75 with {\arrowreversed{stealth}}}, 
        postaction={decorate}] 
        (aux.-90) arc(-90:-250:1.5mm)|- (-1.5,0);

\draw [ultra thick,     
    red, 
    decoration={markings, 
        mark=at position .3 with {\arrow{stealth}},         
        mark=at position .80 with {\arrow{stealth}}}, 
        postaction={decorate}] 
 (aux.-90) arc(-90:70:1.5mm)|- (1.5,0);

% C - bromwich contour
\node at (-1.2,0) [below right] {$C$};
% mathmode
\draw[<-,shorten <=2mm] (1,-0.3)-- ++ (-20:0.5) node[right] {$v_z=\frac{\mathrm{i}p}{k}$};

\end{tikzpicture}
\end{document}

여기에 이미지 설명을 입력하세요

답변2

다음은 대안적인 노력입니다.메타포스트에 싸여luamplib도서관. .lualatex

여기에 이미지 설명을 입력하세요

\RequirePackage{luatex85}
\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\begin{document}
\mplibtextextlabel{enable}
\begin{mplibcode}
beginfig(1);
    numeric u;   % unit size
    u = 1cm;

    path xx, yy;  % axes and labels  
    xx = (3 left -- 6 right) scaled u;
    yy = (2 down -- 2 up) scaled u;

    draw xx withcolor .7 white;
    draw yy withcolor .7 white;
    label.bot("$\Re\{v_1\}$", point 1 of xx);
    label.lft("$\Im\{v_2\}$", point 1 of yy);

    % position the pole
    z1 = (2.7u,-1u);

    % label it with a cross
    label("$\times$",z1);  

    % parameters for the pole marker
    numeric gap, radius;  
    gap = 1/8 u;
    radius = 1/3 u;

    path arc, cc;
    % the arc is most of a circle drawn round the pole
    arc = fullcircle rotated 90           % rotate it so point 0 is at top
                     scaled 2 radius      % scale it 
                     shifted z1           % move it to the pole
                     cutbefore yy shifted (x1-gap,0)  % cut off the beginning
                     cutafter  yy shifted (x1+gap,0); % and the end

    % join the arc up with some straight segments to make the contour
    cc = (-2u,0) -- (x1-gap, 0) -- arc -- (x1+gap,0) -- (5u,0);

    % set some drawing options for the arrows
    interim linecap := 0;  % sharp ends
    interim linejoin := 0;  % sharp joins & arrowhead
    drawoptions(withpen pencircle scaled 3/2 withcolor 2/3 red);

    % how many subarrow to show
    subarrows = 4;

    % draw subarrows along cc
    arrowlength = arclength(cc)/subarrows;
    numeric a,b;
    for i = 1 upto subarrows:
        a := arctime (i-1)*arrowlength of cc;
        b := arctime     i*arrowlength of cc;
        drawarrow subpath (a,b) of cc;
    endfor
    drawoptions();

endfig;
\end{mplibcode}
\end{document}

관련 정보