如何获得沃丁顿景观?

如何获得沃丁顿景观?

这个想法是制作一个这样的情节

在此处输入图片描述 来源:http://figshare.com/articles/_Waddington_s_8220_Epigenetic_Landscape_8221_/620879

但前面只有 2 个井,而不是 4 个。而且颜色也不重要。

这是我目前所拥有的:

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat = newest}
\begin{document}

\pgfplotsset{width=\textwidth}
\begin{tikzpicture}
\begin{axis}[domain=-6:40,domain y=0:12,view={-80}{40},colormap/blackwhite, width=\textwidth]
\addplot3[surf,shader=faceted interp]({x},{y},{exp(-0.07*x)*cos(deg(y)) + (exp((0.15*x)-6.5) * (1+cos(deg(y)/2)))});
\fill[ball color=orange] (axis cs:30,6,0.5) circle [radius=0.2cm];
% 
\end{axis}
\end{tikzpicture}

\end{document}

这使

在此处输入图片描述

如你所见。我已经很接近了。非常感谢@percusse 最初的帮助!

然而,一些小事情仍然存在,例如

  • 侧面可以更圆一些,就像示意图中那样
  • “大”山不应该是凹的,而应该是凸的,例如“肿胀的”
  • 后部曲线可以更陡一些

代码中的想法是在前面定义一个参数曲线exp(-0.07*x)*cos(deg(y)),在后面定义一个权重更大的第二条参数曲线(exp((0.15*x)-6.5) * (1+cos(deg(y)/2)))

任何关于如何完成最后 20% 的指点都将不胜感激:)

编辑 2014 年 11 月 6 日

以下是使用下面的@TonioElGringo 评论的更新。

在此处输入图片描述

由。。。生产

\begin{tikzpicture}
\begin{axis}[domain=0:1,domain y=0:1,view={-10}{50},colormap/jet, width=\textwidth]
\addplot3[surf,shader=faceted interp]({x},{y},{1-((1-y)*(exp(-80*(x-1/3)^2)+exp(-80*(x-2/3)^2))/2 + y*exp(-60*(x-1/2)^2)/5)});
\end{axis}
\end{tikzpicture}

小编辑

我只是附加了一个包含 50 个样本的版本,以显示它在更“平滑”时的样子。

我刚刚添加了, samples=50addplot 选项。小心,这可能需要您调整 tex 的内存设置,因为需要进行许多计算。

在此处输入图片描述

答案1

您需要的是不同类型的函数,如下所示:

f(x,y) = 1 - [(1-y)*(exp(-a1*(x-1/3)^2)+exp(-a1*(x-2/3)^2)) * l1 
             +   y *(exp(-a2*(x-1/2)^2)) * l2]

此函数只是一对高斯函数y=0与另一个高斯函数之间的线性插值y=1之间的线性插值。参数a1a2l1l2允许您改变高斯的大小。

使用以下代码

\begin{tikzpicture}
\begin{axis}[domain=0:1,domain y=0:1,view={-10}{50},colormap/jet, width=\textwidth]
\addplot3[surf,shader=faceted interp, samples=50]({x},{y},{1-((1-y)*(exp(-80*(x-1/3)^2)+exp(-80*(x-2/3)^2))/2 + y*exp(-60*(x-1/2)^2)/5)});
\end{axis}
\end{tikzpicture}

我们得到

生成的表面

相关内容