Tikz에서 곡선의 일부를 삭제하는 방법은 무엇입니까?

Tikz에서 곡선의 일부를 삭제하는 방법은 무엇입니까?

나는 이것을하고 싶습니다 : 여기에 이미지 설명을 입력하세요

실제로 다음 코드로 시작합니다.

\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

당신은 시도 할 수 있습니다점근선.

내 코드를 자세히 설명하겠습니다.

이 코드는 다음에서 컴파일될 수 있습니다.http://asymptote.ualberta.ca/

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명령에 입력하면 됩니다.

교차하는 지점에서 곡선과 선 분할

관련 정보