0

I want to draw the diagram on the left in the following image using tikz. Till now I have been able to draw the diagram on the right hand side using the code given below. What I want to do is to cut out the lower half of this diagram and construct a semicircle in the bottom half such that the curved lines start from the boundary of the semicircle.

Along with this major change I would like bold arrow tips on these curved lines and the origin of these lines on the semicircle to be marked with a cross. Thanks. enter image description here

\documentclass[convert]{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.pathmorphing}
\usetikzlibrary{calc}
\usetikzlibrary{arrows,decorations.markings}

\begin{document}
\begin{tikzpicture}
\node (I)    at ( 4,0)   {};
\node (II)   at (-4,0)   {};
\node (III)  at (0, 2.5) {};
\node (IV)   at (0,-2.5) {};

\path  
 (II) +(90:4)  coordinate[label=90:]  (IItop)
   +(-90:4) coordinate[label=-90:] (IIbot)
   +(0:4)   coordinate                  (IIright)
   +(180:4) coordinate[label=180:] (IIleft);

\draw (IItop) --
      node[midway, below] {}
  (IIright) -- 
  (IIbot);

\draw   
 (IItop) -- (IIbot);

\path 
  (I) +(90:4)  coordinate (Itop)
   +(-90:4) coordinate (Ibot)
   +(180:4) coordinate (Ileft)
   +(0:4)   coordinate (Iright)
   ;

\draw  (Ileft) -- node[midway, below] {}(Itop) -- (Ibot) -- (Ileft) -- cycle;


\draw[decorate,decoration=zigzag, red, thick] (IItop) -- (Itop)
  node[midway, above, inner sep=2mm] {};

\draw[decorate,decoration=zigzag, red, thick] (IIbot) -- (Ibot)
  node[midway, below, inner sep=2mm] {};

\draw[blue, thick]   
($(Itop)!.5!(Ileft)$) to[out=210, in=-30, looseness=1.3] ($(IItop)!.5!(IIright)$);
\draw[violet, thick]   
($(Itop)!.3!(Ileft)$) to[out=210, in=-30, looseness=1.3] ($(IItop)!.3!(IIright)$);


\draw[->][magenta] 
($(Ibot)!.63!(IIbot)$) to[out=150, in=250, looseness=1.1] ($(Itop)!.60!(IItop)$);



    \draw[->][orange]   
 ($(Ibot)!.63!(IIbot)$) to[out=110, in=210, looseness=1.05] ($(Itop)!.65!(IItop)$);
 \draw[fill] ($(Itop)!.5!(Ileft)$) circle [radius=0.05];

\draw[fill] ($(IItop)!.5!(IIright)$) circle [radius=0.05];

\draw[fill] ($(Itop)!.3!(Ileft)$) circle [radius=0.05];

\draw[fill] ($(IItop)!.3!(IIright)$) circle [radius=0.05];


\end{tikzpicture}  
\end{document}
0

1 Answer 1

0

Here is a proposal. Note that most of your code was not needed, such as empty nodes.

\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{arrows.meta,bending,calc,decorations.markings,decorations.pathmorphing,shapes.misc}
\tikzset{% 
    ->-/.style={
    decoration={
        markings,
         mark=at position 0 with {\pgfextra{%
         \pgfmathsetmacro{\tmpArrowTime}{\pgfkeysvalueof{/tikz/arc arrow/length}/(\pgfdecoratedpathlength)}%
         \xdef\tmpArrowTime{\tmpArrowTime}}},
        mark=at position {#1-3*\tmpArrowTime} with {\coordinate(@1);},
        mark=at position {#1-2*\tmpArrowTime} with {\coordinate(@2);},
        mark=at position {#1-1*\tmpArrowTime} with {\coordinate(@3);},
        mark=at position {#1+\tmpArrowTime/2} with {\coordinate(@4);
        \draw[-{Stealth[length=\pgfkeysvalueof{/tikz/arc arrow/length},bend]}] plot[smooth]
         coordinates {(@1) (@2) (@3) (@4)};},
        },
     postaction=decorate,
     },
     ->-/.default=0.5,
     arc arrow/.cd,length/.initial=2.5mm,
}

\begin{document}
\begin{tikzpicture}[>={Stealth[bend]},
    dot/.style={circle,fill=black,inner sep=0pt,minimum size=3pt},
    cross/.style={cross out,draw}]
 \draw (4,0) coordinate (r) arc[start angle=0,end angle=-180,radius=4]
  coordinate[pos=0.5,cross] (p1) coordinate[pos=0.6,cross] (p2)  coordinate[pos=1] (r) -- 
  (-4,4) coordinate (tl) -- (0,0) coordinate (O) -- (4,4) coordinate (tr) --
  cycle;
 \draw[decorate,decoration=zigzag, red, thick] (tl) -- (tr);
 \draw[blue, thick]   
 ($(tr)!.5!(O)$) coordinate[dot] to[out=210, in=-30, looseness=1.3] ($(tl)!.5!(O)$)
 coordinate[dot];
 \draw[violet, thick]   
 ($(tr)!.3!(O)$) coordinate[dot]  
 to[out=210, in=-30, looseness=1.3] ($(tl)!.3!(O)$) coordinate[dot];

 \draw[->-,magenta] (p1) to[out=150, in=250, looseness=1.1] ($(tr)!.60!(tl)$);
 \draw[->-,orange]  (p2)  to[out=110, in=240, looseness=1.05]  ($(tr)!.65!(tl)$);
\end{tikzpicture}  
\end{document}

enter image description here

The positions of the cross nodes are controlled by pos=0.5 and pos=0.6, respectively, in

 coordinate[pos=0.5,cross] (p1) coordinate[pos=0.6,cross] (p2)
3
  • Thanks this seems useful, is it possible to put the arrows in the middle and mark the points where the orange and magenta lines arise from the semicircle with a cross?
    – user92145
    Jun 5, 2020 at 19:22
  • 1
    @BruceLee I added crosses and an explanation how one can move them around.
    – user194703
    Jun 5, 2020 at 19:27
  • Thank you very much. Just a minor point, is it possible to put the arrows in the middle of the orange and magenta lines because they tend not to get noticed if you put them at the endpoints. That is the reason why I put the arrows in my hand-drawn diagram in the middle.
    – user92145
    Jun 5, 2020 at 19:31

You must log in to answer this question.