具有笛卡尔值的极坐标图,集成 arctan2 计算中缺乏角度精度?

具有笛卡尔值的极坐标图,集成 arctan2 计算中缺乏角度精度?

我注意到,对于接近 0° 和 180° 的值,如果从笛卡尔数据导入这些值,角度值会发生显著变化。这里是代码(使用数据 cs=cart 在极坐标中绘制笛卡尔坐标,并使用 arctan2 Matlab 函数在极坐标中获得相同的坐标)和插图:

\documentclass{minimal}
\usepackage{eurosym}
\usepackage{pgfplots}
\usepackage{fp}

\begin{document}

\pgfplotsset{compat=newest} 
\usepgfplotslibrary{polar}
\centering
\begin{tikzpicture}
\begin{polaraxis}[
    visualization depends on=x \as \pgfplotspointx,
    nodes near coords,
    every node near coord/.style={
        %font=\small,
        rotate=\pgfplotspointx,
        append after command={
            node [
                anchor=south,
                %font=\small,
                rotate=\pgfplotspointx,
                shift={(axis direction cs:0,(12.75-\pgfplotspointmeta))}
            ] {$\pgfmathprintnumber{\pgfplotspointx}^\circ$}
        }
    },
width=7\textwidth,
xmin=-2,xmax=1, ymin=12, ymax=16,
title=artctan2 precision problem,
grid=both,
minor x tick num={4}, 
minor y tick num={1},
]
\addplot+[polar comb, data cs=cart, mark size=1, mark=asterisk, color=blue, dashed] table {
14.370195   -0.304948
14.370195   -0.304948

}; 
\addplot+[polar comb, mark size=1, mark=asterisk, color=green, solid] table {-1.215683667   14.37343027
-1.215683667    14.37343027
}; 
\end{polaraxis}
\end{tikzpicture}


\end{document}

在此处输入图片描述

有谁遇到过这个问题吗?

先感谢您。

答案1

这需要在 中进行修复pgfplots,我接受该问题作为错误报告。


细节:

该例程pgfplotsmathcarttopol并未使用atan2- 相反,它“手动”计算角度,显然精度较低。

添加

\pgfplotsmathcarttopol{14.370195}{-0.304948}\angle\radius

angle = \angle; radius = \radius

看看这确实是根本原因。

要做的步骤是编写atan2PGF 浮点单元的实现(或适配器)并在中使用它pgfplotsmathcarttopol

我会将待办事项列表记下来pgfplots(无需提交单独的错误报告)。

答案2

使用 PSTricks 的解决方案。运行以下命令xelatex

\documentclass{minimal}
\usepackage{pst-plot}
\begin{document}

\begin{pspicture}(33,-2)(48,1.1)
\psset{runit=3}\uput[0](16;0){0}
\psarcn(0,0){12}{1}{-2}\psarcn(0,0){16}{1}{-2}
\psline(12;1)(16;1)\psline(12;-2)(16;-2)
\multido{\rA=12.25+0.25}{15}{\psarcn[linecolor=black!15](0,0){\rA}{1}{-2}}
\psline[linecolor=black!15](12;0)(16;0)\psline[linecolor=black!15](12;-1)(16;-1)
\multido{\rA=12.0+0.5}{9}{\uput[-90](\rA;-2.5){\rA}}
\psline[linecolor=blue,linestyle=dashed]{-*}(12;-0.54)(14.37;-0.54)
\psline[linecolor=green]{-*}(12;-1.22)(14.37;-1.22)
\uput[90](12.75;-0.54){\blue$-0.54^\circ$}\uput[90](12.75;-1.22){\green$-1.22^\circ$}
\uput[90](14.37;-0.54){\blue$14.37$}\uput[90](14.37;-1.22){\green$14.37$}
\end{pspicture}

\end{document}

在此处输入图片描述

相关内容