TeXに直接作図しよう!3

前回までに具体的に分かっている点の座標を指定することができるようになったので,今回はいよいよ図形を描画していきます。LaTeXのコンパイルにはdvipdfmxを使うものと仮定しますと,実際にTikZを試してみるときは,以下のようなコードのtikzpicture環境内にTikZのコマンドを記述してください。各コマンド行の最後にはセミコロン「;」をつけるのを忘れないように気をつけてください。(しばしば意味不明なエラーメッセージの原因となります。)

はじめに

TikZでは図形を扱うときはいつも\pathコマンドが使えて次のように書けます。

《パスオプション》には,線を描画したいときはdraw,塗りを描画したいときはfillなどと記述します。線と塗りの両方が欲しいときは,二つをコンマ区切りでdraw, fillとします。逆に,≪パスオプション≫を指定しなければデフォルトでは何も描画されません。ただし,領域は確保されるので,見えないパスが作られていると考えればよいかもしれません。《パスの定義》とは,例えば直線(線分)なら(0,0)--(1,2)のようなものです(それが今回のメインテーマです)。

もちろん\pathコマンドでもいいんだけど

いちいち\path\path,……と書いていたらしまいにゲシュタルト崩壊してしまうので,親切にもこれらの構文にはシンタックスシュガーというか省略形が用意されています。今回使うのは次のものです。

これらのコマンドにもオプションを指定できますが,今回は線の太さも色も塗りもデフォルトで行きます。

《パスの定義》の書き方

《パスの定義》は一般的に次のように書きます。

ちょっと見にくいですが,《座標と座標の繋ぎ方》の具体例を見てからもう一度上の一般化を見れば分かるはずです。

《座標と座標の繋ぎ方》について

「繋ぎ方」とはつまり,二つの点を直線で結んだり,ベジェ曲線で結んだり,あるいはそれを対角の頂点とする長方形を描いたりすることです。

直線(正確にいえば線分)と折れ線

一番良く使うのはやはり直線(線分)でしょうね。二点間の線分は次のように表します。

例えば

とすると,下の図の太い線の形になります。

Rendered by QuickLaTeX.com

これに「塗り」をつけようとする人は少ないかもしれませんが,一応やっておくと

としますと,

Rendered by QuickLaTeX.com

が得られます。Adobe Illustratorと同じふるまいで,閉じていないパスに「塗り」をつけると,「パスの開始点と終了点を結んだ線分」と「パス」に囲まれた領域が塗りつぶされます。(オプションについてはまた別の場所で詳しく説明します。)

閉じたパス

先ほど「閉じていないパス」と言いました。では閉じたパスを作るには?これはどうでしょうか?

おお,いいんじゃないですか!

Rendered by QuickLaTeX.com

でも,(0,1)付近を拡大してみると……

Rendered by QuickLaTeX.com

ああ,これでは残念。クソーッ!ちゃんと閉じたパスにするにはいったいどうしたらいいんと言うんだ!?

ごめんなさい茶番でした。閉じたパスにするには

と書きます。--cycleの間にはスペースが入っても構いませんが,--cycleはセットです。cycleだけでは使えません。上のコードを修正すると,

となり,これを描画すると

Rendered by QuickLaTeX.com

(0,1)で無事パスが閉じましたね。

それでは極座標と閉じたパスを使って星マークを書いてみましょう。

Rendered by QuickLaTeX.com

長方形とグリッド

長方形のパスを作るには,

と書きます。ただし,《座標1》と座標《座標2》は長方形の対角の頂点の座標です。「右上と左下」の組でも,「右下と左上」の組でも構いません。例えば

とすれば,

Rendered by QuickLaTeX.com

の太線の形に描画されます。

長方形と同様にしてグリッドが描けます。

グリッドとは,方眼紙みたいな格子状の線で,作図の補助線として使うことが多いです。次のようなサンプルです。

とすれば,

Rendered by QuickLaTeX.com

となります。
gridはしばしばオプションにhelp linesを指定します。

そうすると線の色と細さが補助線用になります。

Rendered by QuickLaTeX.com

さらに,オプションでstep=***と指定すると,グリッドの間隔が変更できます。

Rendered by QuickLaTeX.com

簡単な曲線

曲線を描くための一番簡単な方法はtoとそのオプションのin, outを使う方法です。

