LoginSignup
2
1

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-03-31

日本数式処理学会合同分科会発表準備に戻る。]

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

  • tikzpicture環境内で計算をさせたいものは{}でくくる。
  • TikZ(というよりPGF)で実装されている三角関数sin(\t)の引数\tは度数法。
    弧度法にしたい場合はsin(\t r)のようにrをつける。
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$ にしよう。座標軸を描こう。

  • 曲線がガタガタしているように見える。サンプル点を線分でつなぐのが基本であるため。
    滑らかにつなぐには,オプション smooth を指定。
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$ に対応する点を明示する。

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} とすることが可。
    途中はTikZ(正確には pgffor パッケージ)が補ってくれる。
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}

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

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を通る縦線との交点。
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}

日本数式処理学会合同分科会発表準備に戻る。]

2
1
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1