如何使用 TikZ 在它们之间绘制两个球体和一个圆锥体?

如何使用 TikZ 在它们之间绘制两个球体和一个圆锥体?

我想要得到这样的图像:在此处输入图片描述

两个球体与一个圆锥体相交,交点处的点也应该按照图中所示的方式突出显示。

我尝试过用tikz-3dplot文档在这里), 但我还没有找到任何解决交叉问题的方法。

在此先感谢您给予我的任何帮助。

答案1

也许这个 pgfplots 图就足够了。

\documentclass[tikz,border=3mm]{standalone}
\usepackage{pgfplots}
\usetikzlibrary{backgrounds,calc}
\pgfplotsset{compat=1.17}
\begin{document}
\begin{tikzpicture}[declare function={R=3;D=11;c=0.9;s=sqrt(1-c*c);
    L=D/2-c*R;f(\x)=R*cos(45*\x/L)-R*cos(45);}]
\begin{axis}[xmin=-D/2-R,xmax=D/2+R,hide axis,
    axis equal,view={0}{20}]
 \addplot3[surf,shader=interp,domain=-L:L,domain y=0:360,z buffer=sort,
 colormap={bb}{color=(blue) color=(blue!20)},opacity=0.8] 
 ({x*(1-0.1*sin(y))},
 {s*(1+0.1*f(x))*R*sin(y)+1.5*f(x)},
 {s*(1+0.1*f(x))*R*cos(y)});  
 \path (-D/2,0,0) coordinate(L)  (D/2,0,0) coordinate(R) 
  (1,0,0) coordinate (X) (0,0,0) coordinate (O);
\end{axis}
\begin{scope}[on background layer]
 \shade[ball color=blue!20] let \p1=($(X)-(O)$) in
  (L)  circle[radius=R*\x1];
 \shade[ball color=blue!20] let \p1=($(X)-(O)$) in
  (R)  circle[radius=R*\x1];
\end{scope} 
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容