我使用 tikz 制作了此图形: 源代码:
\documentclass[]{scrartcl}
\usepackage{tikz}
\usetikzlibrary{shapes, arrows, calc, positioning, fit, external}
\begin{document}
\begin{tikzpicture}[scale = 1.4, domain=-5:5, samples=49, text height=1.5ex, text depth=.25ex]]
\centering
\def\w0{0.7}
\def\z0{1.25}
\def\hype{\w0*sqrt(1 + (\x / \z0)^2)}
\fill[fill=red!10] (-5,0) -- plot(\x,{\hype}) -- plot[domain=5:-5](\x,{- \hype}) -- cycle;
\draw[color=red,very thick] plot (\x,{\hype});
\draw[color=red,very thick] plot (\x,{- \hype});
\draw[color=gray,dashed] plot (\x,{\x * \w0 / \z0});
\draw[color=gray,dashed] plot (\x,{-\x * \w0 / \z0});
\draw[color=black,thick,loosely dashdotted] (-5,0) -- (5,0);
\draw[dashed] (0, 0) -- (0, -2.5);
\draw[dashed] (\z0, 0) -- (\z0, -2.5);
\draw[<->, thick] (0, -2.3) -- (\z0, -2.3) node[midway,above]{$z_r$};
\draw[<->, thick] (0, -\w0) -- (0, \w0) node[midway,fill=white]{$w_0$};
\draw[<->, thick] (\z0, {-sqrt(2)*\w0}) -- (\z0, {sqrt(2)*\w0}) node[midway,fill=white]{$\sqrt{2}\,w_0$};
\node[draw,color=green,thick,circle,minimum size=1.5cm] at (-4.9, 2.8) {};
\end{tikzpicture}
\end{document}
绿色圆圈只是用来标记问题。如何消除扭结?当我指定较少的样本数时,扭结就消失了,但双曲线看起来很糟糕。样本越多,扭结越明显。
答案1
您可以使用 pgf 2.1 和下一个代码来避免该问题
\draw[color=gray,dashed] plot (\x,{\x * (\w0 / \z0)});
\draw[color=gray,dashed] plot (\x,{-\x * (\w0 / \z0)});
评论 :
a)两个点足以用 pgf 2 或 pgf 3 画一条线。所以:
\draw[color=gray,dashed,samples=2] plot (\x,{\x * (\w0 / \z0)});
\draw[color=gray,dashed,samples=2] plot (\x,{-\x * (\w0 / \z0)});
b) pgf 3.0 没有问题
答案2
请注意,样本=2似乎以消除问题(因为有一条平滑的线)但线的位置错误:
代码:
\draw[color=gray,dashed] plot (\x,{-\x * \w0 / \z0});
\draw[color=gray, samples=2] plot (\x,{-\x * \w0 / \z0});
所以这不是解决办法。
除了尴尬的“更改括号”之外,还有另一种解决方案:替换
\usepackage{tikz}
和
\usepackage{tikz, pgfplots}
或者甚至只是
\usepackage{pgfplots}
并且它可以工作。(不要忘记声明\pgfplotsset{compat=1.9}
)在获得一些 pgfplots 和 tikz 经验后,我建议使用具有适当轴环境的 pgfplots 来处理与函数图相关的任何内容。
但升级到 PGF 3 可能是最好的解决方案。
目前我找不到简单的升级方法。(使用 MikTeX 2.9)