我正在用 LaTeX 制作 3D 图形。到目前为止,我得到的是这张图片
在背景中,我们可以感觉到一个小的D_g
;蓝色域应该用它表示。红色表面应该只是存在于蓝色域上的一个函数,所以我正在寻找的是,就像在 2D 情况下一样,是否可以在蓝色表面上书写。
如果不是这种情况,是否有一种简单的方法可以用经典的 TikZ 方式重建这样的图形?除了蓝色域之外,这里重要的是红色表面在某些边界附近必须陡峭。
如何确定最佳视角?只能通过反复试验和经验来决定吗?
再说一遍:我只需要对图像中的情况进行定性描述。甚至,轴并不重要。我很感激任何评论。
编辑:另外一个问题:优化 3D 彩色图形以实现黑白输出的最佳方法是什么?
代码
\documentclass{minimal}
\usepackage{tikz}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[view={60}{45}]
\addplot3[surf, samples=30,domain=0:1, y domain=0:1,opacity=1,
color=blue]
(x,{y*((1/4)*cos(deg(2*pi*x))+1-x/2)},0);
\node (A) at (0,1,1) [above] {$D_g$};
\addplot3[surf, domain=0:1, y domain=0:1,color=red,opacity=0.5]
(x,{y*((1/4)*cos(deg(2*pi*x))+1-x/2)},{(1+sqrt(y)-sqrt(1-y))});
\end{axis}
\end{tikzpicture}
\end{document}
答案1
我无法从您的问题中判断您是否需要自动放置这些标签。此外,下面的代码纠正了第二条\addplot3
命令的 z 坐标规范的两个小问题,这些问题阻止了您的 MWE 编译:缺少左括号和错误>
字符。
axis cs
如果可以接受手动定位,则可以使用坐标系说明符将节点放置在轴上的任意位置(参见pgfplots
手动的),如下所示:
\documentclass{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[view={60}{45}]
\addplot3[surf, samples=30,domain=0:1, y domain=0:1,opacity=1,color=blue]
(x,{y*((1/4)*cos(deg(2*pi*x))+1-x/2)},0);
\node (A) at (axis cs:0.8,0.8,0) {$D_g$};
\addplot3[surf, domain=0:1, y domain=0:1,color=red,opacity=0.5]
(x,{y*((1/4)*cos(deg(2*pi*x))+1-x/2)},{(1+sqrt(y)-sqrt(1-y))});
\end{axis}
\end{tikzpicture}
\end{document}
您可以修改坐标0.8,0.8,0
以将标签放置在您想要的任何位置。
这最好的视角是主观的,如果绘制不同的函数,视角就会改变,所以恐怕这里只能采用反复试验的方法。
对于黑白输出,您可以使用环境选项colormap/blackwhite
。axis
还可以将color=<value>
每个图的选项更改为灰色的某种变体,例如gray
或gray!30
。