有没有办法生成类似于 3B1B 的流体流动图?

有没有办法生成类似于 3B1B 的流体流动图?

我刚刚看到3 Blue 1 Brown 的视频关于散度和旋度,我发现他关于流体流动的图表非常漂亮,尤其是作为一篇文章或一本书。现在,我熟悉了 TikZ 和 PGFPlots,我知道如何制作矢量图,甚至 2D 彩色图;但我真正期待的是让这些线像流体粒子一样移动,如果不可能的话,最好在 LaTeX 中使用一些软件包或其他方式来实现(图片与我想要的类似)。

3B1B 的流体流动

答案1

这试图解决从原则上如何生成此类图的问题。我没有注意精确复制您的(非常漂亮!)屏幕截图。以下是我得到的。

\documentclass[tikz,border=3.14mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}
\begin{tikzpicture}
\begin{axis}[axis equal,hide axis,trig format=rad,point meta min=0.4,point meta max=1.8,
 axis background/.style={fill=black}]
    \foreach \Y in {0.2,0.4,...,1}
    {\foreach \X in {1,1.2,1.4,1.6}
    {\edef\temp{\noexpand\pgfmathtruncatemacro{\noexpand\Samples}{20*\X}
    \noexpand\pgfmathsetmacro{\noexpand\ArrowScale}{0.2*\X}
    \noexpand\addplot [samples=\noexpand\Samples, domain=0:2*pi,-stealth,point meta=\X,colormap/hot,
        variable=\noexpand\t,opacity=\Y,quiver={
            u={-sin(t)},
            v={cos(t)},
            scale arrows=\noexpand\ArrowScale,colored,
        },
    ] ( {\X*cos(t)*(1+0.2*sin(4*t))*(1+0.1*sin(2*pi*\Y))}, {\X*2*sin(t)*(1+0.1*sin(2*pi*\Y))} );}
    \temp}}
\end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

那些也生活在洞穴中的用户必然会熟悉这种参数化。

相关内容