我知道这可能是一个愚蠢的问题,但在求解由 $y = ax^2 + bx + c$ 给出的抛物线的系数时,我们有三个常数 a、b 和 c 来控制它的形状。这意味着如果我们想求解这些常数,我们需要一个由三个方程组成的线性系统,如下所示:
$y_1 = ax_1^2 + bx_1 + c$
$y_2 = ax_2^2 + bx_2 + c$
$y_3 = ax_3^2 + bx_3 + c$
因此我们需要三个不同的点(x_1,y_1),(x_2,y_2),(x_3,y_3)来获得抛物线的确定形状。
但是,该parabola
命令仅需要两个点。假设这两个点是固定的。tikz 如何始终能够生成完全相同的抛物线?此外,我不太了解该bend
命令。它是如何工作的?
答案1
parabola
没有任何选择
在
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw (x0, y0) parabola (x1, y1);
\end{tikzpicture}
\end{document}
部分抛物线的对称轴位于 ,x = x0
并经过(x0, y0)
,(x1, y1)
画出。这提供了足够的信息来获取该抛物线的精确函数。
x = x0
对称轴在且通过 的抛物线的函数(x0, y0)
是y - y0 = a (x - x0)^2
。- 利用该抛物线也经过的条件
(x1, y1)
,a
是可解的,且a = (y1 - y0) / (x1 - x0)^2
。
因此\draw (x0, y0) parabola (x1, y1);
绘制函数的图像
y = a(x - x0)^2 + y0, x in [x0, x1],
在哪里a = (y1 - y0) / (x1 - x0)^2
。
parabolar
带选项bend={<absolute coordinate>}
\draw (x0, y0) parabola[bend={(x2, y2)}] (x1, y1);
相当于
\draw (x2, y2) parabola (x0, y0)
(x2, y2) parabola (x1, y1);
因此绘制了两条部分抛物线。
parabola
有选择bend={<relative coordinate>}
和bend pos=<fraction>
\draw (x0, y0) parabola[bend={+(dx, dy)}, bend pos=k] (x1, y1);
其中(dx, dy)
是坐标,k
是分数,例如0.5
或0.0
,相当于
\draw (x2, y2) parabola (x0, y0)
(x2, y2) parabola (x1, y1);
其中(x2, y2) == ($(x0, y0)!k!(x1, y1) + (dx, dy)$)
, 或x2 = x0 + k * (x1 - x0) + dx
和y2 = y0 + k * (y1 - y0) + dy
。
parabola
有其他选择
其他三个parabola
选项都可以看作是样式选项,其中
parabola height=<dimension> == bend pos=0.5, bend={+(0pt, <dimension>)}
bend at start == bend pos=0.0, bend={+(0, 0)}
bend at end == bend pos=1.0, bend={+(0, 0)}
parabola
这样就完成了对 tikz 提供的操作及其具体选项的(归纳)解释。
一个例子
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\draw[help lines]
(0, -4) grid (3, 2);
% simple parabolae
\draw (1, -1) parabola (0, 0) % y = x^2, x in [0, 1]
(1, -1) parabola (3, 2); % y = 3/2 * (x - 1)^2 - 1, x in [1, 3]
% bend={<absolute coordinate>}
\draw[yshift=-1cm, blue]
(0, 0) parabola[bend={(1, -1)}] (3, 2);
% bend={<relative coordinate>}, bend pos=<fraction>
\draw[yshift=-2cm, red]
(0, 0) parabola[bend={+(0, -1.666)}, bend pos=0.333] (3, 2) -- cycle;
% domonstrate
\draw[yshift=-2cm, red, |<->|]
(1, 0.666) -- node[above, sloped] {\tiny $1.666$} (1, -1);
% restore bend={<relative coordinate>} to bend={<absolute coordinate>}
\draw[yshift=-3cm, orange]
(0, 0) parabola[bend={($(0, 0)!.333!(3, 2) + (0, -1.666)$)}] (3, 2);
\end{tikzpicture}
\end{document}