TikZで曲線に囲まれた領域を塗る方法
TikZで曲線に囲まれた領域を塗る方法を書く。
コードの全体はこちらのOverLeafでご確認下さい。
=> 最下部に貼りました.(Feb. 3rd, 2020)
手順
%
% pathを作って名前をつける
%
\path[name path=s,domain=0:2.5*pi] plot (\x,{sin(\x r)});
\path[name path=c,domain=0:2.5*pi] plot (\x,{cos(\x r)});
%
% 交点をintersection-1,intersection-2と参照できるようにする
%
\path node[name intersections={of=s and c}] {};
%
% 交点の座標を取得する
%
\tikzmath{
coordinate \c;
coordinate \cbase;
real \px;
\c1 = (intersection-1);
\c2 = (intersection-2);
\c3 = (intersection-3);
\cbase1 = (1,1);
\px1 = \cx1 / \cbasex1;
\px2 = \cx2 / \cbasex1;
\px3 = \cx3 / \cbasex1;
}
まず交点の座標を取得します。ここの処理の説明は,こちらの記事を参照。
%
% pathで囲んだ領域を塗る
%
\path[fill,top color=white, bottom color=white,middle color=purple] plot[domain=\px1:\px2] ({\x},{sin(\x r)}) plot[domain=\px2:\px1] ({\x},{cos(\x r)});
%
% pathの流れを示す矢印を追加
%
\path[draw,yshift=-10pt,>=stealth,thick,->,dashed] plot[domain=\px1:\px2] (\x,{cos(\x r)});
\path[draw,yshift=10pt,>=stealth,thick,->,dashed]
plot[domain=\px2:\px1] (\x,{sin(\x r)});
\px1から\px2まで y=cosx をplotし,続いて\px2から\px1まで y=sinx をplotして閉じたpathを作ります。その内部を\pathのオプションに従って塗りつぶします。
%
% pathで囲んだ領域を塗る
%
\path[pattern=horizontal lines,pattern color=orange] plot[domain=\px2:\px3] ({\x},{sin(\x r)}) plot[domain=\px3:\px2] ({\x},{cos(\x r)});
patternによる塗りつぶし。斜線で塗りつぶしたいときは,clipとforeachを利用するとうまくできます。こちらを参照。
%
% グラフを描く
%
\path[domain=0:2.5*pi,draw] plot (\x,{sin(\x r)});
\path[domain=0:2.5*pi,draw] plot (\x,{cos(\x r)});
最後に,グラフを描画して領域を縁取り,完成です。
以下,TeXソースまるごとです.
\RequirePackage{luatex85}
\documentclass[border={15pt,15pt,15pt,15pt}]{standalone}
\usepackage{luatexja}
\usepackage{tikz}
\usetikzlibrary{intersections,math,patterns}
\begin{document}
\begin{tikzpicture}
%
% pathを作って名前をつける
%
\path[name path=s,domain=0:2.5*pi] plot (\x,{sin(\x r)});
\path[name path=c,domain=0:2.5*pi] plot (\x,{cos(\x r)});
%
% 交点をintersection-1,intersection-2と参照できるようにする
%
\path node[name intersections={of=s and c}] {};
%
% 交点の座標を取得する
%
\tikzmath{
coordinate \c;
coordinate \cbase;
real \px;
\c1 = (intersection-1);
\c2 = (intersection-2);
\c3 = (intersection-3);
\cbase1 = (1,1);
\px1 = \cx1 / \cbasex1;
\px2 = \cx2 / \cbasex1;
\px3 = \cx3 / \cbasex1;
}
%
% pathで囲んだ領域を塗る
%
\path[fill,top color=white, bottom color=white,middle color=purple] plot[domain=\px1:\px2] ({\x},{sin(\x r)}) plot[domain=\px2:\px1] ({\x},{cos(\x r)});
%
% pathの流れを示す矢印を追加
%
\path[draw,yshift=-10pt,>=stealth,thick,->,dashed] plot[domain=\px1:\px2] (\x,{cos(\x r)});
\path[draw,yshift=10pt,>=stealth,thick,->,dashed] plot[domain=\px2:\px1] (\x,{sin(\x r)});
%
% pathで囲んだ領域を塗る
%
\path[pattern=horizontal lines,pattern color=orange] plot[domain=\px2:\px3] ({\x},{sin(\x r)}) plot[domain=\px3:\px2] ({\x},{cos(\x r)});
%
% グラフを描く
%
\path[domain=0:2.5*pi,draw] plot (\x,{sin(\x r)});
\path[domain=0:2.5*pi,draw] plot (\x,{cos(\x r)});
\end{tikzpicture}
\end{document}
お役に立ったらスキしてください. サポートは投稿を続けるモチベーションになります. ありがとうございます.