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}  

두 표면의 패치 플롯

관련 정보