내 질문을 보완하기 위해 f를 함수 f(x,y)=x^2+y^2로 둡니다. 이제 함수 f: X -> R만 플롯하고 싶습니다. 여기서 X={(x,y) | 2*x^2+y^2<1} 하지만 함수의 내부 부분만 그려지도록 도메인을 제한하고 싶습니다. 내 코드는 다음과 같습니다.
\begin{tikzpicture}[]
\begin{axis}[axis lines=center,
axis on top,
xtick=\empty,
ytick=\empty,
ztick=\empty,
xrange=-2:2,
yrange=-2:2
]
% function
\addplot3[domain=-2:2,y domain=-2:2,colormap/viridis,surf,opacity=0.5]
%shader=interp für optional Linien weg
{x^2+y^2};
% Line on the function
\addplot3[color=black,
samples=40,
domain=0:2*pi,
line width=1.0pt]
({2*cos(deg(x))},
{sin(deg(x))},
{(2*cos(deg(x)))^2+sin(deg(x))^2});
% Line on bottom
\addplot3[dashed,
samples=40,
domain=0:2*pi]
({2*cos(deg(x))},
{sin(deg(x))},
{0});
\end{axis}
\end{tikzpicture}
결과 이미지는 다음과 같습니다
이제 검은색 선 안쪽의 "내부" 부분만 그려지도록 하려면 어떻게 해야 합니까? (나쁜 영어로 죄송합니다. 저는 독일인입니다)
답변1
환영! 저는 그냥 극좌표를 사용하겠습니다.
\documentclass[tikz,border=3mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}
\begin{tikzpicture}[]
\begin{axis}[axis lines=center,
axis on top,
xtick=\empty,
ytick=\empty,
ztick=\empty,
xrange=-2:2,
yrange=-2:2
]
\begin{scope}
\addplot3[domain=0:1,y domain=0:2*pi,colormap/viridis,surf,opacity=0.5,
samples=5,samples y=40,
] %-0.2 just to avoid gaps
%shader=interp für optional Linien weg
({2*x*cos(deg(y))},{x*sin(deg(y))},{(2*x*cos(deg(y)))^2+(x*sin(deg(y)))^2});
\end{scope}
% Line on the function
\addplot3[color=black,
samples=40,
domain=0:2*pi,
line width=1.0pt]
({2*cos(deg(x))},
{sin(deg(x))},
{(2*cos(deg(x)))^2+(sin(deg(x)))^2});
% Line on bottom
\addplot3[dashed,
samples=40,
domain=0:2*pi,smooth]
({2*cos(deg(x))},
{sin(deg(x))},
{0});
\end{axis}
\end{tikzpicture}
\end{document}
너~할 수 있다귀하의 경우 /pgfplots/restrict expr to domain
와 같이 데카르트 좌표 사용을 고수하십시오 . restrict expr to domain={x^2/4+y^2}{0:1}
그런데 윤곽선이 {(x,y) | 2*x^2+y^2<1}
. . {(x,y) | x^2/4+y^2<1}
그러나 내 경험에 따르면 경계가 "픽셀화"되기 때문에 이러한 유형의 플롯에서는 그다지 좋은 결과를 얻지 못합니다.