当仅给定两个点时,tikz 如何绘制抛物线?

当仅给定两个点时,tikz 如何绘制抛物线?

我知道这可能是一个愚蠢的问题,但在求解由 $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.50.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) + dxy2 = 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}

在此处输入图片描述

相关内容