11

It's an easy TikZ question for people who use it. I tried reading the TikZ manual p. 112 several times but it seems too complicated on the filling part, all the infinity and whatnot... So I currently have this code:

\documentclass[letterpaper,12pt]{exam}
\usepackage{pgfplots}
\begin{document}

\begin{center}
    \begin{tikzpicture}
    \draw (0,0) -- (9.2106,4.228) -- (10.857,0) -- (9.2106,-4.228) -- cycle (9.2106,-4.228) arc (-22.5:22.5:11cm)
    node [left] at (0,0) {$O$}
    node [above] at (9.2106,4.228) {$A$}
    node [below] at (9.2106,-4.228) {$B$}
    node [right] at (10.857,0) {$P$};
    node at (2,1) {0.8 rad};
    \end{tikzpicture}

    \begin{tikzpicture}
    \draw (-3,0) -- (3,0);
    \draw (3,0) arc (0:180:3cm);
    \draw (2.5980762,1.5) -- (-2.12132,2.121320)
    node [yshift=-2pt,below] at (0,0) {$O$}
    node [xshift=-2pt,left] at (-3,0) {$A$}
    node [xshift=-2pt,left] at (-2.12132,2.121320) {$B$}
    node [xshift=2pt,right] at (2.5980762,1.5) {$C$}
    node [xshift=2pt,right] at (3,0) {$D$};
    \fill (0,0) circle [radius=2pt] (3,0) circle [radius=2pt] (-3,0) circle [radius=2pt] (-2.12132,2.121320) circle [radius=2pt] (2.5980762,1.5) circle [radius=2pt];
    \end{tikzpicture}
\end{center}
\end{document}

And what it produces is these 2 pictures, without the shading. I need to shade the areas shaded in this picture and add the 0.8 rad but as you see, the node isn't working for some reason. enter image description here

0

3 Answers 3

4

Here's a slightly different solution using intersection segments (you actually need pgfplots for this), and the tkz-euclide package for the angle.

Since you mentioned shading, I applied some shading. I had to re-create some paths such as the arc A-B, since it was not "perfect". Basically the arc didn't actually reach the coordinate A:

enter image description here

So I used the command <coordinate> to[bend right=20] <coordinate> which, except for minor (negligible) differences, described the same arc.

Output

enter image description here

Code

\documentclass[letterpaper,12pt]{exam}
\usepackage{pgfplots}
\usepackage{tikz,tkz-euclide}
\usetkzobj{all}

\usetikzlibrary{fillbetween,backgrounds}

\begin{document}
\begin{center}
\begin{tikzpicture}                 
    \draw (0,0) -- (9.2106,4.228) -- (10.857,0) -- (9.2106,-4.228) -- cycle (9.2106,-4.228) to[bend right=20] (9.2106,4.228)
    node [left] at (0,0) {$O$}
    node [above] at (9.2106,4.228) {$A$}
    node [below] at (9.2106,-4.228) {$B$}
    node [right] at (10.857,0) {$P$};
    node at (2,1) {0.8 rad};

\filldraw[draw=black,bottom color=black, top color=white] (9.2106,4.228) -- (10.857,0) -- (9.2106,-4.228) to[bend right=20] (9.2106,4.228);

\coordinate (O) at (0,0);
\coordinate (A) at (9.2106,4.228);
\coordinate (B) at (9.2106,-4.228);
\tkzFindAngle(B,O,A) 
\tkzMarkAngle[draw=black,size=2.5](B,O,A)
\tkzLabelAngle[dist=1.5](B,O,A){0.8 rad}
\end{tikzpicture}
\begin{tikzpicture} 
    \draw (-3,0) -- (3,0);
    \draw[name path=curve] (3,0) arc (0:180:3cm);
    \draw (2.5980762,1.5) -- (-2.12132,2.121320)
    node [yshift=-2pt,below] at (0,0) {$O$}
    node [xshift=-2pt,left] at (-3,0) {$A$}
    node [xshift=-2pt,left] at (-2.12132,2.121320) {$B$}
    node [xshift=2pt,right] at (2.5980762,1.5) {$C$}
    node [xshift=2pt,right] at (3,0) {$D$};

\fill (0,0) circle [radius=2pt] (3,0) circle [radius=2pt] (-3,0) circle [radius=2pt] (-2.12132,2.121320) circle [radius=2pt] (2.5980762,1.5) circle [radius=2pt];

\begin{scope}[on background layer]
    \path[name path=line1] (2.5980762,1.5) -- (-2.13132,2.121320);
    \path[name path=myarc,intersection segments={of=line1 and curve}];
    \filldraw[draw=black,bottom color=black, top color=white]
    [intersection segments={of=line1 and myarc}];
\end{scope}
\end{tikzpicture}
\end{center}
\end{document}

Some colour!

Replace the shade colours with bottom color=blue!50!black, top color=cyan!50

figure 2

5
  • Wow that's so pretty. I wonder why the "0.8 rad" works for you but not for me. :S
    – Zack Fair
    May 28, 2015 at 9:34
  • @FahimAbdullah This code doesn't work in your document?
    – Alenanno
    May 28, 2015 at 10:37
  • Yeah it works very well. I was jut referring to the node at (2,1) {0.8 rad}; in my code but it seems you made a different piece of code to add the angle rather than this. But why doesn't it work? It's supposed to, since it's a node with some text, right?
    – Zack Fair
    May 28, 2015 at 11:34
  • @FahimAbdullah Try \node[anchor=west] at (.5,0) {0.8 rad};
    – Alenanno
    May 28, 2015 at 11:55
  • Oh thanks that works (without the ). Although I will stick to your one with the angle marker. It's much prettier. :)
    – Zack Fair
    May 28, 2015 at 12:53
