我正在寻找一种方法来制作此类图片pgfplots
。更准确地说,我需要制作 2 张图片:
- 一个可以用垂直平面(具有一定的透明度)切割任何 3D 形状
- 一是绘制由同一平面切割的相同 3D 形状,但只在平面的一侧显示曲线。主要目标是查看曲线在平面上的 2D 限制/平面与曲线的交点。
有人有想法吗?
资料来源:
https://www.mathworks.com/matlabcentral/answers/280132-how-to-cut-a-3d-plane-with-a-line
答案1
这可能不是你问题的答案。我无法回答这个问题的一个原因是我不懂 matlab。另一个原因是我觉得你一次问了几个问题。所以我专注于这个问题
可以向 pgfplots 制作的 3D 图添加一个平面吗?
答案是
是的 ...
...如果你愿意一步一步地做事。
我的回答的出发点是来自 pgfplots.net 的示例,作者:Stefan Kottwitz,我稍作修改。我做的最重要的改变是将边框从 改为15pt
。3.14mm
然后我更改了一个符号,用来declare function
简化一些事情,并且(我差点忘了)还添加了一个平面。
\documentclass[border=3.14mm]{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{colormaps,fillbetween}
\pgfplotsset{compat=1.16}
\begin{document}
\begin{tikzpicture}[declare function={f(\x,\y)=8-(\x*\x+\y*\y)/4;}]
\pgfdeclarelayer{pre main}
\pgfsetlayers{pre main,main}
\begin{axis}[
hide axis,
domain = -4:4,
zmax = 12,
colormap/bone
]
\begin{pgfonlayer}{pre main}
\addplot3 [surf] {f(x,y)};
\end{pgfonlayer}
\addplot3 [name path = xline, draw = none] (x,-4,0);
\addplot3 [name path = yline, draw = none] (4,y,0);
\addplot3 [name path = xcurve, y domain = 0:0, draw = none]
(x, -4, {f(x,4)});
\addplot3 [name path = ycurve, y domain = 0:0, draw = none]
(4, x, {f(x,4)});
\addplot [left color = black, right color = black!50, draw = none]
fill between[of = xcurve and xline];
\addplot [left color = black!50, right color = black, draw = none]
fill between[of = yline and ycurve, reverse = true];
\fill[gray!20,opacity=0.314] plot[variable=\x,smooth,samples=25,domain=-4:2] (0,\x,{f(\x,0)})
to[out=0,in=162,tension=1.2] (0,4,{4.78})
-- (0,4,12) -- (0,-4,12) -- cycle;
\end{axis}
\end{tikzpicture}
\end{document}