TikZでグラフの交点の座標を求める方法
TikZでグラフの交点の座標を求める方法を書く。コードの全体は最下部に貼りました。
手順
%
% 交点を指定するときに参照できるよう,pathに名前をつける
%
\path[name path=s, draw] plot[domain=0:2*pi] ({\x}, {sin(\x r)});
\path[name path=c, draw] plot[domain=0:2*pi] ({\x}, {cos(\x r)});
name pathオプションでpathに名前をつけます。
%
% pathの交点に名前をつける(デフォルトではintersecion-<index>)
%
\path[name intersections={of=s and c},draw] node[draw, above=5mm] at (intersection-1) {The first point of collision};
name intersections={of=s and c}で,sとcの交点にintersection-<index>という名前をつけます。交点の名前をhogeとしたいときは,name intersections={of=s and c, by=hoge}とします。
%
% 交点が複数ある場合,インデックスが振られる
%
\path node[draw, below=5mm] at (intersection-2) {The second point of collision};
pathに交点が複数ある場合,自動的にインデックスが振られます。今回は交点が二つあるので,intersection-1とintersection-2という名前がつきます。一度交点に名前をつければ,それ以降はpathのオプションにintersectionsを記述しなくても交点の名前を参照できます。
%
% 交点の座標を参照する
%
\tikzmath{
%
% 座標型の変数を宣言
%
coordinate \c;
coordinate \cbase;
%
% 実数型の変数を宣言
%
real \x;
real \y;
%
% 座標を代入
%
\c1 = (intersection-1);
\c{second} = (intersection-2);
\cbase1 = (1,1);
%
% pt -> x座標, y座標
%
\x1 = \cx1 / \cbasex1;
\y1 = \cy1 / \cbasey1;
\x2 = \cx{second} / \cbasex1;
\y2 = \cy{second} / \cbasey1;
};
tikzmathの中で,coordinate型の変数\cに交点の座標を代入し,x座標とy座標を取り出しています。\cのx座標は,\cxとすれば取得できます。ただし,\cxや\cyで取得できるx,y座標はpt単位の数値のため,座標軸の値として取得したければ,軸の単位あたりの幅で割って換算します。
%
% ptではなく座標軸の値を取得したい場合は,基準の座標で割る。
%
\path node at (pi,-5) {$水色の点の座標は\quad (\x1, \y1)$};
tikzmathの中で定義した変数は,tikzmathの外でも参照できます。これで,二つのグラフの交点の座標を求められました。
以下,まるごとのTeXソースです.
\RequirePackage{luatex85}
\documentclass[border={15pt,15pt,15pt,15pt}]{standalone}
\usepackage{luatexja}
\usepackage{tikz}
\usetikzlibrary{math, intersections}
\begin{document}
\begin{tikzpicture}
%
% 交点を指定するときに参照できるよう,pathに名前をつける
%
\path[name path=s, draw] plot[domain=0:2*pi] ({\x}, {sin(\x r)});
\path[name path=c, draw] plot[domain=0:2*pi] ({\x}, {cos(\x r)});
%
% pathの交点に名前をつける(デフォルトではintersecion-<index>)
%
\path[name intersections={of=s and c},draw] node[draw, above=5mm] at (intersection-1) {The first point of collision};
%
% 交点が複数ある場合,インデックスが振られる
%
\path node[draw, below=5mm] at (intersection-2) {The second point of collision};
%
% 交点を丸く塗る
%
\path node[circle,fill,draw,color=cyan] at (intersection-1) {};
\path node[circle,fill,draw,color=brown] at (intersection-2) {};
%
% 交点の座標を参照する
%
\tikzmath{
%
% 座標型の変数を宣言
%
coordinate \c;
coordinate \cbase;
%
% 実数型の変数を宣言
%
real \x;
real \y;
%
% 座標を代入
%
\c1 = (intersection-1);
\c{second} = (intersection-2);
\cbase1 = (1,1);
%
% pt -> x座標, y座標
%
\x1 = \cx1 / \cbasex1;
\y1 = \cy1 / \cbasey1;
\x2 = \cx{second} / \cbasex1;
\y2 = \cy{second} / \cbasey1;
};
%
% tikzmathの中で定義した変数は,tikzmathの外でも参照できる。
%
\path node at (pi,-3) {$水色の点の座標は\quad ( \c1 )$};
%
% 座標\c1のx座標は\cx1に格納されている。
%
\path node at (pi,-4) {$水色の点のx座標は\quad \cx1$};
%
% ptではなく座標軸の値を取得したい場合は,基準の座標で割る。
%
\path node at (pi,-5) {$水色の点の座標は\quad (\x1, \y1)$};
%
% インデックスに数値以外を用いることもできる。ただし,その場合はインデックスを{}でくくる。
%
\path node at (pi,-6) {$茶色い点の座標は\quad ( \c{second})$};
\end{tikzpicture}
\end{document}
お役に立ったらスキしてください. サポートは投稿を続けるモチベーションになります. ありがとうございます.