Here's a solution that uses the `decorations`

library and declares a new `discontinuity`

decoration, which is essentially a single `zigzag`

in the middle of the first segment of a path. The length and amplitude of the discontinuity symbol are controlled using the standard decoration options `segment length`

and `amplitude`

.

```
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{decorations}
\begin{document}
\pgfdeclaredecoration{discontinuity}{start}{
\state{start}[width=0.5\pgfdecoratedinputsegmentremainingdistance-0.5\pgfdecorationsegmentlength,next state=up from center]
{}
\state{up from center}[width=+.5\pgfdecorationsegmentlength, next state=big down]
{
\pgfpathlineto{\pgfpointorigin}
\pgfpathlineto{\pgfqpoint{.25\pgfdecorationsegmentlength}{\pgfdecorationsegmentamplitude}}
}
\state{big down}[next state=center finish]
{
\pgfpathlineto{\pgfqpoint{.25\pgfdecorationsegmentlength}{-\pgfdecorationsegmentamplitude}}
}
\state{center finish}[width=0.5\pgfdecoratedinputsegmentremainingdistance, next state=do nothing]{
\pgfpathlineto{\pgfpointorigin}
\pgfpathlineto{\pgfpointdecoratedinputsegmentlast}
}
\state{do nothing}[width=\pgfdecorationsegmentlength,next state=do nothing]{
\pgfpathlineto{\pgfpointdecoratedinputsegmentlast}
}
\state{final}
{
\pgfpathlineto{\pgfpointdecoratedpathlast}
}
}
\begin{tikzpicture}
\draw [fill=yellow,decoration={discontinuity,amplitude=1ex},decorate](0,0) -- (3,2) -- (5,1) -- cycle;
\end{tikzpicture}
\end{document}
```

For compass and protractor constructions, one can actually just use the `through`

library, the `calc`

library and the `intersection cs`

. The `turn`

key can help to find relative polar coordinates.

The `through`

library only provides one key which has to be used with a `node`

: `circle through`

.

It creates a node of the shape circle that has its center at the `at`

part of the node and goes through the point given to the key. I am using the point `(right:1)`

which is the compass-direction version of `(0:1)`

(which is the polar version of `(1, 0)`

).

This allows me to create a circle with dimensions that scales with the `scale`

value without using `transform shape`

or calculating stuff beforehand (which basically is handled by the `through`

library). For different `x scale`

and `y scale`

or other transformations (setting the `x`

and/or `y`

vector for example) will most likely fail anyway, and you will need to use a `circle`

/`ellipse`

path operator. However, the `intersection cs`

can only work with `circle`

nodes and lines (or two lines or two circular nodes). *It really is something for compass and protractors.*

If the circle’s center (as in our example) does not lie on the origin, you will need to use `circle through={([shift={(<center>)}]0:<radius>)}`

.

The naming of the node `ci`

is needed for

- the use with
`intersection cs`

as it needs the name of a (circular) node and
- the use of its anchor-border where one can use arbitrary angles.

If you don’t use a circular node, instead of `(ci.<angle>)`

, you would use `(<angle>:<radius>)`

or `([shift={(<center>)}]<angle>:<radius>)`

.

The points can then be found with:

```
\usetikzlibrary{through, calc} % preamble
\begin{tikzpicture}[scale=2]
\coordinate (O) at (0,0);
\node[draw] (ci) at (O) [circle through=(right:1)] {};
\coordinate [label=above left:$A$] (A) at (ci.105);
\coordinate [label=below left:$B$] (B) at (ci.225);
\path (A) -- (B) -- ([turn]-15:-1) coordinate (B')
(B) -- (A) -- ([turn]30:-1) coordinate (A');
\path (intersection cs: first node=ci, second line={(B)--(B')})
coordinate[label=above:$C$] (C)
(intersection cs: first node=ci, second line={(A)--(A')})
coordinate[label=below right:$D$] (D);
\draw (A) -- (B) -- (C) -- (D) -- cycle [line join=bevel];
\end{tikzpicture}
```

Unfortunately, this is not very accurate when it comes to circles:

The `intersections`

library can find intersections between arbitrary paths, not only circles and straight lines. However, a little more work is needed, as path need to be named and the used paths actually need to intersect.

```
\usetikzlibrary{through, intersections} % preamble
\begin{tikzpicture}[scale=2]
\coordinate (O) at (0,0);
\node[draw, name path=ci] (ci) at (O) [circle through=(right:1)] {};
% or \draw [name path=ci] (O) circle[radius=1];
\coordinate [label=above left:$A$] (A) at (ci.105);
\coordinate [label=below left:$B$] (B) at (ci.225);
\path[overlay] (A) -- (B) -- ([turn]-15:-3) coordinate (B');
\path[overlay] (B) -- (A) -- ([turn]30:-3) coordinate (A');
\path[overlay, name path=A] (A) -- (A');
\path[overlay, name path=B] (B) -- (B');
\path[name intersections=
{of=A and ci, by={@,[label=below right:$D$]D}}]; % @ is not used (equals A)
\path[name intersections={of=B and ci, by={[label=above:$C$]C}}];
\draw (A) -- (B) -- (C) -- (D) -- cycle [line join=bevel];
\end{tikzpicture}
```

The solution is more correct:

You can also do the calculations beforehand

and just use TikZ for drawing:

```
\begin{tikzpicture}[scale=2]
\coordinate (O) at (0,0);
\node[draw] (ci) at (O) [circle through=(right:1)] {};
\coordinate [label=above left:$A$] (A) at (ci.105);
\coordinate [label=below left:$B$] (B) at (ci.225);
\coordinate [label= above:$C$] (C) at (ci.225-150);
\coordinate [label=below right:$D$] (D) at (ci.105-180);
\draw (A) -- (B) -- (C) -- (D) -- cycle [line join=bevel];
\end{tikzpicture}
```

## Best Answer

Using

`calc`

library and the operators`let`

and`in`

you can compute the radius, initial angle and final angle for the`arc`

from the three points you have (center and two circle points), and use then the computed numbers as part of the path. The following MWE shows how:If you have v2.10 of pgf/tikz, you can calculate the initial and final angles using

`atan2(x,y)`

instead of the above expression, (thanks to qrrbrbirlbel for suggesting it), i.e: