サイクロイドの描画(20160123jssac)

［[日本数式処理学会合同分科会発表準備](http://qiita.com/ryutaatkagawanct/private/7ea3b75e42e43a8e6a04)に戻る。］

サイクロイド $x=t-\sin(t)$，$y=1-\cos(t)$を描いてみる。

- tikzpicture環境内で計算をさせたいものは`{}`でくくる。
- Ti<i>k</i>Z（というよりPGF）で実装されている三角関数`sin(\t)`の引数`\t`は度数法。
<br>
弧度法にしたい場合は`sin(\t r)`のように`r`をつける。

```latex:cycloid.tex
\documentclass[dvipdfmx]{jsarticle}
\usepackage{tikz}
\usetikzlibrary{calc}


\begin{document}

\begin{tikzpicture}
\draw plot[variable=\t] ({\t-sin(\t r)},{1-cos(\t r)});
\end{tikzpicture}

\end{document}
```

変数 $t$ の変域を $0 \leqq t \leqq 2\pi$ にしよう。座標軸を描こう。

- 曲線がガタガタしているように見える。サンプル点を線分でつなぐのが基本であるため。
<br>滑らかにつなぐには，オプション `smooth` を指定。

```latex:cycloid.tex
\documentclass[dvipdfmx]{jsarticle}
\usepackage{tikz}
\usetikzlibrary{calc}


\begin{document}

\begin{tikzpicture}
% 座標軸
\draw[->] (-1,0) -- (7,0) node[below] {$x$};
\draw[->] (0,-1) -- (0,3) node[left]  {$y$};
\draw (0,0) node[below left] {$\mathrm{O}$} coordinate (O);
% 曲線の媒介変数表示
\draw plot[domain=0:{2*pi}, variable=\t, smooth] ({\t-sin(\t r)},{1-cos(\t r)});
\end{tikzpicture}

\end{document}
```

$t=\dfrac13 \pi$，$\dfrac23 \pi$，$\ldots$，$2 \pi$ に対応する点を明示する。

```latex:cycloid.tex
\documentclass[dvipdfmx]{jsarticle}
\usepackage{tikz}
\usetikzlibrary{calc}


\begin{document}

\begin{tikzpicture}
% 座標軸
\draw[->] (-1,0) -- (7,0) node[below] {$x$};
\draw[->] (0,-1) -- (0,3) node[left]  {$y$};
\draw (0,0) node[below left] {$\mathrm{O}$} coordinate (O);
% 曲線の媒介変数表示
\draw plot[domain=0:{2*pi}, variable=\t, smooth] ({\t-sin(\t r)},{1-cos(\t r)});
% 曲線上に点を打つ
\draw ({0/3*pi-sin(0/3*pi r)},{1-cos(0/3*pi r)}) node {$\bullet$};
\draw ({1/3*pi-sin(1/3*pi r)},{1-cos(1/3*pi r)}) node {$\bullet$};
\draw ({2/3*pi-sin(2/3*pi r)},{1-cos(2/3*pi r)}) node {$\bullet$};
\draw ({3/3*pi-sin(3/3*pi r)},{1-cos(3/3*pi r)}) node {$\bullet$};
\draw ({4/3*pi-sin(4/3*pi r)},{1-cos(4/3*pi r)}) node {$\bullet$};
\draw ({5/3*pi-sin(5/3*pi r)},{1-cos(5/3*pi r)}) node {$\bullet$};
\draw ({6/3*pi-sin(6/3*pi r)},{1-cos(6/3*pi r)}) node {$\bullet$};
\end{tikzpicture}

\end{document}
```

繰り返しについては，`foreach` コマンドを使って次のように描ける。

- 変域の指定は，`{0,1,3,6}` のように指定する。
- `{0,1,2,3,4,5,6}` の代わりに `{0,...,6}` とすることが可。
<br>途中はTi<i>k</i>Z（正確には pgffor パッケージ）が補ってくれる。

```latex:cycloid.tex
\documentclass[dvipdfmx]{jsarticle}
\usepackage{tikz}
\usetikzlibrary{calc}


\begin{document}

\begin{tikzpicture}
% 座標軸
\draw[->] (-1,0) -- (7,0) node[below] {$x$};
\draw[->] (0,-1) -- (0,3) node[left]  {$y$};
\draw (0,0) node[below left] {$\mathrm{O}$} coordinate (O);
% 曲線の媒介変数表示
\draw plot[domain=0:{2*pi}, variable=\t, smooth] ({\t-sin(\t r)},{1-cos(\t r)});
% 曲線上に点を打つ
\foreach \i in {0,...,6}
  \draw ({\i/3*pi-sin(\i/3*pi r)},{1-cos(\i/3*pi r)}) node {$\bullet$};
\end{tikzpicture}

\end{document}
```

同じ関数を何度も書くのは面倒だし，修正をするとき大変。予め定義しておくことができないか？

```latex:cycloid.tex
\documentclass[dvipdfmx]{jsarticle}
\usepackage{tikz}
\usetikzlibrary{calc}


\begin{document}

\begin{tikzpicture}[
  declare function={
    myx(\t) = \t - sin(\t r);
    myy(\t) =  1 - cos(\t r);
  }
]
% 座標軸
\draw[->] (-1,0) -- (7,0) node[below] {$x$};
\draw[->] (0,-1) -- (0,3) node[left] {$y$};
\draw (0,0) node[below left] {$\mathrm{O}$} coordinate (O);
% 曲線の媒介変数表示
\draw plot[domain=0:{2*pi}, variable=\t, smooth] ({myx(\t)},{myy(\t)});
% 曲線上に点を打つ
\foreach \i in {0,...,6}
  \draw ({myx(\i/3*pi)},{myy(\i/3*pi)}) node {$\bullet$};
\end{tikzpicture}

\end{document}
```

$t = \dfrac23 \pi$ に対応する点から座標軸に垂線を下ろしてみよう。

- `(P2 |- O)` は点`P2`を通る縦線と点`O`を通る横線との交点。
- `(P2 -| O)` は点`P2`を通る横線と点`O`を通る縦線との交点。

```latex:cycloid.tex
\documentclass[dvipdfmx]{jsarticle}
\usepackage{tikz}
\usetikzlibrary{calc}


\begin{document}

\begin{tikzpicture}[
  declare function={
    myx(\t) = \t - sin(\t r);
    myy(\t) =  1 - cos(\t r);
  }
]
% 座標軸
\draw[->] (-1,0) -- (7,0) node[below] {$x$};
\draw[->] (0,-1) -- (0,3) node[left]  {$y$};
\draw (0,0) node[below left] {$\mathrm{O}$} coordinate (O);
% 曲線の媒介変数表示
\draw plot[domain=0:{2*pi}, variable=\t, smooth] ({myx(\t)},{myy(\t)});
% 曲線上に点を打つ
\foreach \i in {0,...,6} {
  \draw ({myx(\i/3*pi)},{myy(\i/3*pi)}) node {$\bullet$} coordinate (P\i);
}
% 座標軸に垂線を下ろす
\draw[dotted] (P2) -- (P2 |- O) node[below] {$x(t)$};
\draw[dotted] (P2) -- (P2 -| O) node[left] {$y(t)$};
\end{tikzpicture}

\end{document}
```

［[日本数式処理学会合同分科会発表準備](http://qiita.com/ryutaatkagawanct/private/7ea3b75e42e43a8e6a04)に戻る。］