Flatten an arc while keeping length fixed

I propose two constructions (answers):

  1. flattening the annulus enter image description here

  2. flattening and stretching the annulus. enter image description here

Assume that the annulus is a family of concentric circles spread between the interior and exterior frontier circles. Each circle of this family is transformed during the flattening process and eventually becomes a segment. In the first construction, the length of these curves is constant throughout the process. In particular, the region of the plane that represents the deformed annulus has constant area. In the second construction, these curves have increasing length, but the one corresponding to the exterior circle.

Before giving the code some explanations. We consider an annulus with S and N two diametrically opposed points on the exterior circle C. We denote by T_S the tangent line to C at S. We cut the annulus along the ray passing through N and want to flatten it such that, at the end, the curve corresponding to the exterior circle becomes a segment contained in the tangent line T_S with S its midpoint.

enter image description here

I'll briefly explain the first construction which appears, for example, in Cavalieri's work on the method of indivisibles; see https://fr.wikipedia.org/wiki/M%C3%A9thode_des_indivisibles#:~:text=spirale%20d'Archim%C3%A8de.-,Aire%20du%20disque,varie%20de%200%20%C3%A0%20R. It is based on the following idea: to flatten the exterior circle let's say, we imagine it as being a wire with its end points at N, wound around a disk which is tangent to T_S. If the disk's radius increases but the disk remains tangent to T_S, the evolution of the wire gives the desired flattening process of the circle.

enter image description here

The construction is build around this limiting process; there is a set of circles C_k with increasing radii that describe the flattening process of the exterior circle (see the figure above). The interior circle is forced to follow the exterior one in the sens that its flattening process is defined by circles that are concentric to the corresponding C_k circles and remain tangent to the fixed point S'.

To finish the construction, we compute the angles defining all these arcs for each value of k (done through the variable \q in the code bellow).

The code for the first construction

\documentclass[margin=10pt]{standalone}
\usepackage[rgb]{xcolor}
\usepackage{tikz}
\usetikzlibrary{math, calc}
\xdefinecolor{O}{RGB}{255, 102, 17}
\xdefinecolor{R}{RGB}{238, 34, 34}
\xdefinecolor{B}{RGB}{17, 87, 221}

