我注意到,对于接近 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
看看这确实是根本原因。
要做的步骤是编写atan2
PGF 浮点单元的实现(或适配器)并在中使用它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}