[日本数式処理学会合同分科会発表準備に戻る。]
サイクロイド $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}
[日本数式処理学会合同分科会発表準備に戻る。]