我只想为点 x^2+y^2=<1 绘制函数 f(x,y)=x^2-y^2,如果可能的话,其余点的填充不透明度为 0.4。
\documentclass[border=10pt]{standalone}
\usepackage{pgfplots}
\usepackage{tikz}
\pgfplotsset{every axis/.style={scale only axis}}
\begin{document}
\begin{tikzpicture}
\begin{axis}[unit vector ratio*=1 1 1,
title={$f(x,y)=x^2-y^2$},
xlabel=$x$, ylabel=$y$,
xmin=-1, xmax=1,
ymin=-1, ymax=1,
zmin=-1, zmax=1,
3d box=complete,]
\addplot3[surf, domain=-1:1]
{x^2-y^2};
\end{axis}
\end{tikzpicture}
\end{document}
答案1
约束x^2+y^2\le 1
只是意味着您想要绘制单位圆内的值x
和函数y
。这建议切换到极坐标。
\documentclass[border=10pt]{standalone}
\usepackage{pgfplots}
\usepackage{tikz}
\pgfplotsset{every axis/.style={scale only axis}}
\begin{document}
\begin{tikzpicture}
\begin{axis}[unit vector ratio*=1 1 1,
title={$f(x,y)=x^2-y^2$},
xlabel=$x$, ylabel=$y$,
xmin=-1, xmax=1,
ymin=-1, ymax=1,
zmin=-1, zmax=1,
3d box=complete,samples=30]
\addplot3[surf,domain=0:sqrt(2),y domain=0:2*pi,opacity=0.4]
({x*cos(deg(y)},{x*sin(deg(y)},{(x*cos(deg(y))^2-(x*sin(deg(y))^2});
\addplot3[surf,domain=0:1,y domain=0:2*pi]
({x*cos(deg(y)},{x*sin(deg(y)},{(x*cos(deg(y))^2-(x*sin(deg(y))^2});
\end{axis}
\end{tikzpicture}
\end{document}
更新:为了完整性:没有极坐标。
\documentclass[border=10pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.15}
\usepackage{tikz}
\pgfplotsset{every axis/.style={scale only axis}}
\begin{document}
\begin{tikzpicture}
\begin{axis}[unit vector ratio*=1 1 1,
title={$f(x,y)=x^2-y^2$},
xlabel=$x$, ylabel=$y$,
xmin=-1, xmax=1,
ymin=-1, ymax=1,
zmin=-1, zmax=1,
3d box=complete,%point meta=sqrt(x^2+y^2)
]
\addplot3[surf, domain=-1:1, opacity=0.4]{x^2-y^2};
\addplot3[surf, domain=-1:1, point meta={ abs(x^2+y^2)>1 ? nan : z
}]{x^2-y^2};
\end{axis}
\end{tikzpicture}
\end{document}
在这两个例子中,你可以进行一些调整,samples
让情节变得更加流畅。