我想要绘制
(x <= y) * (1) + (x > y) * (y)
应该给出两个三角形区域的函数。
(1)第一次尝试
\addplot3[surf, domain=0:1, domain y=0:1
]{ (x <= y) * (1) + (x > y) * (y) };
我得到了一个糟糕的结果,因为这些区域是相连的。
(2)因此我将其分成两个功能并使用restrict z to domain=<..>
。
但是现在我得到了边缘处的锯齿形并且到第二个区域的原点有间隙。
应该使用哪些设置?
暗示:很明显如何使用直线并在这里填充,我想弄清楚如何使用这里显示的函数和 pgfplots。
\documentclass[border=10pt, tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest, width=7cm,
colormap = {whiteblack}{color(0cm) = (white); color(1cm) = (black)},
every axis plot post/.append style={cyan},
%fill=cyan,
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[title={Bad - areas connected}, xtick={0,0.5,1}, ytick={0,0.5,1}, ztick={0,0.5,1},
xlabel=$p$, ylabel=$q$, zmin=0, zmax=1, small]
\addplot3[surf, domain=0:1, domain y=0:1
]{ (x <= y) * (1) + (x > y) * (y) };
\end{axis}
\end{tikzpicture}
\begin{tikzpicture}
\begin{axis}[title={Better but not perfect: gaps and zigzags}, xtick={0,0.5,1}, ytick={0,0.5,1}, ztick={0,0.5,1},
xlabel=$p$, ylabel=$q$, zmin=0, zmax=1, small]
\addplot3[surf, cyan,
domain=0:1, domain y=0:1,
restrict z to domain=1:1,
]{ (x <= y ) * (1) };
\addplot3[surf,
domain=0:1, domain y=0:1,
restrict z to domain=0.000001:1,% not good
]{ (x > y) * (y) };
\end{axis}
\end{tikzpicture}
\end{document}
答案1
这并不完全是 OP 所寻找的,但出于优雅的原因,我展示了补丁图:
\documentclass[border=0.5 cm, tikz]{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot3[patch, patch refines=8, cyan] coordinates {(0,0,1) (1,1,1) (0,1,1) };
\addplot3[patch, patch refines=8, cyan] coordinates {(0,0,0) (1,1,1) (1,0,0) };
\end{axis}
\end{tikzpicture}
\end{document}