用平面切割的三维曲线

用平面切割的三维曲线

我正在寻找一种方法来制作此类图片pgfplots。更准确地说,我需要制作 2 张图片:

  • 一个可以用垂直平面(具有一定的透明度)切割任何 3D 形状

第一张图片 或者 第二张图片

  • 一是绘制由同一平面切割的相同 3D 形状,但只在平面的一侧显示曲线。主要目标是查看曲线在平面上的 2D 限制/平面与曲线的交点。

第三张图片

有人有想法吗?

第一张图片

第二个

资料来源:

https://stackoverflow.com/questions/38342244/how-can-i-create-a-slice-of-a-surface-plot-to-create-a-line-matlab

https://www.mathworks.com/matlabcentral/answers/280132-how-to-cut-a-3d-plane-with-a-line

答案1

这可能不是你问题的答案。我无法回答这个问题的一个原因是我不懂 matlab。另一个原因是我觉得你一次问了几个问题。所以我专注于这个问题

可以向 pgfplots 制作的 3D 图添加一个平面吗?

答案是

是的 ...

...如果你愿意一步一步地做事。

我的回答的出发点是来自 pgfplots.net 的示例,作者:Stefan Kottwitz,我稍作修改。我做的最重要的改变是将边框从 改为15pt3.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}

在此处输入图片描述

相关内容