我有兴趣使用 TikZ 或 pgfplots 与动画包一起创建一个图。
该图应由沿轴移动的方波脉冲组成z
。当它移动时,它应失去“方波性”并变成更平滑的脉冲(见图)。
我怀疑可以通过两种方式实现:
\it
定义一个会相应变化的时间脉冲函数( )。- 绘制一个带有适当装饰的 TikZ 路径,该路径会随着参数 (
\it
) 而改变。
这怎么可能呢?
我的第一次尝试:
\documentclass{article}
\usepackage{tikz,pgfplots}
\usepackage[poster=first, controls, buttonsize=0.8em]{animate}
\begin{document}
\begin{animateinline}{10}
\multiframe{11}{it=0+1}{
\begin{tikzpicture}
\begin{axis} [
xmax = 15,
ymax = 4,
]
\addplot[domain = 0:20] coordinates {(0,0) (\it+1,0) (\it+1,1) (\it+2,1) (\it+2,0) (\it+5,0)};
\end{axis}
\end{tikzpicture}
}
\end{animateinline}%
\end{document}
答案1
这里有一个建议:取正弦曲线的根。
\documentclass{article}
\usepackage[poster=first, controls, buttonsize=0.8em]{animate}
\usepackage{tikz}
\tikzset{declare function={f(\x,\y)=pow(sin(180*(\x-\y)),1/(12-\y));}}
\newcommand{\PulseOne}[1]{(0,0) --(#1,0) --
plot[domain=#1:{#1+1},variable=\x] ({\x},{f(\x,#1)}) -- ({#1+1},0) --(12,0)}
\begin{document}
\begin{animateinline}{10}
\multiframe{11}{it=0+1}{%
\begin{tikzpicture}
\draw[-latex](0,0)--(12.5,0) node[below]{$z$};
\draw[blue,ultra thick] \PulseOne{\it};
\end{tikzpicture}}
\end{animateinline}%
\end{document}
我不确定方形消失的速度有多快,但你可以用 f 中的指数来玩,即调整 的第二个参数f
。下面是一个例子
\tikzset{declare function={f(\x,\y)=pow(sin(180*(\x-\y)),1/(23-2*\y));}}
只是为了好玩
\tikzset{declare function={f(\x,\y)=0.5*pow(sin(180*(\x-\y)),1/(1+(\y-11)^2));}}
顺便说一句,为了创建动画 gif 图像,我使用代码由未来的奥斯卡奖得主@AlexG 创作。