pgfplots:兩個半平面(哥德爾邏輯圖)

pgfplots:兩個半平面(哥德爾邏輯圖)


(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}  

兩個曲面的補丁圖

相關內容