解释

解释

我想使用 tikz 绘制 Hermite-Gaussian 模式,真正需要的是一个模糊的圆圈和模糊的线条,将其叠加分成不同的部分,如下图所示: 在此处输入图片描述

我甚至无法找到完成第一个任务的正确方法,因为到目前为止我发现的所有模糊选项都不够平滑。

答案1

利用功能性着色,人们可以完全控制输出 --- 只要知道正确的数学公式。

\documentclass[tikz]{standalone}    
\pgfdeclarefunctionalshading{Hermite-Gaussian modes}{\pgfpoint{-25bp}{-25bp}}{\pgfpoint{25bp}{25bp}}{}{
    10 atan sin 1000 mul cos 1 add
    exch
    10 atan sin 1000 mul cos 1 add
    mul 4 div
    dup dup
}
\begin{document}
    \tikz\path[shading=Hermite-Gaussian modes](-10,-10)rectangle(10,10);
\end{document}

解释

也可以检查 TiZ 的手册109.2.3 一般(功能)阴影和 PDF 标准8.7.4.5.2 类型 1(基于功能)阴影附件 B 第 4 类函数中的运算符

一些技术评论:

画布大小为 50bp x 50bp,坐标范围为 (-25bp, -25bp) 至 (25bp, 25bp),即输入为 -25 至 25 之间的两个实数,函数输出应为 0 至 1 之间的三个数字,黑色为 (0,0,0),红色为 (1,0,0),白色为 (1,1,1)。

我建议应该通过官方的渲染器。由官方的我的意思是 Adob​​e Acrobat Reader DC,以前称为 Adob​​e Reader。碰巧的是非官方PDF 阅读器倾向于禁用 PDF 的一些不安全的功能,有时功能阴影就是其中之一。

回到我的代码,它只是一个函数:

在哪里

函数看起来像什么时候很小,并且当很大。

dup在代码中添加了两个,这样当它完成灰度计算时,它将复制结果,因此 R、G、B 通道将获得相同的结果。(在极少数情况下,如果您的函数仅输出一个实数,则 PDF 渲染器会将其视为灰度。但是,为了稳定性和可移植性,我应该得到dup结果。)

答案2

阅读 tikz 和 pgf 手册后我制作了这个: 在此处输入图片描述

我不太喜欢它,还可以,但它们可以看起来更好。我真的很感激一些提示。也许唯一的方法是真正绘制二维 Hermite-Gauss 强度分布。这是代码:

\documentclass{standalone}
\usepackage{ifthen}
\usepackage{tikz}
\usetikzlibrary{fadings}


\tikzfading[name=fade out,
inner color=transparent!0,
outer color=transparent!100]

\tikzfading[name=middle,
top color=transparent!100,
bottom color=transparent!100,
middle color=transparent!0]

\tikzfading[name=middle rot,
right color=transparent!100,
left color=transparent!100,
middle color=transparent!0]

\begin{document}

\begin{tikzpicture}
\fill[black] (0,0) rectangle (6,6);

\fill[white!99!black,path fading=fade out] (2,4) circle (1cm);

\fill[white!99!black,path fading=fade out] (2,2) circle (1cm);

\fill[white!0!black,path fading=middle] (0,1.8) rectangle +(4,0.4);


\fill[white!99!black,path fading=fade out] (4,4) circle (1cm);

\fill[white!0!black,path fading=middle] (3,3.8) rectangle +(2,0.4);
\fill[white!0!black,path fading=middle rot] (3.8,3) rectangle +(0.4,2);

\end{tikzpicture}
\end{document}

答案3

经过反复尝试,pgfplots我找到了一个“简单”的解决方案。虽然编译需要花费相当长的时间,但结果和简单的输入弥补了这一点: 在此处输入图片描述

以下是 MWE 以及实际的 3D 图: 在此处输入图片描述

\documentclass[]{standalone}
\usepackage{tikz}
\usepackage{pgfplots}

\pgfplotsset{myaxis/.style={%
        view={0}{90}, 
        % view={60}{60}, % enable for 3D view
        samples=50,
        hide axis,
        colormap={bw}{gray(0cm)=(0); gray(0.1cm)=(0.15) ; gray(1cm)=(1)},
        width=8cm,
        height=8cm}}
\pgfplotsset{compat=1.5}


\begin{document}


\begin{tikzpicture}
\begin{axis}[myaxis]
\addplot3[surf,shader=interp,domain=-20:20] {(exp(-x^2/100))^2*(exp(-y^2/100))^2};
\end{axis}

\begin{axis}[xshift=6cm,myaxis]
\addplot3[surf,shader=interp,domain=-20:20] {(0.28*x*exp(-x^2/100))^2*(exp(-y^2/100))^2};
\end{axis}

\begin{axis}[yshift=-6cm,myaxis]
\addplot3[surf,shader=interp,domain=-20:20] {(exp(-x^2/100))^2*(0.28*y*exp(-y^2/100))^2};
\end{axis}


\begin{axis}[myaxis,xshift=6cm,yshift=-6cm]
\addplot3[surf,shader=interp,domain=-20:20] {(0.28*x*exp(-x^2/100))^2*(0.28*y*exp(-y^2/100))^2};
\end{axis}


\begin{axis}[myaxis,xshift=12cm]
\addplot3[surf,shader=interp,domain=-22:22] {(-2 + 0.0784*x^2)*exp(-x^2/100))^2*(exp(-y^2/100))^2};
\end{axis}

\begin{axis}[myaxis,yshift=-12cm]
\addplot3[surf,shader=interp,domain=-22:22] {exp(-x^2/100))^2*((-2 + 0.0784*y^2)*exp(-y^2/100))^2};
\end{axis}

\begin{axis}[myaxis,xshift=12cm,yshift=-6cm]
\addplot3[surf,shader=interp,domain=-22:22] {((-2 + 0.0784*x^2)*exp(-x^2/100))^2*(0.28*y*exp(-y^2/100))^2};
\end{axis}

\begin{axis}[myaxis,xshift=6cm,yshift=-12cm]
\addplot3[surf,shader=interp,domain=-22:22] {((0.28*x)*exp(-x^2/100))^2*((-2 + 0.0784*y^2)*exp(-y^2/100))^2};
\end{axis}

\begin{axis}[myaxis,xshift=12cm,yshift=-12cm]
\addplot3[surf,shader=interp,domain=-22:22] {((-2 + 0.0784*x^2)*exp(-x^2/100))^2*((-2 + 0.0784*y^2)*exp(-y^2/100))^2};
\end{axis}

\end{tikzpicture}

\end{document}

如果有人对绘制比这里提供的更高的模式感兴趣,你只需要更高阶的 Hermite 多项式,可以在这里

相关内容