4

You just need to delimit the areas. For the first case it's easy, but the second one is trickier. In this case the whole semicircle is filled but previous clip command defines which area will be preserved and which one eliminated. Both fill has been drawn on the background layer, this way previously drawn lines appear on top.

\documentclass[letterpaper,12pt]{exam}
\usepackage{tikz}
\usetikzlibrary{backgrounds}
\begin{document}

\begin{center}
    \begin{tikzpicture}
    \draw (0,0) -- (9.2106,4.228) -- (10.857,0) -- (9.2106,-4.228) -- cycle (9.2106,-4.228) arc (-22.5:22.5:11cm)
    node [left] at (0,0) {$O$}
    node [above] at (9.2106,4.228) {$A$}
    node [below] at (9.2106,-4.228) {$B$}
    node [right] at (10.857,0) {$P$};
    node at (2,1) {0.8 rad};

    \begin{scope}[on background layer]
    \fill[gray] (9.2106,4.228) arc (22.5:-22.5:11cm) -- (10.857,0) -- cycle;
    \end{scope}

    \draw (22.5:2.5cm) arc (22.5:-22.5:2.5) node[midway,left] {0.8 rad};
    \end{tikzpicture}

    \begin{tikzpicture}
    \draw (-3,0) -- (3,0);
    \draw (3,0) arc (0:180:3cm);
    \draw (2.5980762,1.5) -- (-2.12132,2.121320)
    node [yshift=-2pt,below] at (0,0) {$O$}
    node [xshift=-2pt,left] at (-3,0) {$A$}
    node [xshift=-2pt,left] at (-2.12132,2.121320) {$B$}
    node [xshift=2pt,right] at (2.5980762,1.5) {$C$}
    node [xshift=2pt,right] at (3,0) {$D$};
    \fill (0,0) circle [radius=2pt] (3,0) circle [radius=2pt] (-3,0) circle [radius=2pt] (-2.12132,2.121320) circle [radius=2pt] (2.5980762,1.5) circle [radius=2pt];

    \begin{scope}[on background layer]
    \clip (-2.12132,2.121320) --++(90:2cm) -| (2.5980762,1.5)--cycle;
    \fill[gray] (3,0) arc (0:180:3cm)--cycle;
    \end{scope}
    \end{tikzpicture}
\end{center}
\end{document}

enter image description here

4

There's nothing about your example that requires pgfplots. You only need tikz. Nevertheless I've kept your preamble.

\documentclass[letterpaper,12pt]{exam}
\usepackage{pgfplots}
\begin{document}

\begin{center}
    \begin{tikzpicture}
    \path
        (0,0)           coordinate (O)
        (9.2106,4.228)  coordinate (A)
        (9.2106,-4.228) coordinate (B)
        (10.857,0)      coordinate (P);
    \draw   (O) -- 
            (A) -- 
            (P) -- 
            (B) -- 
            cycle 
            (B) arc (-22.5:22.5:11cm);
    \path
      node [left]  at (O) {$O$}
      node [above] at (A) {$A$}
      node [below] at (B) {$B$}
      node [right] at (P) {$P$};
      node at (2,1) {0.8 rad};

    \fill (B) arc (-22.5:22.5:11cm) -- (P) -- cycle;
    \end{tikzpicture}

    \begin{tikzpicture}
    \path
       coordinate (O) at (0,0)               
       coordinate (A) at (-3,0)                      
       coordinate (B) at (-2.12132,2.121320) 
       coordinate (C) at (2.5980762,1.5)     
       coordinate (D) at (3,0)               ;

    \draw (A) -- (D);
    \draw (D) arc (0:180:3cm);
    \draw (C) -- (B);
    \fill (O) circle [radius=2pt] node [yshift=-2pt,below] {$O$}
          (D) circle [radius=2pt] node [xshift=2pt,right]  {$D$}
          (A) circle [radius=2pt] node [xshift=-2pt,left]  {$A$}
          (B) circle [radius=2pt] node [xshift=-2pt,left]  {$B$}
          (C) circle [radius=2pt] node [xshift=2pt,right]  {$C$}
          ;
    \pgfmathanglebetweenpoints{\pgfpointanchor{O}{center}}
                              {\pgfpointanchor{C}{center}}
    \edef\aeAngOC{\pgfmathresult}
    \pgfmathanglebetweenpoints{\pgfpointanchor{O}{center}}
                              {\pgfpointanchor{B}{center}}
    \edef\aeAngOB{\pgfmathresult}

    \fill (B) -- (C) arc (\aeAngOC:\aeAngOB:3cm);

    \end{tikzpicture}
\end{center}
\end{document}

enter image description here

To facilitate things, I've named the coordinates.

The first picture is easy enough to create and I'll leave my code for it unexplained.

For the second picture a bit more work needs to be done. I need just the portion of the arc above the chord. To create only that portion of the arc, I find the angles along OC and OB. This is done with the command:

\pgfmathanglebetweenpoints{<point>}{<point>}

But pgf does not expect coordinate or node names, to get around this I use the macro

\pgfpointanchor{<coordinate name>}{center}

\pgfmathanglebetweenpoints doesn't return a value; it saves the calculated angle to \pgfmathresult. I need to save this value before I do anything else with TikZ. (TikZ uses this macro all over the place in many, many of its path calculations etc.) To extract the value of \pgfmathresult I use

\edef<command sequence>{\pgfmathresult}

Using \edef here is important because you want the value of \pgfmathresult at the time of the definition.

1
  • Thanks so much. I used pgfplot so it loads anything else I might need from TikZ like the library stuff and all. Ofcourse I could load only TikZ and then anything else separately but I guess this is more compact.
    – Zack Fair
    May 27, 2015 at 22:01

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.