如果不包含尖端,就无法制作抛物线

如果不包含尖端,就无法制作抛物线

我正在尝试使用 TikZ 制作绝对值抛物线函数。当我尝试创建抛物线的右侧和左侧(在正常函数中位于 x 轴下方的两侧)时,如果不在 x 轴下方添加一个弯曲,就无法创建抛物线。

\task\begin{tikzpicture}
    \draw (-10,0)--(10,0);
    \draw(0,0) parabola bend(-3,6)(-6,0);
    \draw(0,0) parabola bend(-3,-6)(2,10);
    \draw(-6,0) parabola bend(-3,-6)(-8,10);
\end{tikzpicture}

这就是它的样子

答案1

最简单的解决方案是绘制两条抛物线,一条倒置,然后将它们都剪下来,只显示线上方的部分:

\documentclass[border=3.14,tikz]{standalone}

\begin{document}
\begin{tikzpicture}
    \draw (-5,0)--(5,0);
    \begin{scope}
      \clip (-5,0) rectangle (5,6);
      \draw (-4,6) parabola bend (0,-2) (4,6);
      \draw (-4,-6) parabola bend (0,2) (4,-6);
    \end{scope}
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

另一个简单的解决方案是使用plot函数并相应地定义抛物线:

\documentclass[tikz,border=3mm]{standalone}

\begin{document}
    \begin{tikzpicture}
\draw (-5,0)--(5,0);
\draw[semithick, red] plot [domain=-2:2] (2*\x,{abs(\x*\x-1)});
    \end{tikzpicture}
\end{document}

在此处输入图片描述

编辑: 或者在选项中声明函数tikzpicture并使用 200 个样本而不是默认数量(如果我没记错的话,是 30):

\documentclass[tikz,border=3mm]{standalone}
\begin{document}
    \begin{tikzpicture}[
declare function = {f(\x)={abs(\x*\x-1)};}
                        ]
\draw (-5,0) -- (5,0);
\draw[semithick, red] plot [domain=-2:2, samples=200] (2*\x,{f(\x)});
    \end{tikzpicture}
\end{document}

在此处输入图片描述

答案3

这真的只是为了好玩。你制造 TiZ 自动将抛物线(或任何您绘制的图形)反映在 x 轴上。这可以通过安装非线性变换来实现,在这种情况下这特别简单。

\documentclass[tikz,border=3mm]{standalone}
\usepgfmodule{nonlineartransformations}
\makeatletter
\def\yreflect{%
    \pgfmathsetmacro{\myy}{abs(\pgf@y)}%
    \pgf@y=\myy pt}
\begin{document}
\begin{tikzpicture}
 \begin{scope}[transform shape nonlinear=true]
  \pgftransformnonlinear{\yreflect}
  \draw (-5,0)--(5,0);
  \draw (-4,6) parabola bend (0,-2) (4,6);
 \end{scope}
\end{tikzpicture}
\end{document}

在此处输入图片描述

可以看出,存在小的差距,所以解决方案并不像Skillmon 的解决方案

相关内容