の形で書き,≪角度α≫は≪座標1≫から出る線の≪座標1≫における傾きをx軸の正の向きから反時計回りに計った角度(単位:°)で表し,≪角度β≫は≪座標2≫に入る線の≪座標2≫における傾きをx軸の正の向きから反時計回りに計った角度で表したものです。例えば,

と書くと,

Rendered by QuickLaTeX.com

の太い線の部分の形が得られます。

また,オプションにrelativeを指定することができます。

この場合は≪角度α≫≪角度β≫を,x軸の正の向きからではなく,≪座標1≫から≪座標2≫に向かうベクトルを基準として,そのベクトルから反時計回りに計った角度で表すことができます。
先ほどの例にオプションrelativeをつけたらどうなるか見てみましょう。

とすると,

Rendered by QuickLaTeX.com

上の図の太い線の部分の形が得られます。

直線(--)とtoパス(to[out=*,in=*])を組み合わせるだけで,結構自由に作図できるようになります。例えば,

とすれば,

Rendered by QuickLaTeX.com

上の図の線が得られます。

ベジェ曲線

toパスを使った曲線は簡単に書けますが,あまり自由な曲線が描けません。そこでベジェ曲線を使います。ベジェ曲線はAdobe IllustratorやオープンソースのInkscapeのようなベクター画像ソフトで広く採用されていて,慣れるまではなかなかうまく書けませんが,慣れたら目をつむっていても思った通りの曲線が描けるようになります多分。ベジェ曲線についての説明は,TTEditやOTEditの販売をする武蔵システムのサイトがわかりよいです。

ベジェ曲線は次の形式で表します。

これによって表される曲線は,≪座標1≫と≪座標2≫を結ぶ線で,≪座標1≫付近で≪座標1≫と≪制御点1≫を結ぶ直線に接し,≪座標2≫付近で≪座標2≫と≪制御点2≫を結ぶ直線に接する。また,数学的意味を無視して直観的な話をすれば,≪制御点1≫が≪座標1≫から遠ければ遠いほど,曲線の≪座標1≫側は≪座標1≫と≪制御点1≫を結ぶ直線に引き寄せられ,≪制御点2≫が≪座標2≫から遠ければ遠いほど,曲線の≪座標2≫側は≪座標2≫と≪制御点2≫を結ぶ直線に引き寄せられる感じになる。以下の図では黒丸が≪座標n≫に当たり,白丸が≪制御点n≫を示す。サンプルを示すのでいろいろ値を変えて実験しながら慣れていってください。

Rendered by QuickLaTeX.com

ベジェ曲線と相対座標

ベジェ曲線で線を描くときは,前回説明した相対座標で制御点を表すと便利かもしれません。

この時,≪座標1≫から見た≪相対座標1≫が≪制御点1≫になり,≪座標2≫から見た≪相対座標2≫が≪制御点2≫になります。特に極座標の相対座標を用いるのが分かりやすく,次のような感じになります。

Rendered by QuickLaTeX.com

相対座標で制御点を指定すると,≪座標1≫≪座標2≫を移動させても曲線の形が変わらないので,同じ図形を複数回ずらして使う場合などに便利です。(scope環境でくくってxshift,yshiftしてもいいですが)

ベジェ曲線の練習ではしばしばハートマークを書かせる本が多いので,ここでもハートマークを書いてみましょう。

Rendered by QuickLaTeX.com

円弧・楕円弧

円弧の表し方は

または

です。上のほうが読みやすいかもしれませんが,慣れたら下のほうが便利だと思います。これによって表される円弧は,半径がrの円の,角度αからβに対応する部分(ただし,α,βは単位°)で,開始角αに対応する点が≪座標P≫に一致します。そして,≪現在の座標≫は≪終了角β≫に対応する点に移ります。例えば

とすれば,

Rendered by QuickLaTeX.com

の太線の部分の図形が得られます。なお,α < βなら,円弧は反時計回りに描かれ,β < αなら,円弧が時計回りに描かれるということは明らかでしょう。

また,楕円弧,つまり楕円の一部分も同様に表すことができます。その場合は

または

とします。ただし,楕円の上の角α,βに対応する点は,≪x軸半径rx≫または≪y軸半径ry≫を拡大・縮小して正円にし,そこで角α,βに対応する点を取り,それ再び元の楕円に戻すと得られる点,になります。言葉で説明するのは難しいので次の例を見て理解してください。ただし,xscale, yscaleオプションは,それぞれx軸方向,y軸方向に図形を拡大・縮小します。

