我一直在尝试创建一个通过两个线性图的交点的二次图。到目前为止,我已经能够得到角点,但似乎无法在 \addplots 中使用交点。这是我目前得到的结果。
\usepackage{tikz, pgfplots}
\usetikzlibrary{calc, intersections}
\pgfplotsset{compat=1.16}
\begin{document}
\begin{tikzpicture}
\begin{axis} [
xmin=0,
xmax=10,
ymin=0,
ymax=10,
domain=-10:10,
]
\addplot[color=black, name path=A] {x};
\addplot[color=black, name path=B] {-x + 10};
\addplot[name intersections={of=A and B, by=C}] coordinates {(C)};
\end{axis}
\end{tikzpicture}
\end{document}
似乎\addplot[name intersections={of=A and B, by=C}] coordinates {(C)};
最后一个 (C) 中的这行有错误,因为当我将 (C) 替换为 (0,0) 时,绘图可以正常呈现而没有交点。
如果这个方法可行,我打算使用 C 给出的 xy 坐标来设置另一个二次图的顶点,其公式为 a(xv)^2+h。有办法实现这个吗?
答案1
\documentclass[tikz, border=1cm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\begin{document}
\begin{tikzpicture}[
declare function={
a1=1; b1=0;
a2=-1; b2=10;
f1=a1*x+b1;
f2=a2*x+b2;
v=(b2-b1)/(a1-a2);
h=a1*v+b1;
a=0.2;
f3=a*(x-v)^2+h;
}]
\begin{axis}[
xmin=0, xmax=10,
ymin=0, ymax=10,
domain=-10:10,
]
\addplot[samples=2] {f1};
\addplot[samples=2] {f2};
\addplot[red, thick, samples=50, smooth] {f3};
\end{axis}
\end{tikzpicture}
\end{document}
答案2
这是另一种方法元帖子。
\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\begin{document}
\mplibtextextlabel{enable}
\begin{mplibcode}
beginfig(1);
numeric u; u = 20;
path xx, yy, A, B, C;
xx = (left -- 11 right) scaled u;
yy = (down -- 11 up) scaled u;
A = (left--right) scaled 16u rotated 45; % y = x
B = (left--right) scaled 16u rotated -45 shifted (0, 10u); % y = 10 - x
C = (-1, 1){1, -2} .. (-1/2, 1/4){1, -1} .. (0, 0){1, 0} .. (1/2, 1/4){1, 1} .. (1, 1){1, 2}; % y = x^2
C := C scaled 10u shifted (A intersectionpoint B);
drawarrow xx;
drawarrow yy;
% now save the size of the drawing so far
interim bboxmargin := 0pt; path b; b = bbox currentpicture;
draw A withcolor 2/3 blue;
draw B withcolor 2/3 blue;
draw C withcolor 2/3 red;
clip currentpicture to b;
endfig;
\end{mplibcode}
\end{document}
我稍微猜测了一下 OP 真正想要的是什么,但如果你用它来编译它,lualatex
你会得到这个:
欲了解有关 Metapost 的更多信息,请点击顶部的链接。