如何使用 tikz/pgf 在表面绘制路径?

如何使用 tikz/pgf 在表面绘制路径?

是否可以在像 Callen 的图那样的表面上绘制“随机”路径?tikz 上有可以执行此操作的库吗?

就像用 tikz-3dplot 绘制一个曲面,并在这个曲面上绘制一条线或一条曲线。

例子: 在此处输入图片描述

答案1

\documentclass[tikz,border=1 cm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\usepgfplotslibrary{patchplots} 
\begin{document}
\begin{tikzpicture}[declare function={%
f(\x,\y)=100-(\x-20)^2-(\y)^2;
rndx(\t,\random)=21+\random+2*sin(720*\t)+\random;
rndy(\t,\random)=9.3-7*\t;
}]
\begin{axis}[
  view={50}{30},
  colormap/cool,
  axis lines=center,
  xmin=0, xmax=50,
  ymin=0, ymax=30,
  zmin=0, zmax=120,
  y dir=reverse,
  ticks=none,
  ]
\addplot3[
    mesh, patch refines=1,
    domain=9:31, samples=17,
    domain y=0:10, samples y=11,
    z filter/.expression={z<-15?nan:z}, unbounded coords=jump,
    ultra thin,
] {(f(x,y)};
\addplot3[densely dashed, domain=20:10,samples y=1, smooth]  {(f(x,0)};
\addplot3[domain=20:30, samples y=1, smooth]  {(f(x,0)};
\addplot3[densely dashed, variable=\t, domain=-90:-30, smooth, samples y=1]  ({10*sin(t)+20}, {10*cos(t)}, 0);
\addplot3[variable=\t, domain=-30:90, smooth, samples y=1]  ({10*sin(t)+20}, {10*cos(t)}, 0);
\addplot3[variable=\t, domain=0:10,  samples y=1]  ({20+t*sin(-30)},{t*cos(-30)},{f({20+t*sin(-30)},{t*cos(-30)})});
\addplot3[red,     variable=\t, domain=0:1, samples=30,  samples y=1, point meta=rnd]  ( {rndx(t,meta)}, {rndy(t,meta)}, {f({rndx(t,meta)}, {rndy(t,meta)})} );
\addplot3[magenta, variable=\t, domain=0:1, samples=30,  samples y=1, point meta=rnd]  ( {rndx(t,meta)}, {rndy(t,meta)}, {f({rndx(t,meta)}, {rndy(t,meta)})} );
\addplot3[blue,    variable=\t, domain=0:1, samples=30,  samples y=1, point meta=rnd]  ( {rndx(t,meta)}, {rndy(t,meta)}, {f({rndx(t,meta)}, {rndy(t,meta)})} );
\end{axis}
\end{tikzpicture}
\end{document}

具有三条随机路径的抛物面

答案2

一些初步步骤...如果有人已经看到是否有可能朝这个方向发展,请注明。

\documentclass[tikz,border=3.14mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}
\begin{tikzpicture}[scale=2,declare function={f(\x,\y)=-1*((\x*\x)+((\y*\y+100)));}]
\begin{axis}[
    title={Título qualquer}, 
    xlabel=$\mu_2$, ylabel=$\mu_1$,
    small,
    x dir=reverse
]
\addplot3[
    surf,
    domain=-40:40,
    domain y=-30:30,
] 
    {(f(x,y)};
\addplot3[mesh,domain=0:10,color=green] ({2*(x+10)},{x+10}, {(f(2*(x+10),x+10)});
\addplot3[mesh,domain=0:10,color=black] ({2*(10-x)},{x}, {(f(2*(10-x),x)});
\end{axis}
\end{tikzpicture}
\end{document}

结果是: 在此处输入图片描述

现在的问题是让表面看起来像那样,并使用 Anton Mn 在评论中指出的内容。

相关内容