使用 Tikz 绘图函数-这个洞是从哪里来的?

使用 Tikz 绘图函数-这个洞是从哪里来的?

我正在尝试绘制一条双曲线,但由于某种原因,它在图中留下了一个漏洞,而我不知道是什么原因造成的:

\documentclass{article}
\usepackage{tikz}
\begin{document}

\begin{tikzpicture}
\draw[blue!50!black] plot[domain=(1/sqrt(2)):2,smooth,thick,samples=100] (\x,{sqrt(2*(\x*\x)-1)});
\draw[blue!50!black] plot[domain=-2:(-1/sqrt(2)),smooth,thick,samples=100] (\x,{sqrt(2*(\x*\x)-1)});

\draw[blue!50!black] plot[domain=(1/sqrt(2)):2,smooth,thick,samples=100] (\x,{-sqrt(2*(\x*\x)-1)});
\draw[blue!50!black] plot[domain=-2:(-1/sqrt(2)),smooth,thick,samples=100] (\x,{-sqrt(2*(\x*\x)-1)});
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案1

为什么存在差距的答案是

因为 LaTeX 不是计算机代数系统。

所以我们必须帮助TiZ 做正确的事。无论如何,如果我们想要一条平滑、连续的曲线,我们可能希望用一笔画出每个组件。这可以通过选择不同的参数化来实现,例如

\documentclass{article}
\usepackage{tikz}
\begin{document}

\begin{tikzpicture}
\draw[blue!50!black] plot[domain=-2:2,smooth,thick,samples=101]
 ({(1/sqrt(2))+abs(\x)},{sign(\x)*sqrt(2*\x*\x+2*sqrt(2)*abs(\x))});
\draw[blue!50!black] plot[domain=-2:2,smooth,thick,samples=101]
 ({-(1/sqrt(2))-abs(\x)},{sign(\x)*sqrt(2*\x*\x+2*sqrt(2)*abs(\x))});
\end{tikzpicture}
\end{document}

在此处输入图片描述

也许更简单的重新参数化是

\documentclass{article}
\usepackage{tikz}
\begin{document}

\begin{tikzpicture}
\draw[blue!50!black] plot[domain=-4:4,smooth,thick,samples=101]
 ({sqrt(1/2+\x*\x/2)},\x);
\draw[blue!50!black] plot[domain=-4:4,smooth,thick,samples=101]
 ({-sqrt(1/2+\x*\x/2)},\x);
\end{tikzpicture}
\end{document}

答案2

类似这样的方法可能会被使用

\documentclass{standalone} % or whatever
\usepackage{tikz,pgfplots}
\begin{document}

\begin{tikzpicture}

  \begin{axis}[
    xmin=-2,
    xmax=2,
    samples=101,
    unbounded coords=jump,
    axis lines=middle,
    ]
    \begin{scope}[
      domain=-2:-1/sqrt(2),
      ]
      \addplot[smooth] {sqrt(2*(\x*\x)-1)};
      \addplot[smooth] {-sqrt(2*(\x*\x)-1)};
    \end{scope}
    \begin{scope}[
      domain=1/sqrt(2):2,
      ]
      \addplot[smooth] {sqrt(2*(\x*\x)-1)};
      \addplot[smooth] {-sqrt(2*(\x*\x)-1)};
    \end{scope}
  \end{axis}
\end{tikzpicture}
\end{document}

请注意,我们实际上可以这样做

\addplot [domain=-2:2] {sqrt(2*(\x*\x)-1)};

上半部分。它会自动计算。但之后我们得到了洞。我假设有一个选项,我们可以告诉它绘制-2:2并额外评估+- 1/sqrt(2)

答案3

最简单的解决办法就是在间隙上画一条连接线。

\documentclass{standalone}
\usepackage{tikz}
\begin{document}

\begin{tikzpicture}
\draw[blue!50!black] plot[domain=2:(1/sqrt(2)),smooth,thick,samples=100] (\x,{sqrt(2*(\x*\x)-1)}) --
  plot[domain=(1/sqrt(2)):2,smooth,thick,samples=100] (\x,{-sqrt(2*(\x*\x)-1)});

\draw[blue!50!black] plot[domain=-2:(-1/sqrt(2)),smooth,thick,samples=100] (\x,{sqrt(2*(\x*\x)-1)}) --
  plot[domain=(-1/sqrt(2)):-2,smooth,thick,samples=100] (\x,{-sqrt(2*(\x*\x)-1)});
\end{tikzpicture}
\end{document}

演示

相关内容