两个曲面的交点

两个曲面的交点

我正在尝试创建一个有符号距离函数 S(x),其中我想将 S(x) = 0 与平面相交。问题不在于将两个函数放入一个图中,而是让两个函数在视觉上相互相交,即最近的表面位于前景中。目前,我有类似的东西:

\documentclass{standalone}
\usepackage{pgfplots}
\begin{document}
  \begin{tikzpicture}
    \begin{axis}[grid=major]
      \addplot3[surf,domain=-10:10,samples=40]
      {-sqrt((x-0)^2/1 + (y-0)^2/1) + 5};
      \addplot3[surf,domain=-10:10,samples=2,opacity=0.5]
      {0*x+0*y};
    \end{axis}
  \end{tikzpicture}  
\end{document}

这使: 在此处输入图片描述

如您所见,平面仅与函数重叠,而不相交。如何做到这一点?附加问题:是否可以在交叉点处在 3d surf 图上创建轮廓?

答案1

不幸的是,这不能自动完成,因为pgfplots无法在不同的\addplot命令之间进行 z 缓冲。

对于这个具体的应用,你可以“手动”构建情节:

首先,绘制圆锥体低于 0 的部分,然后绘制平面和圆,然后绘制圆锥体高于 0 的部分。

为此我使用了极坐标系,因为它使极坐标函数的输入更容易:

\documentclass[border=5mm]{standalone}
\usepackage{pgfplots}
\begin{document}
  \begin{tikzpicture}
    \begin{axis}[grid=major,view={20}{40},z buffer=sort, data cs=polar]
      \addplot3 [surf, domain=0:360, domain y=5:10,samples=30, samples y=10]
      {-y+5};
      \addplot3 [data cs=cart,surf,domain=-10:10,samples=2, opacity=0.5]
      {0};
      \addplot3 [domain=0:360, samples y=0, samples=30, thick, z buffer=auto]
      (x,5.1,0);
      \addplot3 [surf,domain=0:360, domain y=0:5,samples=30, samples y=10]
      {-y+5};
    \end{axis}
  \end{tikzpicture}  
\end{document}

相关内容