我正在尝试使用 pgfplots 在 [-1,1]x[-1,1] 上绘制 Heaviside 函数。当 x+y > 1/2 时,该函数的值为 1,否则为 0(因此该线不与 x 轴或 y 轴对齐)。问题是绘图显示阶梯状,因此函数在线附近看起来不清晰。这是我目前在 MWE 中得到的结果:
\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\pgfmathdeclarefunction{Heaviside}{2}{%
\pgfmathparse{#1+#2<-0.5 ? 0 : 1}%
}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot3[surf, domain=-1:1, y domain=-1:1, samples=20]
{Heaviside(x,y)};
\end{axis}
\end{tikzpicture}
\end{document}
产生
答案1
您的绘图没有任何问题。解决在二维中绘制的一维函数的锯齿状问题的方法是增加samples
。您可以在此处执行相同操作,但很快就会遇到计算机限制。
解决方案不能涉及函数,因为需要对大量点进行评估才能以平滑的方式显示不连续性。我看到的唯一解决方案是利用您知道不连续性在哪里的事实,然后使用如下图所示添加不同的区域patch
:
\documentclass[tikz, border=1cm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\usepgfplotslibrary{patchplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot3[patch, shader=faceted, faceted color=black] coordinates {(-1,-1,0) (0.5,-1,0) (-1,0.5,0)};
\addplot3[patch, shader=faceted, patch type=polygon, vertex count=5, faceted color=black, forget plot] coordinates { (-1,0.5,1) (0.5,-1,1) (1,-1,1) (1,1,1) (-1,1,1)};
%\addplot3[patch, shader=interp, patch type=rectangle, patch refines=3, forget plot] coordinates { (-1,0.5,0) (0.5,-1,0) (0.5,-1,1) (-1,0.5,1)};
%\addplot3[patch, mesh, patch type=rectangle, black, forget plot] coordinates { (-1,0.5,0) (0.5,-1,0) (0.5,-1,1) (-1,0.5,1)};
\end{axis}
\end{tikzpicture}
\end{document}