【LaTeX】【tikz】ループと分岐を組みあわせて描画する例5選
数式を扱えるLaTeXには、線や円などを描けるtikzパッケージがある。
コマンドを使って描画するのだが、似た様な図形を何度も描くことがある。
その様な場合に便利なループや条件分岐を扱うための構文が存在する。
ここではループの中で条件分岐を使った描画の具体例を5つ示す。
今回は次の4つの構文を扱う。
- ifnum
- ifodd
- pgfmathparse
- pgfmathresult
準備
tikzパッケージを使用するためには、プリアンブル(\\begin\{document\}
の前)に次のように記述して、tikzパッケージを使えるようにさせる。
\usepackage{tikz}
ここでエラーが出る場合は、使っている環境にtikzパッケージがインストールされていないので、別途インストールする必要がある。
具体例
ifコマンドのみを使って単純な条件分岐
ifnumコマンドと不等号を使用
数値を比較して条件分岐を実装する構文がifnumコマンドでアル。次のような文法になっている。
\ifnum数値1比較演算子数値2 真の場合に実行する \else 偽の場合に実行する \fi
以下に不等号を使用 した例を示す。
\begin{tikzpicture} \foreach \x/\iro in {0/red,60/orange,120/yellow,180/green,240/blue,300/purple} { \fill [\iro] (\x:2) circle [radius=1] node [text=\ifnum\x<60 white\else\ifnum\x>180white\else black\fi\fi] {\LARGE{hello}}; } \end{tikzpicture}
- 実行結果
角度で文字色を分けた。角度xが$0<x<240$の時は白、それ以外は黒にした。オプションに空白や改行が入るとエラ〜になるため、条件分機の部分を1行で記述している。
使用できる比較演算子は次の3つである。
- 大なり:$>$
- 小なり:$<$
- イコール:$=$
イコールを含んだ不統合は使用出来ない。そのような条件を使いたい場合は、elseを利用する。
ifnumコマンドと等号を使用
上記のように0/red
と数字と文字列の2篇数を1つのループ出使った場合、数字をイコールで比較するとエラーになる場合がある。
その場合は以下のように数字のみ改めてループを作って処理をする。
\begin{tikzpicture} \foreach \x/\iro in {0/red,60/orange,120/yellow,180/green,240/blue,300/purple} { \fill [\iro] (\x:2) circle [radius=1]; } \foreach \x in {0,60,...,300} { \def\iro{\ifnum\x=180black\else\ifnum\x=120black\else\ifnum\x=60black\else white\fi\fi\fi} \node [text=\iro] at (\x:2) {\LARGE{hello}}; } \end{tikzpicture}
- 実行結果
ifoddコマンド
数値が偶数か奇数かを判断する条件分岐コマンドが特別に用意されている。文法は次の通りである。
\ifodd数値 奇数の場合 \else 偶数の場合 \fi
具体例として、斜めからの立方体の見取図を描。
\begin{tikzpicture} \foreach \x in {0,...,6} { \draw [\ifodd\x dashed\fi] (0,0) -- (30+\x*60:2); \draw (30+\x*60:2) -- ({30+(\x+1)*60}:2); } \end{tikzpicture}
- 実行結果
ifコマンドとpgfmathコマンドを使って複雑な条件分岐
数式を使う
条件に数式を使うことでより複雑な条件を作ることができる。
まず次のようなコマンドを使って数式を定義する。
\pgfmathparse{数式}
上記のコマンドの使用後に次のようなコマンドを使うと計算結果を取得できる。
\pgfmathresult
以下に計算式を使った一例を示す。mod関数は剰余を求める計算式である。
\begin{tikzpicture} \foreach \x in {0,...,10} \foreach \y in {0,...,15} { \pgfmathparse{int(mod(\x-\y+16,4))} \foreach \i/\iro in {0/red,1/yellow,2/green,3/blue} { \ifnum\pgfmathresult=\i \fill [\iro] (\x*0.5,\y*0.5) circle (0.1); \fi } } \end{tikzpicture}
- 実行結果
使える関数を以下列挙する。
- 論理演算関数
- and
- or
- not
- 三角関数
- sin
- cos
- tan
- 三角関数の逆関数
- asin
- acos
- atan
- 三角関数の逆数関数
- sec
- cosec
- cot
- ハイパボリック関数
その他の関数
ここで次のような注意事項がある。
論理演算子の引数は0をfalse,1をtrueとして扱う。戻り値は0、1のいずれかとなる
- 三角関数や逆三角関数は度数ではなくラジアンで扱う。tikzパッケージ全体と異なるので注意
- 自然対数はlogではなくlnであり、log関数は存在しない
論理演算式を使う
以下のように論理式を使うと、複雑な条件を作ることができる。
\begin{tikzpicture} \foreach \x in {0,...,10}{ \foreach \y in {0,...,15}{ % x%3=0 & y%5=0 \pgfmathparse{and(equal(mod(\x,3),0), equal(mod(\y,5),0))} \ifnum\pgfmathresult=1 \def\iro{yellow} \fi % x%3=0 & y%5!=0 \pgfmathparse{and(equal(mod(\x,3),0), not(equal(mod(\y,5),0)))} \ifnum\pgfmathresult=1 \def\iro{blue} \fi % x%3!=0 & y%5=0 \pgfmathparse{and(not(equal(mod(\x,3),0)), equal(mod(\y,5),0))} \ifnum\pgfmathresult=1 \def\iro{red} \fi % not( x%3=0 | y%5=0 ) \pgfmathparse{not(or((equal(mod(\x,3),0), equal(mod(\y,5),0)))} \ifnum\pgfmathresult=1 \def\iro{black} \fi \fill [\iro] (\x*0.5,\y*0.5) circle (0.1); } } \end{tikzpicture}
- 実行結果
まとめ
tikzパッケージでのループの中で条件分岐する構文は次の2つである。
ifnum数値1比較演算子数値2
ifodd数値
また、次のような構文で複雑計算をすることができる。
```tex \pgfmathparse{数式} \ifnum\pgfmathresult=数値 コマンド \else コマンド \fi
### 参考リンク [tikz wiki](https://texwiki.texjp.org/?TikZ) [texマクロwiki](https://texwiki.texjp.org/?TeX入門%2Fマクロの作成)
【LaTeX】【tikz入門】ループを使用する方法3選
数式を出力できるLaTeXには線や円、グラフなどの図形を描くことができるtikzパッケージが存在する。
例えば線分を何本も描いたりすると、数値やオプションが違うだけで似たような命令を使うことが多い。
同じようなコマンドが続くとコードが長くなってしまう。そこで、似たような処理を繰り返す場合にループ処理を使って一度にコマンドを記述する方法がある。
ここではループの基本的な使い方について取り上げる。
準備
tikzパッケージを使用するためには、プリアンブル(\\begin\{document\}
の前)に次のように記述して、tikzパッケージを使えるようにさせる。
\usepackage{tikz}
ここでエラーが出る場合は、使っている環境にtikzパッケージがインストールされていないので、別途インストールする必要がある。
具体例
1変数のループ
tikzでループを使用する構文は次の通りである。
\drawまたはfillまたはfilldraw \変数 in {価のリスト}{処理内容};
\\変数
を含む処理内容
を値のリスト
の内容で順番にループして処理をする。
変数の値のリストはカンマ,
で区切る。
例として、左から順に青色が薄くなっていく円の描画をループを使用して記述する。
\begin{tikzpicture} \foreach \x in {0,1,2,3,4,5} { \fill [blue,opacity=1-0.2*\x] (2*\x,0) circle [radius=1]; } \end{tikzpicture}
- 実行結果
上の例で次のように色を混ぜる構文にカッコを使うとエラーになる。
\[red!\\x*2!blue\]
\[red!(\\x*2)!blue\]
\[red!\{\\x*2\}!blue\]
\[red!\{(\\x*2)\}!blue\]
2変数のループ
次のように変数をスラッシュ/
で区切ると、1つのループの中で複数の変数をループできる。
tex
変数x/変数y in {値x1/値y1,値x2/値y2}
例として、色のついた円を描く。
\begin{tikzpicture} \foreach \x/\iro in {0/red,60/orange,120/yellow,180/green,240/blue,300/purple} { \fill [\iro] (\x:2) circle [radius =1]; } \end{tikzpicture}
- 実行結果
上の\\iro
のように、変数の名前は複数のアルファベットでも良い。
変数x
は値x1,値x2
に順に置き換わり、変数y
は値y1,値y2
に順に置き換わる。変数が3つ以上でも同様にスラッシュで変数を区切り、カンマでリストを作る。
スラッシュの数を変数とリストで合わせないとエラーになる。また、スラッシュとカンマの順番を間違えないように注意が必要である。
変数リストを省略
ループで使われる変数の値のリストに規則性がある場合、次のように3つのピリオド...
で記述を省略できる。
\変数 in {値1,値2,...,値n}
例として、八芒星を描く。
\begin{tikzpicture} \foreach \x in {0,45,90,...,315} { \draw (22.5+\x:2) -- (157.5+\x:2); } \end{tikzpicture}
- 実行結果
省略できる表現は以下のとおりである。
- 等差数列
- 順列:
1,...,6
->1,2,3,4,5,6
- 逆列:
6,...,1
->6,5,4,3,2,1
- 等差順列:
0,2,...,10
->0,2,4,6,8,10
- 等差逆列:
10,8,...,0
->10,8,6,4,2,0
- 順列:
- アルファベット列
- 順列:
a,...,f
->a,b,c,d,e,f
- 逆列:
f,...,a
->f,e,d,c,b,a
- 等差順列:
a,d,...,z
->a,d,g,j,m,p,s,v,y
- 等差 逆列:
z,w,...,a
->z,w,t,q,n,k,h,e,b
- 順列:
リストの省略方法は次のようになっている。上の構文
\変数 in {値1,値2,...,値n}
において、値2
から値n
を越えるまで、差分値2-値1
の等比列が作成される。値1
がないい場合は差分1とみなされる。
また、前後の値は無視されるため、等比数列や階差数列は作れない。
- 等比数列は作れない:
2,4,...,32
->2,4,8,12,16,20,24,28,32
- 階差数列は作れない:
1,3,6,...,21
->1,3,6,9,12,15,18,21
変数x
と変数y
がともに数字の場合はリストの作成がうまくいかないことがある。
変数が2つ以上のループではこのような省略が使えない。
次のような記述はエラーとなる。
\x/\y in {0/100,2/80,...,10/0}
まとめ
ループを扱う構文は次の通りである。
- 不規則なリストでループ
\foeach \x in {値1,値2,値3,値4...} { コマンド }
- 等差規則のあるリストでループ
\foeach \x in {値1,値2,...,値n} { コマンド }
- 複数の変数でループ
\foeach 変数x/変数y in {値x1/値y1,値x2/値y2} { コマンド }
- 複数の変数でリストの省略はできない
参考リンク
追記
ウェブ系のLaTeXであるKaTeXなど、一部の環境では\\iftrue
,\\iffalse
構文が使えない。そのため筆者はワードプレスのquicklatex環境を使用している。
【LaTeX】【tikz入門】図形をプロットする方法3選
数式を出力できるLaTeXには線や円などの図形を描くことができるtikzパッケージが存在する。しかし、線や円だけではすべての図形を描くことができない。
そこでtikzパッケージでは、任意の図形をプロットする仕組みが用意されている。
以下では3つの例を取り上げる。
準備
tikzパッケージを使用するためには、プリアンブル(\\begin\{document\}
の前)に次のように記述して、tikzパッケージを使えるようにさせる。
\usepackage{tikz}
ここでエラーが出る場合は、使っている環境にtikzパッケージがインストールされていないので、別途インストールする必要がある。
基本構文
任意の図形をプロットする構文は次の通りである。
\begin{tikzpicture} \コマンド [valiable=\変数名,domain=変域の開始点:変域の終了点,samples=サンプル数,smooth]plot (座標); \end{tikzpicture}
各コマンドやオプションの説明は次のとおりである。
\\コマンド
:draw
またはfillま
たはfilldraw
valiable
:プロットに使用される変数。デフォルトではエックスdomain
:変数のとる値の領域:デフォルトでは−5から5までsamples
:プロットのサンプル数:デフォルトでは25 *smooth
:このオプションをつけるとグラフがなめらかになる
各オプションの記述順序は問わない。
具体例
代数関数のプロット
一例として3次間数$$\cfrac{2}{3}x^{3}-\cfrac{5}{3}x$$を描く。
\begin{tikzpicture} \draw [dotted,thin] (-2,-2) grid (2,2); \draw [->,thick] (-2.2,0) -- (2.2,0) node [right]{x}; \draw [->,thick] (0,-2.2) -- (0,2.2) node [above]{y}; \node [below left] (0,0){O}; \draw [domain=-2:2,smooth] plot (\x,2/3*\x*\x*\x-5/3*\x); \end{tikzpicture}
- 実行結果
超越関数のプロット
三角関数や指数関数、対数関数等の超越関数も描くことができる。座標の中でかっこを使う場合は中かっこで囲む必要がある。
一例として指数関数$$2^{x}$$を描く。
\begin{tikzpicture} \draw [dotted,thin] (-2,0) grid (2,4); \draw [->,thick] (-2.2,0) -- (2.2,0) node [right]{x}; \draw [->,thick] (0,-0.2) -- (0,4.2) node [above]{y}; \node [below left] (0,0){O}; \draw [domain=-2:2,smooth] plot (\x,{exp(ln(2)*\x)}); \end{tikzpicture}
- 実行結果
使える関数を以下列挙する。
- 三角関数
- sin
- cos
- tan
- 三角関数の逆関数
- asin
- acos
- atan
- 三角関数の逆数関数
- sec
- cosec
- cot
- ハイパボリック関数
- その他の関数
対数関数はlogではなくlnであることに注意。
極座標の使用
一例として心臓形を描く。
\begin{tikzpicture} \draw [dotted,thin] (-2,-2) grid (2,2); \draw [->,thick] (-2.2,0) -- (2.2,0) node [right]{x}; \draw [->,thick] (0,-2.2) -- (0,2.2) node [above]{y}; \node [below left] (0,0){O}; \draw [domain=0:360,smooth] plot (\x:{1-sin(\x)}); \end{tikzpicture}
- 実行結果
参考リンク
【LaTeX】【tikz入門】線のスタイルや文字列の挿入を使ってXY平面を描く5ステップ
LaTeXで図形やグラフを描くために使われるtikzパッケージでは、線分に矢印等のスタイルをつけて装飾することができる。
また描いた図形に文字列を挿入することもできる。
ここでは以下の内容を取り上げる。
- 太さを調節する
- 矢印を引く
- 点線を引く
- 文字を挿入する
一例として5ステップで次のようなXY平面を描画する。
準備
tikzパッケージを使用するためには、プリアンブル(\\begin\{document\}
の前)に次のように記述して、tikzパッケージを使えるようにさせる。
\usepackage{tikz}
ここでエラーが出る場合は、使っている環境にtikzパッケージがインストールされていないので、別途インストールする必要がある。
ステップ1: 線分を描く
まずは線分を描く。線分は\\draw
コマンドを使う。ハイフン2つで座標をつなげると線分が描ける。grid
構文で座標をつなげると、方眼が描ける。
線分は次のように描ける。
\begin{tikzpicture} \draw (0,0) -- (4,0); \end{tikzpicture}
- 実行結果
実際にXY座標のもとになる線分を描く。
\begin{tikzpicture} \draw (-2,-2) grid (2,2); \draw (-2.2,0) -- (2.2,0); \draw(0,-2.2) -- (0,2.2); \end{tikzpicture}
- 実行結果
この図形に様々な装飾を施しXY座標を完成させる。
ステップ2:太さを調節する
線分に太さを表すオプションをつけて、太さを調節する。
座標の前に太さを表すオプションをつける。太さの名前を記述する。
線分を太くする。
\begin{tikzpicture} \draw [very thick] (0,0) -- (4,0); \end{tikzpicture}
- 実行結果
太さを表すオプションを付け加える。
\begin{tikzpicture} \draw [thin] (-2,-2) grid (2,2); \draw [thick] (-2.2,0) -- (2.2,0); \draw[thick] (0,-2.2) -- (0,2.2); \end{tikzpicture}
- 実行結果
これで軸と方眼が区別できるようになった。 指定できる太さは細い順に次のとおりである。
- help lines
- ultra thin
- very thin
- thin
- semithick
- thick
- very thick
- ultra thick
ステップ3:矢印を挿入する
X軸Y軸にそれぞれ矢印を挿入する。
矢印を挿入するにはオプションにハイフンと大なり記号を挿入する。
\begin{tikzpicture} \draw [->] (0,0) -- (4,0); \end{tikzpicture}
- 実行結果
先程の図形のXY軸に矢印を書き加えて描く。
\begin{tikzpicture} \draw [thin] (-2,-2) grid (2,2); \draw [->,thick] (-2.2,0) -- (2.2,0); \draw [->,thick] (0,-2.2) -- (0,2.2); \end{tikzpicture}
- 実行結果
矢印の種類は次の3つである。
オプション 矢印の位置 -> 2つのハイフンの後の座標 <- 2つのハイフンの前の座標 <-> 両方
また、大なり記号、小なり希望の数は増やすことができる。
曲線の場合は、後に続く矢印の数が増えると先からずれていってしまうため注意が必要である。
ステップ4:点線を使う
点線や波線も同様にオプションを追加する。
\begin{tikzpicture} \draw [dotted] (0,0) -- (4,0); \end{tikzpicture}
- 実行結果
方眼を点線にする。
\begin{tikzpicture} \draw [dotted,thin] (-2,-2) grid (2,2); \draw [->,thick] (-2.2,0) -- (2.2,0); \draw [->,thick] (0,-2.2) -- (0,2.2); \end{tikzpicture}
- 実行結果
点線、波線の代表的なものを4つ取り上げる。
名前 | 種類 |
---|---|
dashed | 波線 |
dotted | 点線 |
dash dot | 波線と点線 |
dash dot dot | 波線と点線2つ |
ステップ5:文字を描く
点や線分を描いた後に、node
構文を置くことで、文字や数式を埋め込むことができる。
node
構文は次のようになる。
node [方向] at (座標) {文字列}
\begin{tikzpicture} \draw (0,0) -- (4,0) node [right]{text}; \end{tikzpicture}
- 実行結果
文字を挿入してXY座標を完成させる。
\begin{tikzpicture} \draw [dotted,thin] (-2,-2) grid (2,2); \draw [->,thick] (-2.2,0) -- (2.2,0) node [right]{x}; \draw [->,thick] (0,-2.2) -- (0,2.2) node [above]{y}; \node [below left] (0,0){O}; \end{tikzpicture}
- 実行結果
文字列はオプションを指定しないと指定した座標が文字の中心になる。位置を決めるオプションは次のとおりである。
例えばのように、斜めの位置を指定する場合は、順番を間違えるとエラーになるので注意。
オプション | 位置 |
---|---|
above | 上 |
below | 下 |
left | 左 |
right | 右 |
above left | 左上 |
above right | 右上 |
below left | 左下 |
below right | 右下 |
まとめ
XY座標が完成した。今回使った構文は次の3つである。
- 太さを調節する:名前をオプションに追加する
- 矢印を引く
->
を追加する - 点線を引く:この名前をオプションに追加する
- 文字を挿入する:
node
構文を使う
参考リンク
【LaTeX】【tikz入門】calcライブラリの構文4選
数式を扱うLaTeXにある描画を行うtikzパッケージ。その中にはcalcライブラリというものがある。
これはtikzが独自に持つライブラリで、座標の四則演算や交点の算出などが出来るようになる。
代表的な構文を4つ紹介する。
準備
tikzパッケージおよびcalcライブラリを使用するためには、プリアンブル(\\begin\{document\}
の前)に次のように記述して、tikzパッケージを使えるようにさせる。
\usepackage{tikz} \usetikzlibrary{calc}
ここでエラーが出る場合は、使っている環境にtikzパッケージがインストールされていないので、別途インストールする必要がある。
具体例
座標の四則演算
座標をドル記号\$で囲むことで座標の足し算とスカラー倍ができる。
計算の構文は次のようになる。
($スカラー1*(座標1)+スカラー2*(座標2)+...+スカラーn*(座標n)$)
\\coordinate
コマンドを使うことで、座標に名前をつけることができる。これはcalcライブラリがなくても使える。
\\coordinate
コマンドの構文は次のようになる。
\coordinate (名前) at (座標);
また点を描いたり座標定義したりした後に、node
構文を置くことで、文字や数式を埋め込むことができる。
node
構文は次のようになる。
node [方向] at (座標) {文字列}
\begin{tikzpicture} \coordinate (a) at (1,0); \coordinate (b) at (1,1); \draw (0,0) grid (3,1); \fill (0,0) circle [radius=0.1] node [below left] {O}; \fill [red] (a) circle [radius=0.1] node [below left] {a}; \fill [blue] (b) circle [radius=0.1] node [below left] {b}; \fill [purple] ($(a)+(b)$) circle [radius=0.1] node [below left] {a+b}; \fill [magenta] ($2*(a)$) circle [radius=0.1] node [below left] {2a}; \fill [violet] ($2*(a)+(b)$) circle [radius=0.1] node [below left] {2a+b}; \end{tikzpicture}
- 実行結果
内分、外分
座標1と座標2をt:1-tに内分する点は次のように求められる。t=0で座標1と一致し、 t=1で座標2と一致する。tが0と1の間だと内分点になり、それ以外だと外分点になる。
($(座標1)!t!(座標2)$)
\begin{tikzpicture} \coordinate (a) at (0,0); \coordinate (b) at (4,0); \draw (-2,0) -- (6,0); \fill ($(a)!-0.5!(b)$) circle [radius=0.1] node [below] {t=-0.5}; \fill ($(a)!0!(b)$) circle [radius=0.1] node [below] {t=0}; \fill ($(a)!0.5!(b)$) circle [radius=0.1] node [below] {t=0.5}; \fill ($(a)!1!(b)$) circle [radius=0.1] node [below] {t=1}; \fill ($(a)!1.5!(b)$) circle [radius=0.1] node [below] {t=1.5}; \end{tikzpicture}
- 実行結果
回転させてから 内分、外分
座標1を中心にa度回転させてから座標1と座標2をt:1-tに内分、外分する構文もある。
($(座標1)!t!a:(座標2)$)
\begin{tikzpicture} \coordinate (a) at (0,0); \coordinate (b) at (4,0); \draw (-2,0) -- (6,0); \fill ($(a)!-0.5!30:(b)$) circle [radius=0.1] node [below] {t=-0.5}; \fill ($(a)!0!30:(b)$) circle [radius=0.1] node [below] {t=0}; \fill ($(a)!0.5!30:(b)$) circle [radius=0.1] node [below] {t=0.5}; \fill ($(a)!1!30:(b)$) circle [radius=0.1] node [below] {t=1}; \fill ($(a)!1.5!30:(b)$) circle [radius=0.1] node [below] {t=1.5}; \end{tikzpicture}
- 実行結果
垂線を下ろした足
座標2から、座標1と座標3を結んだ線分へ垂線を下ろしたときの足の座標を求めることができる。
($(座標1)!(座標2)!(座標3)$)
緑色の点から赤い点と青い点を結んだ線分に下ろした垂線の足に黒い点を描く。
\begin{tikzpicture} \draw (0,0) grid (3,1); \fill [green] (1,1) circle [radius=0.1]; \fill [red] (0,0) circle [radius=0.1]; \fill [blue] (3,0) circle [radius=0.1]; \fill ($(0,0)!(1,1)!(3,0)$) circle [radius=0.1]; \end{tikzpicture}
- 実行結果
まとめ
calcライブラリでできることをまとめると次のようになる。
- 座標の四則演算
- 座標の内分、外分(回転含む)
- 点から直線に垂線を下ろした足の座標を求める
参考リンク
【LaTeX】【tikz入門】座標を計算する方法3選
数式を出力するLaTeXでグラフや図形を使うことができるtikzパッケージでは、座標を指定して図形を描く。
きれいな図形を描くためには、適切な座標の位置を指定する必要がある。
しかし、適切な位置をユーザが計算するのはとても大変である。
そこでtikzパッケージではある程度の計算を自動で行ってくれる構文がいくつか用意されている。
以下では標準で使えるもの3つを取り上げる。
準備
tikzパッケージを使用するためには、プリアンブル(\\begin\{document\}
の前)に次のように記述して、tikzパッケージを使えるようにさせる。
\usepackage{tikz}
ここでエラーが出る場合は、使っている環境にtikzパッケージがインストールされていないので、別途インストールする必要がある。
具体例
座標の相対参照
座標を指定するときに、2つのハイフン(-)の後に続けて2つのプラス(+)をおくと相対参照となる。
\begin{tikzpicture} \draw [red] (1,1) -- ++(1,0); \draw [blue] (1,0) -- ++(1,1); \end{tikzpicture}
- 実行結果
水平、垂直な線の交点
2つの点から水平、垂直な線をひいたときの交点を求めることができる。線を引く構文と似ているので注意。
((座標1) \|- (座標2))
座標1を通る垂直線と、座標2を通る水平線の交点((座標1) -\| (座標2))
座標1を通る水平線と、座標2を通る垂直線の交点
赤い点を通る垂直線と青い点を通る水平線の交点を紫色にする。
座標の前に大かっこ[]を付けて色名を入れることで色を付けることができる。
\begin{tikzpicture} \draw (2,0) |- (0,1); \fill [red] (2,0) circle [radius=0.1]; \fill [blue] (0,1) circle [radius=0.1]; \fill [purple] (2,0) |- (0,1) circle [radius=0.1]; \end{tikzpicture}
- 実行結果
赤い点を通る水平線と青い点を通る垂直線の交点を紫色にする。
\begin{tikzpicture} \draw (2,0) |- (0,1); \fill [red] (2,0) circle [radius=0.1]; \fill [blue] (0,1) circle [radius=0.1]; \fill [purple] (2,0) -| (0,1) circle [radius=0.1]; \end{tikzpicture}
- 実行結果
中心からのベクトルの絶対値
‘veclen(x座標,y座標)`とするとその座標のベクトルの絶対値が取得できる。
これを利用して半径$$\sqrt{2{$$の円を描く。
\begin{tikzpicture} \draw (-2,-2) grid (2,2); \draw (0,0) circle [radius={veclen(1,1)}]; \end{tikzpicture}
- 実行結果
まとめ
tikzパッケージで使える座標計算する構文は次のとおりである。
- 相対参照は2つのハイフン(-)の後に続けて2つのプラス(+)をおく。
- 2つのハイフン(-)の代わりに ハイフン(-)と縦棒(|)または縦棒(|)とハイフン(-)使うことで2つの点を水平線と垂直線で結んだ点の座標を求められる。
veclec
関数でベクトルの絶対値が求められる。
参考リンク
【LaTeX】【tikz入門】曲線を8種類描く
数式を扱うLaTeXではtikzパッケージで図形描画を行うことができる。
円や放物線、サインカーブなど、一般的に使われる曲線は、グラフやプロットなどを使わなくても描けるように構文があらかじめ用意されている。
そのような便利な構文を8つピックアップする。
準備
tikzパッケージを使用するためには、プリアンブル(\\begin\{document\}
の前)に次のように記述して、tikzパッケージを使えるようにさせる。
\usepackage{tikz}
ここでエラーが出る場合は、使っている環境にtikzパッケージがインストールされていないので、別途インストールする必要がある。
基本構文
\begin{tikzpicture} \命令 [オプション] (座標) 構文; \end{tikzpicture}
\\命令
は以下3つのどれかを使って図形を描く-
\\draw
線で描く -
\\fill
塗りつぶす -
\\filldraw
塗りつぶした上で縁を別の色で描く-
\\filldraw
にオプションで\[fill=色,draw= 色\]
のように指定する
-
-
- 座標について
- 座標は直行座標(x,y)または極座標(t:r)使える
- 座標やオプションの値など共通して、長さの単位はセンチメートル、角度の単位は度数を使う
- x軸は右が正で、y軸は上が正。右方向が角度の0度で、左回りが正。
具体例
任意の曲線
曲線は2つの座標をto
でつなげ、オプションでそれぞれ角度を指定する。out
は始点から出る線の角度で、in
は終点から入る線の角度。それぞれ単位は度数。
\begin{tikzpicture} \draw (0,0) to [out=-30,in=-150] (2,0); \end{tikzpicture}
- 実行結果
円
円は指定した座標を中心点として、オプションで指定された半径で描かれる。座標の後にcircle [radius=半径]
と記述する。
\\fill
コマンドは座標の手前にオプションをつけることで色を指定できる。
\begin{tikzpicture} \fill [red] (0,0) circle [radius=2]; \end{tikzpicture}
- 実行結果
楕円
円の構文のオプションを拡張して楕円が描ける。オプションはそれぞれ、x radius
はx方向の半径、y radius
はy方向の半径、rotate
は回転角度で、度数で指定する。角度を省略すると0度とみなされる。
\begin{tikzpicture} \fill [red] (0,0) circle [x radius=1,y radius=2,rotate=30]; \end{tikzpicture}
- 実行結果
円弧
円弧の構文は次のようなものである。
(座標) arc (開始角度:終了角度:半径)
ここで(座標)は中心の座標ではなく、円弧を開始する座標である。
\begin{tikzpicture} \filldraw [fill=blue,draw=red] (0,2) arc (90:30:2) -- cycle; \end{tikzpicture}
- 実行結果
扇形
円弧に中心点となる座標を適切につなげると扇形ができる。
\begin{tikzpicture} \filldraw [fill=blue, draw=red] (0,2) arc (90:30:2) -- (0,0) -- cycle; \end{tikzpicture}
- 実行結果
放物線
放物線の構文は次のようなものである。
(始点) parabola bend (頂点) (終点)
始点から頂点へ放物線を描き、頂点から終点へ放物線を描くため、うまく放物線をつなげるためには適切な座標を指定する必要がある。
\begin{tikzpicture} \draw (-1,1) parabola bend (0,0) (1,1); \end{tikzpicture}
- 実行結果
サインカーブ
サインカーブは座標をそれぞれsin
,cos
でつなげる。それぞれ$$0\sim\pi/4$$分のカーブを描くため、うまくつなげるためにはそれぞれの構文を適切に使う必要がある。
\begin{tikzpicture} \draw (0,0) sin (1,1) cos (2,0) sin (3,-1) cos (4,0); \end{tikzpicture}
- 実行結果
3次ベジェ曲線
ベジェ曲線の構文は次のようなものである。
(始点) .. controls (方向点1) and (方向点2) .. (終点)
方向点2を省略すると、 方向点1ではなく終点とみなされるので注意。
\begin{tikzpicture} \draw (-2,0) .. controls (-1,-1) and (1,1) .. (2,0); \end{tikzpicture}
- 実行結果
まとめ
以上をまとめると、直線を描く構文は次のようになる。
\begin{tikzpicture} \構文(draw又はfill) [オプション] (直交座標x,y又は極座標t:r) 構文; \end{tikzpicture}
- 任意の曲線は
to
で、オプションはout
,in
- 円や楕円は
circle
で、オプションはx radius
,y radius
,(rotate
) - 円弧や扇形は
arc
で、引数は「開始角度」、「終了角度」、「半径」 - 放物線は
parabola bend
で座標に注意 - サインカーブは
sin
,cos
で座標に注意 - ベジェ曲線は
controls
で、方向点の指定が1つだけだった場合の振る舞いに注意