对数网格精度

对数网格精度

我正在尝试使用 PGFplots 绘制一个漂亮的三维图。它的 Z 轴应该是对数的。不幸的是,当值太小的时候,精度不足以得到平滑的曲线。希望这个 MWE 没问题……

谢谢你的提示。

\documentclass[a4paper,11pt]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage{ngerman}
\usepackage{pgfplots}
\begin{document}

\begin{tikzpicture}
    \begin{axis}[
        view={140}{20},
        grid=major,
%
        xlabel style={sloped},
        xlabel={Bildschirmdiagonale $h$},
        x dir=reverse,
%       
        ylabel style={sloped},
        ylabel={Entfernung $d$},
%
        zlabel={Raumwinkel $\Omega$},
        zmode=log,
    ]
        \addplot3[
            mesh,
            domain=20:60,
            y domain=2:20,
        ] { 4*pi/180*atan( ((12*x)*(22*x)) / (2*1000*y*sqrt(4*(1000*y)^2+(22*x)^2+(12*x)^2)) ) };
    \end{axis}
\end{tikzpicture}

\end{document}

答案1

有时,分析表达式会有所帮助。我所做​​的就是将分子和分母除以 10,这样(1000*y)^2平方根中的 就变成了(100*y)^2。这得到

\documentclass[a4paper,11pt]{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}

\begin{tikzpicture}
    \begin{axis}[
        view={140}{20},
        grid=major,
%
        xlabel style={sloped},
        xlabel={Bildschirmdiagonale $h$},
        x dir=reverse,
%       
        ylabel style={sloped},
        ylabel={Entfernung $d$},
%
        zlabel={Raumwinkel $\Omega$},
        zmode=log,
    ]
        \addplot3[
            mesh,
            domain=20:60,
            y domain=2:20,
        ] {0.1* 4*pi/180*atan( ((12*x)*(22*x)) /
        (2*1000*y*sqrt(4*(100*y)^2+(2.2*x)^2+(1.2*x)^2)) ) };
    \end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

如您所见,波动消失了。您可以继续使用,直到对结果满意为止。

相关内容