如何确定表示二进制数据的分段常数函数

如何确定表示二进制数据的分段常数函数

我喜欢定义表示二进制数据的函数,但我陷入了这个相当简单的任务......我的 NWME 是:

\documentclass[tikz,border=3mm]{standalone}
\begin{document}
\pgfmathdeclarefunction{data}{2}{%
    \pgfmathifthenelse{(or(\x<#1, \x>#2))}{1}{0}%
                                }
   \begin{tikzpicture}
\draw [red,  thick] (0,0) --
    plot [domain= 0:80, samples=160, smooth]  (\x,data(20,40));
    \end{tikzpicture}
\end{document}

这个例子给出错误:“放弃这条路径。......” 似乎我不明白如何使用 pgfmath 来绘制这样一个简单的函数。

手工绘制这个数据函数很简单,但后来我喜欢给这个函数添加噪音。

答案1

在这里,我完成了优秀的 cmhuges 的回答,以展示如何使用密钥declare function

\documentclass[tikz,border=3mm]{standalone}
\begin{document}
\begin{tikzpicture}
  \tikzset{declare function={
      data(\a,\b,\x)=or(\x<\a, \x>\b)?1:0;
    }}
  \draw [red,thick] (0,0) -- plot [domain= 0:80,samples=160,smooth]  (\x,{data(20,40,\x)});
\end{tikzpicture}
\end{document}

答案2

pgfmath没问题,但你需要使用

\draw [red,  thick] plot [domain= 0:80, samples=160, smooth]  (\x,{data(20,40)});

注意{}中的(\x,{data(20,40)})。以下是完整的 MWE:

% arara: pdflatex
\documentclass[tikz,border=3mm]{standalone}
\begin{document}
\pgfmathdeclarefunction{data}{2}{%
    \pgfmathifthenelse{(or(\x<#1, \x>#2))}{1}{0}%
}
\begin{tikzpicture}
    \draw [red,  thick] plot [domain= 0:80, samples=160, smooth]  (\x,{data(20,40)});
\end{tikzpicture}
\end{document}

顺便说一句,你可能想探索pgfplots包(基于tikz),因为它简化了一些符号。

相关内容