Ich beginne eigentlich mit diesem Code:
\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}
Im Moment habe ich Folgendes. Ich würde gerne wissen, wie ich den Teil der Kurve unter der Linie lösche und dann den gesamten Schnittpunkt von Kurve und Linie einfärbe.
Antwort1
Sie können es versuchen mitAsymptote.
Ich werde Ihnen meinen Code im Detail beschreiben.
Dieser Code kann kompiliert werden unterhttp://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));
Es gibt eine andere Methode subpath
(Seite 34 (offizielle Dokumentation)), die Sie selbst durchführen können.
Antwort2
Hier ist eine Lösung mit Version 2.0 desspath3
Bibliothek (im Januar 2021 auf CTAN hochgeladen). Diese Version bietet die Möglichkeit, Pfade an Schnittpunkten zu teilen und dann Komponenten zu extrahieren und zusammenzufügen. Damit können wir die Kurve und die Linie an ihren Schnittpunkten teilen und dann die richtigen Komponenten zusammenfügen, um den hervorgehobenen Pfad zu definieren.
\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
Wenn Sie möchten, dass die verschiedenen Teile unterschiedlich eingefärbt werden, müssen Sie sie lediglich in unterschiedliche Befehle einfügen .