私は実際にこのコードから始めます:
\begin{figure}
\begin{tikzpicture}[scale=1.2]
% Axis
\draw [->] (0,0) node [below] {0} -- (0,0) -- (5.5,0) node [below] {Good 1};
\draw [->] (0,0) node [below] {0} -- (0,0) -- (0,5.5) node [above] {Good 2};
% Indifference curve
\draw (0.3,5) to [out=280,in=175] (5.5,0.5);
\draw (0,4.1) to (4.1,0);
\end{tikzpicture}
答え1
試してみて漸近線。
私のコードを詳しく説明します。
このコードは、翻訳:
unitsize(1cm);
/* page 48 (official documentation)
To make the user coordinates of picture pic represent multiples of x units in
the x direction and y units in the y direction, use
void unitsize(picture pic=currentpicture, real x, real y=x);
*/
defaultpen(linewidth(0.7bp)); // set the width of all paths by 0.7bp
/* page 41 (official documentation)
The pen line width is specified in PostScript units with pen linewidth(real). The
default line width is 0.5 bp; this value may be changed with defaultpen(pen).
*/
draw(Label("Good 1",Relative(.99)),(0,0)--(5.5,0),Arrow);
// 4.1 draw
// is equivalent to \draw [->] (0,0) node [below] {0} -- (0,0) -- (5.5,0) node [below] {Good 1};
draw(Label("Good 2",EndPoint),(0,0)--(0,5.5),Arrow);
// is equivalent to \draw [->] (0,0) node [below] {0} -- (0,0) -- (0,5.5) node [above] {Good 2};
guide g1=(0.3,5){dir(280)}..{dir(-5)}(5.5,0.5);
// 5 Bezier curves (official documentation)
// 6.2 Paths and guides
// the direction of out=280, the direction of in = -5 ( not = 175 )
path g2=(0,4.1)--(4.1,0);
// is equivalent to \draw (0,4.1) to (4.1,0);
picture pic; // Creat a picture named pic
draw(pic,g1,red); // add g1 to pic
unfill(pic,g2--(0,0)--cycle);
/* page 18 (official documentation)
The following routine uses evenodd clipping together with the ^^ operator to unfill a
region:
void unfill(picture pic=currentpicture, path g);
*/
draw(pic,g2,blue); // g2 to pic
add(pic); // add pic to currentpicture
// Find the intersection points of two paths and then connect them.
pair[] inter=intersectionpoints(g1,g2);
draw(inter[0]--inter[1],green);
shipout(bbox(2mm,invisible));
(ページ 34 (公式ドキュメント))を使用する別の方法がありsubpath
、自分で行うことができます。
答え2
ここでは、バージョン2.0を使用した解決策を紹介します。spath3
ライブラリ(2021 年 1 月に CTAN にアップロードされました)。このバージョンでは、交差点でパスを分割し、コンポーネントを抽出して結合する機能が導入されています。これを使用すると、曲線と線を交差点で分割し、それぞれの正しいコンポーネントを組み合わせて、強調表示されたパスを定義できます。
\documentclass{article}
%\url{https://tex.stackexchange.com/q/569881/86}
\usepackage{tikz}
\usetikzlibrary{intersections, spath3}
\ExplSyntaxOn
\cs_set_eq:NN \getComponentOf \clist_item:Nn
\ExplSyntaxOff
\begin{document}
\begin{tikzpicture}[scale=1.2]
% Axis
\draw [->] (0,0) node [below] {0} -- (0,0) -- (5.5,0) node [below] {Good 1};
\draw [->] (0,0) node [below] {0} -- (0,0) -- (0,5.5) node [above] {Good 2};
% Indifference curve
\draw[spath/save=curve] (0.3,5) to [out=280,in=175] (5.5,0.5);
\draw[spath/save=line] (0,4.1) to (4.1,0);
\tikzset{
spath/split at intersections={curve}{line},
spath/get components of={curve}\ccpts,
spath/get components of={line}\lcpts,
}
\draw [
line width=3pt,
cyan,
opacity=.5,
spath/restore=\getComponentOf\ccpts{1}
]
[
spath/insert=\getComponentOf\lcpts{2},
spath/insert=\getComponentOf\ccpts{3}
];
\end{tikzpicture}
\end{document}
異なる部分に異なる色を付けたい場合は、それらを異なる\draw
コマンドに配置する必要があります。