TikZお勉強シリーズ【応用⑴】intersectionを使ってみる①

本格的な記事は初めてなくせにいきなり応用かよっていう感じですね。安定の無鉄砲です。

ですが、理由はありまして、TikZの拡張機能、というかlibraryの使い方の記事があまりないなと個人的に感じていた(私が見つけられなかっただけでしょうが)んですよね。もちろんlibraryを使わなくても基本図形や基本グラフはほぼ書けますが。ただ、libraryの中には便利なものが非常に多くありまして。まずは、そこから行きましょうという話です。まあ、現時点で使えるのごくわずかしかないんですけどネ…

libraryとは

先にも述べましたが、簡単にいうとTikZの拡張機能的な感じのものだと思います。これらを使うには、TikZを使う時以上にプリアンブルで宣言が要ります。もしこの記述が抜けているとコンパイルでエラーをはかれるので注意が必要です。

intersectionとは

まあそのままズバリの和訳の通り、「交点」を求めるlibraryです。「交点」であればなんでもよく、例えば直線同士や、直線と円、グラフ同士、全てに使えます。では早速使ってみましょう。先にも述べましたが、プリアンブルで宣言することをお忘れなく。

\usetikzlibrary{intersections}

使ってみよう①ー交点が1個しかない場合ー

まずは、交点を求めたい対象の図形に名前をつけていきます。例えば、線分ABと線分CDの交点を求めたいとすれば、この線分ABと線分CD2つに対して、なんらかの名前を別途つける必要があります。

\path[name path=line 1] (A) -- (B);
\path[name path=line 2] (C) -- (D);

上のように、オプションの欄に[name path=○○]という形で、名前を定義してあげます。今回は、線分ということでline ○という名前をつけましたが、別にfxでもgxでもl1でもなんでも構いません。とりあえずこの宣言を忘れないようにしましょう。

さて、名前をつけた後はいよいよintersection、つまり交点を求めていきます。今回は、直線同士の交点なので、(平行でない限りは)必ず交点はただ1つ存在します。このように、交点が1つの場合は、以下のように宣言をしてあげるのが最も簡単でしょう。

\path [name intersections={of=line 1 and line 2,by=E}];

基本英語で定義されているので、英語がある程度わかるよっていう方は、かなり納得いく構文だと思います。やっぱりTikZは素晴らしいソフトですね。

さて、話が逸れましたが説明です。まず、of以下で、対象の図形を明示します。先ほど定義した名前を使い、対象間はandでつなげましょう。今回は、line 1とline 2の交点を求めたいので、of=line 1 and line 2となります。

次に、by以下ですがこれはいわばcoordinateの役割を果たします。交点を求めた以上、これからこの交点を使って図を拡張していくはず。ただ、今のままでは、ただ単に交点ここだぜってパソコンが発見しただけです。これでは、私たちにとっては、なんの意味もなくなってしまいますので、再度名前を定義してあげる必要があります。それがby以下です。今回の例では、by=Eとしてあるので、交点の名前をEと定義したということになります。つまり、例えばこの下で

\draw (F) -- (E);

とか書けば、今回求めた交点と点Fの間で線分を引く、などといった操作が可能になります。

また、この交点にラベルをつけたい、例えば交点の上にEっていう文字を置きたいという場合にも、この下に

\node[above] at (E) {E};

とか宣言してあげれば良いことになります。ただ、今回のようなnodeは

\path [name intersections={of=line 1 and line 2,by=E}] node[above] at (E) {E};]

と直後に書くこともあります。これは個人の自由なのでどちらでもいいと思います、多分。

次回予告

今回は、交点が1個しかない場合でのintersectionの使い方を記事にまとめてみましたが、交点が2個以上の場合ももちろんあります。円と直線とか。その場合はどのようにすれば良いのでしょうか。それはまた今度の記事でということにしておきましょう。

注意

なお、最初の記事でも述べたとおり、著者は未だTikZ学習中の身で、プロとは程遠い存在です。あくまで備忘録的な記事なので、流石にそこまで大きな間違いはないとは思いますが、何かここ違うよという部分あれば遠慮なく教えていただければと思います。

長くなってしまいましたが、最後まで読んでくださった方ありがとうございます。いつか誰かの何かの役に立つことを願いまして、締めたいと思います。では、また次の記事でお会いしましょう。