Rendered by QuickLaTeX.com

放物線

放物線はオプションの指定などがいろいろ複雑なので,順番に見ていきましょう。まずはオプションも何もつけない一番簡単な形。

≪座標1≫を頂点とし,≪座標2≫を通る,上または下に凸な放物線の,≪座標1≫から≪座標2≫の間の部分です。上または下に凸な放物線はy=a(x-p)^2+qの形で表せるので,頂点ともう一点を与えれば,一意に定まります。

Rendered by QuickLaTeX.com

まずbend at startと,bend at endオプションがあります。

オプションにbend at startを指定するとデフォルトと同じで≪座標1≫が放物線の頂点に,bend at endを指定すると≪座標2≫が放物線の頂点になります。

Rendered by QuickLaTeX.com

今までは放物線を軸で切って半分になったものでしたが,次に完全な放物線を描きましょう。

これが表すのは≪座標2≫を頂点とし,≪座標1≫と≪座標3≫を通る放物線です。ただし,これは,

の二つを合わせたものなので,≪座標1≫と≪座標3≫をうまくとれば,

Rendered by QuickLaTeX.com

のように一続きの放物線になりますが,変な取り方をすれば

Rendered by QuickLaTeX.com

変なことになります。逆にうまくとれば,≪座標1≫と≪座標3≫のy座標は必ずしも同じである必要はありません。

Rendered by QuickLaTeX.com

頂点の座標を計算せずに放物線の高さを指定することもできます。

≪座標1≫と≪座標2≫を通り,高さが≪高さh≫の放物線です。≪座標1≫と≪座標2≫のx座標の平均に頂点がきます。ですので,基本的には,≪座標1≫と≪座標2≫のy座標が同じになるようにしてください。

Rendered by QuickLaTeX.com

≪高さh≫と言いましたが,≪高さh≫はベクトル量(?)です。プラスの値を入れると放物線が上に凸に,マイナスの値を入れると下に凸になります。

Rendered by QuickLaTeX.com

なお,≪座標1≫と≪座標2≫のy座標が異なる場合,≪座標1≫と≪座標2≫のy座標の平均から≪高さh≫分上に行ったとところに頂点が来ます。

Rendered by QuickLaTeX.com

サインカーブ

サインカーブは放物線と見た目も使い方も似ています。

y=sinΘ型のグラフとy=cosΘ型のグラフの,0≦Θπ/2の範囲をそれぞれ,≪座標1≫と≪座標2≫,≪座標3≫と≪座標4≫を通るように描きます。ただし≪座標2≫のy座標が≪座標1≫y座標より小さい場合は,y=-sinΘの形に,≪座標4≫のy座標が≪座標3≫y座標より小さい場合は,y=-cosΘの形になります。

Rendered by QuickLaTeX.com

連続したサインカーブを作りたいときは,sincosを交互に使えばよいでしょう。(plotを使う方法もあります)

Rendered by QuickLaTeX.com

2点をx軸,y軸に平行な線で結ぶ

え?なにを言っているかわからない?俺も使い道があまり見いだせないんだが,書いておかないと知らないみたいに思われるといけないから,まず書き方。

上は,≪座標1≫の点から出たx軸に平行な線と,≪座標2≫の点から出たy軸に平行な線の作る,途中で90°折れ曲がる線。下は,≪座標3≫の点から出たy軸に平行な線と,≪座標4≫の点から出たx軸に平行な線の作る,途中で90°折れ曲がる線。例を見たらわかると思います。

Rendered by QuickLaTeX.com

なお,「|」は「パーティカルバー」とか「パイプ」とか「縦線」とか呼ばれる記号で,[Shift]キーを押しながらバックスペースキーの隣の[¥]キー(ただし一般的な日本語106/109キーボードの場合)を押すと入力できます。

円と楕円

円と楕円は≪座標と座標のつなぎ方≫ではないですがここにまとめておきます。
円と楕円は次のように記述します。

丸括弧を使うと座標と紛らわしいので,オプションとして半径を指定したほうがいいかもしれません。

Rendered by QuickLaTeX.com

circleellipserectangleと違って≪現在の座標≫を変更しません。ですので,例えば円に続いて線を引くと次のようになります。

Rendered by QuickLaTeX.com

次回は,内分点や二つのパスの交点をはじめとした応用的な点の指定方法の説明をする予定です。
1 2