\begin{document}
\tikzmath{%
  real \r, \R, \h, \q;
  \r = 1.5;
  \R = 2.75;
  \h = \R-\r;
}
\begin{tikzpicture}[every node/.style={scale=0.8}, rotate=-90]
  \path[clip] (-\R-2, -10) rectangle (\R+1, 10);
  \path
  (\R, 0) coordinate (S)
  (-\R, 0) coordinate (N);

  \draw[B, fill=B!30, fill opacity=.5, even odd rule]
  (0, 0) circle (\r)
  (0, 0) circle (\R);

  % \foreach \k [evaluate=\k as \q using \r/(\k*\R-\h)]
  % in {1.03, 1.1, 1.2, 1.32, 1.5, 1.7, 2, 2.4, 3, 3.8, 5.1, 8, 17}{%
  \foreach \k [evaluate=\k as \q using \r/(\k*\R-\h)]
  in {1.03, 1.2, 1.5, 2, 3, 5, 8, 17}{%
    \path
    ($({(1-\k)*\R}, 0) + (-{180*\q}: {\k*\R-\h})$) coordinate (A)
    ($({(1-\k)*\R}, 0) + ({180*\q}: {\k*\R-\h})$) coordinate (B)
    ($({(1-\k)*\R}, 0) + ({180/\k}: {\k*\R})$) coordinate (C)
    ($({(1-\k)*\R}, 0) + (-{180/\k}: {\k*\R})$) coordinate (D);    
    \draw[B, fill=B!30, fill opacity=.5]
    (D) -- (A) arc ({-180*\q}: {180*\q}: {\k*\R-\h}) -- 
    (B) -- (C) arc ({180/\k}: {-180/\k}: {\k*\R}) -- cycle;
  }
  \draw[B, fill=B!30, fill opacity=.5] (\r, -{3.142*\r}) -- (\r, {3.142*\r})
  -- (\R, {3.142*\R}) -- (\R, -{3.142*\R}) -- cycle;
\end{tikzpicture}

In the code for the second construction, the lines corresponding to the \foreach command and the last two ones are replaced by what follows.

  \foreach \k in {1.03, 1.2, 1.5, 2, 3, 5, 8, 17}{%
    \path
    ($({(1-\k)*\R}, 0) + (-{180/\k}: {\k*\R-\h})$) coordinate (A)
    ($({(1-\k)*\R}, 0) + ({180/\k}: {\k*\R-\h})$) coordinate (B)
    ($({(1-\k)*\R}, 0) + ({180/\k}: {\k*\R})$) coordinate (C)
    ($({(1-\k)*\R}, 0) + (-{180/\k}: {\k*\R})$) coordinate (D);    
    \draw[B, fill=B!30, fill opacity=.5]
    (D) -- (A) arc ({-180/\k}: {180/\k}: {\k*\R-\h}) -- 
    (B) -- (C) arc ({180/\k}: {-180/\k}: {\k*\R}) -- cycle;
  }
  \draw[B, fill=B!30, fill opacity=.5]
  (\r, -{3.142*\R}) rectangle (\R, {3.142*\R});

Remark. Since the angles appearing in the command arc are angles measured with respect to the Ox axis (of the TikZ coordinate system), I made all the drawing vertically and then rotated the images.

With not too many changes, we can obtain animations of the two constructions. enter image description here enter image description here

Here is a code yielding the images that compose the first animation, for example.

\documentclass[multi=page, margin=10pt]{standalone}
\usepackage[rgb]{xcolor}
\usepackage{tikz}
\usetikzlibrary{math, calc}
\xdefinecolor{R}{RGB}{238, 34, 34}
\xdefinecolor{B}{RGB}{17, 87, 221}

\begin{document}
\tikzmath{%
  real \r, \R, \h, \q;
  \r = 1.5;
  \R = 2.75;
  \h = \R-\r;
}
\begin{page}
  \begin{tikzpicture}[rotate=-90]
    \path[clip] (-\R-2, -10) rectangle (\R+1, 10);
    \draw[B, fill=B!50, even odd rule]
    (0, 0) circle (\r)
    (0, 0) circle (\R);
  \end{tikzpicture}
\end{page}
  \foreach \k [evaluate=\k as \q using \r/(\k*\R-\h)]
  in {1.03, 1.1, 1.2, 1.32, 1.5, 1.7, 2, 2.4, 3, 3.8, 5.1, 8, 17}{%
  \begin{page}
    \begin{tikzpicture}[rotate=-90]
      \path[clip] (-\R-2, -10) rectangle (\R+1, 10);      
      \path
      ($({(1-\k)*\R}, 0) + (-{180*\q}: {\k*\R-\h})$) coordinate (A)
      ($({(1-\k)*\R}, 0) + ({180*\q}: {\k*\R-\h})$) coordinate (B)
      ($({(1-\k)*\R}, 0) + ({180/\k}: {\k*\R})$) coordinate (C)
      ($({(1-\k)*\R}, 0) + (-{180/\k}: {\k*\R})$) coordinate (D);    
      \draw[B, fill=B!50]
      (D) -- (A) arc ({-180*\q}: {180*\q}: {\k*\R-\h}) -- 
      (B) -- (C) arc ({180/\k}: {-180/\k}: {\k*\R}) -- cycle;
      \draw[R, thick] (A) -- (D)  (B) -- (C);
    \end{tikzpicture}    
  \end{page}
}
\foreach \k in {1, 2, 3, 4}{% the last image lasts longer
  \begin{page}
    \begin{tikzpicture}[rotate=-90]
      \path[clip] (-\R-2, -10) rectangle (\R+1, 10);
      \draw[B, fill=B!50] (\r, -{3.142*\r}) -- (\r, {3.142*\r})
      -- (\R, {3.142*\R}) -- (\R, -{3.142*\R}) -- cycle;
      \draw[R, thick]
      (\r, -{3.142*\r}) -- (\R, -{3.142*\R})
      (\r, {3.142*\r}) -- (\R, {3.142*\R});
    \end{tikzpicture}
  \end{page}
}
\end{document}

Tags:

Tikz Pgf