我有一个非常简单的函数可以制作 3D 图形。该函数定义如下:
使用以下代码绘制这个图并不是什么大问题:
\documentclass[border=10pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.8}
\usepackage{amsmath}
\begin{document}
\pgfplotsset{
compat=1.8,
colormap={whitered}{color(0cm)=(white); color(1cm)=(orange!75!red)}
}
\begin{tikzpicture}
\begin{axis}[
colormap name=whitered,
3d box,
width=15cm,
view={25}{25},
enlargelimits=false,
grid=major,
domain=-2:6,
y domain=1:9,
zmin=0,zmax=7,
samples=21,
xlabel=$x$,
ylabel=$y$,
zlabel=$z$,
colorbar,
colorbar style={
at={(1,0)},
anchor=south west,
height=0.1*\pgfkeysvalueof{/pgfplots/parent axis height}
}
]
\addplot3 [surf]
{sqrt((x-2)^2+(y-5)^2)};
\addplot3 [contour gnuplot = {number=14, labels={false},
draw color = black}, samples = 21, ]
{sqrt((x-2)^2+(y-5)^2)};
\addplot3 [contour gnuplot = {number=14, labels={false}, draw color=black},
samples=21,z filter/.code={\def\pgfmathresult{20}}]
{sqrt((x-2)^2+(y-5)^2)};
\end{axis}
\end{tikzpicture}
\end{document}
这将产生以下输出:
现在我的问题:我的域定义如下:
是否有可能将图限制在给定域内?我是否需要采用完全不同的方法,例如除笛卡尔坐标系之外的其他坐标系或类似方法?
答案1
部分解决方案(为了简化,我跳过了轮廓线图,让其作为勇敢者的练习):
使用三向 if(boolean)?(value if true):(value if false)
和特殊的“数字” NaN
(非数字),并使用选项,unbounded coords=jump
您可以执行以下操作:
\addplot3 [surf, unbounded coords=jump]
{ (x-2)^2+(y-5)^2<9 ? sqrt((x-2)^2+(y-5)^2) : NaN };
你有
使用你的边界 -- (x-1)^2+y^2<9
(它不是以椭圆体的中心为中心)这有点奇怪:
...但我认为没关系,注意它改变了x
和y
比例,如果你修复它们: