# How do I draw lines arising from the boundary of a semicircle using tikz?

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.

\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}


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}


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)

• 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? – Bruce Lee Jun 5 '20 at 19:22
• @BruceLee I added crosses and an explanation how one can move them around. – user194703 Jun 5 '20 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. – Bruce Lee Jun 5 '20 at 19:31