9

With the sample MWE below, TikZ generates the following diagram:

1. Drawing an arc

\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
  \coordinate[label=below:$a$] (a) at (0,0);

  \draw (a) arc(0:180:2);
\end{tikzpicture}
\end{document} 

enter image description here

2. Drawing a circle

\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
  \coordinate[label=below:$a$] (a) at (0,0);
  \coordinate[label=below:$b$] (b) at (5,5);

  \draw (a) arc(0:180:2);
  \draw (b) circle [radius=2cm];
\end{tikzpicture}
\end{document} 

enter image description here

With \draw <coordinate> circle command, TikZ draws a circle, with the <coordinate> at its center.

With \draw <coordinate> arc command, TikZ draws an arc, with the <coordinate> as one of its endpoints.

I wish to understand, why this difference of behavior and how is TikZ drawing the arc with \draw (a) arc(0:180:2);.

Why does TikZ does not use (a) as its center point while drawing an arc similar to drawing a circle.

How does TikZ actually draw the arc with point a.

What is the reference and center point, when TikZ draws an arc.

subham soni
  • 9,673
  • May I draw your attention to this question? IMHO the question "Why does TikZ does not use (a) as its center point while drawing an arc similar to drawing a circle?" is not really answerable, and there are more than enough answers that show you how you can get whatever behavior you want. –  Apr 21 '19 at 04:26
  • @marmot that doesn't actually answer the question. I want to understand the mathematical geometry behind the example given – subham soni Apr 21 '19 at 04:29
  • 1
    The mathematical geometry of an arc and a circle? Judging from the question you seem to understand it very well. (Internally TikZ approximates them with Bezier curves, if that's your question.) –  Apr 21 '19 at 04:33
  • 1
    What is the geometry here? It is just simply the beginning angle and the ending angle. –  Apr 21 '19 at 04:40
  • @marmot - When we draw an arc on a paper, we need a compass, a center point and radius. That is one of the ways (mathematically) to draw an arc. In that case, center and reference points are the same. I am trying to map that logic in TikZ (in my last question). – subham soni Apr 21 '19 at 04:42
  • 1
    The logic is very simple: consider \draw (x,y) arc(alpha:beta:r); Now draw a circle of radius r such that (x,y) is at the position specified by the angle alpha, Now TikZ draws an arc from that point to the point with angle beta along that circle. –  Apr 21 '19 at 04:46
  • @marmot I just had a look at tikz.code.tex, in the arc part. It told me that (The syntax with parentheses is deprecated.). Ohh I have been wrong for so long –  Apr 21 '19 at 04:49
  • @JouleV Yes, but there is a difference between really deprecated and "if you do this, do not blame the developers of TikZ for possible side-effects". AFAIK you will only see real problems if you use more complicated coordinate systems. –  Apr 21 '19 at 04:55
  • 1
    @marmot Yes, but I have to "update" myself right now –  Apr 21 '19 at 04:56
  • @marmot - Can you please detail the comment as an answer. – subham soni Apr 21 '19 at 04:59
  • @subhamsoni Go to pgfcorepathconstruct.code.tex, line 363. You can see a comment about a Bezier curve inside an arc construct command. That may answer your question –  Apr 21 '19 at 05:14

3 Answers3

17

Here is an attempt to use an animation to explain step by step what's going on. I use the non-deprecated syntax, as suggested by Joule V.

\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{overlay-beamer-styles}
\begin{document}
\begin{frame}[t]
\frametitle{The arc construction}
\textbackslash\texttt{draw (P) arc[start angle=$\alpha$,end 
angle=$\beta$,radius=$r$];}

\centering
\begin{tikzpicture}
 \node[circle,fill,inner sep=1pt,label=right:{$P=(x,y)$}] (P){};
 \draw[dashed,visible on=<2-3>] (P) ++ (210:2) coordinate (O) circle[radius=2cm];
 \draw[visible on=<2>] (O) + (1,0) arc[start angle=00,end angle=30,radius=1cm] 
 node[midway,right] {$\alpha$};
 \draw[visible on=<2>] (P) -- (O) -- ++(2,0) node[midway,below]{$r$};
 \draw[visible on=<3-4>,thick] (P) arc[start angle=30,end angle=135,radius=2cm]
 coordinate (Q);
 \draw[visible on=<3>] (O) + (1,0) arc[start angle=00,end angle=135,radius=1cm] 
 node[midway,below] {$\beta$} (Q) -- (O) -- ++(2,0) ;
 \path (O) -- ++ (0,2.5); % only for the bounding box
\end{tikzpicture}
\begin{itemize}
 \item<+-> Consider a point $P=(x,y)$.
 \item<+-> Imagine now a circle of radius $r$ for which $P$ sits at the angle
 $\alpha$.
 \item<+-> The arc runs along this circle between the angles $\alpha$ and
 $\beta$.
\end{itemize}
\end{frame}
\end{document}

enter image description here

7

Short answer: arc has nothing to do with circle. circle is drawn with four curves, arc is drawn with one curve, that is all.

Let's start with tikz.code.tex. In lines 3673–3706, there is the definition of \tikz@do@arc, based on \pgfpatharc, which is defined in pgfcorepathconstruct.code.tex. Circles and ellipses are defined in the same way.

In pgfcorepathconstruct.code.tex, \pgfpatharc is defined as a curve with a starting point and an ending point, based on \pgf@nlt@curveto (line 401).

Meanwhile, you can see that any kind of curves, even circles, are defined based on \pgf@nlt@curveto. Circles and ellipses is defined in \pgfpathellipse as a set of four connected curves: line 926, line 947, line 968, and line 989 — each of these curves has its own \pgf@nlt@curveto.

That is why the arc does not take its coordinate as the center, but a starting point.

2

A PSTricks solution just for fun.

In PSTricks, drawing circular arcs as well as elliptical arcs is very intuitive as follows.

\documentclass[pstricks,border=12pt,12pt]{standalone}
\begin{document}
\begin{pspicture}[dimen=m](4,4)
    \pscircle[linestyle=dashed](2,2){2}
    \psellipse[linestyle=dashed](2,2)(2,1)
    \psarc[linecolor=red](2,2){2}{45}{90}
    \psellipticarc[linecolor=red,correctAngle=true](2,2)(2,1){45}{90}
\end{pspicture}
\end{document}

enter image description here

Display Name
  • 46,933