我将坐标存储在\xCoor
和中\yCoor
,并将它们转换为极坐标以在纸上表达。我希望自动完成此操作,并且能够定义:
\pgfmathsetmacro{\angleValue}{ atan( \yCoor / \xCoor ) }
效果很好,如果这是通过计算器计算的,它会返回预期的答案。但是,我想要相对于 x 轴正确定义的角度,而不是这个答案。随后,我想根据坐标所在的象限有条件地将 0、180 或 360 的值添加到此值,这可以根据\xCoor
和的值来确定\yCoor
。
我尝试过使用\ifthenelse{<condition>}{<if true>}{<if false>}
,但代码不接受它(似乎 ifthenelse 在计算中不能很好地工作)。我知道\ifnum
需要整数值,而我的坐标值肯定不是整数值。
任何帮助都将不胜感激。
以下是一个示例案例:假设坐标 (-3.49, 2)-29.82
存储在 中\angleValue
,但这实际上应该是150.18
度。随后,我需要将 180 度添加到输出中以获得正确的角度值来打印。
以下是一个不同的示例:假设坐标 (3.49, -2)-29.82
存储在 中\angleValue
,但这实际上应该是330.18
度。随后,我需要将 360 度添加到输出中,以获得正确的角度值来打印。
因此,它归结为根据\xCoor
和的符号有条件地添加值\yCoor
答案1
我不确定是否\xcoord
和\ycoord
是否永远是纯数字。如果是,您可以使用这个:
编辑:啊,抱歉,当然你可以用小数作为坐标。那么,假设\xcoord
和\ycoord
总是无单位的:
\documentclass[tikz, border=.2cm]{standalone}
\begin{document}
\begin{tikzpicture}
\draw[->] (-3,0) --(3,0);
\draw[->] (0,-3) -- (0,3);
\foreach \xCoor/\yCoor in{3/3,2.5/4.5,3/-3,2.5/-4.5,
-3/-3,-2.5/-4.5,-3/3,-2.5/4.5}{
\pgfmathsetmacro{\angleValue}{ atan( \xCoor/-\yCoor ) +
\ifdim\yCoor pt<0pt 270\else 90\fi}
\draw (0,0) -- (\xCoor,\yCoor)node[right, color=red]{\angleValue};
}
\end{tikzpicture}
\end{document}
替代方法是使用额外的包来处理一些可扩展的十进制数(等等)。
\documentclass[tikz, border=.2cm]{standalone}
\usepackage{xintfrac}
\begin{document}
\begin{tikzpicture}
\draw[->] (-3,0) --(3,0);
\draw[->] (0,-3) -- (0,3);
\foreach \xCoor/\yCoor in{3/3,2.5/4.5,3/-3,2.5/-4.5,
-3/-3,-2.5/-4.5,-3/3,-2.5/4.5}{
\pgfmathsetmacro{\angleValue}{\xintifSgn {\yCoor}
{atan( -\xCoor/\yCoor ) + 270}% negative y coord
{\xintifSgn{\xCoor}{180}{\ORIGINNOANGLE}{0}}% zero y
{atan( -\xCoor/\yCoor ) + 90}% positive y
}
\draw (0,0) -- (\xCoor,\yCoor)node[right, color=red]{\angleValue};
}
\end{tikzpicture}
\end{document}
答案2
使用 atan2 (atan 2(维基百科)
\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\draw[->] (-3,0) --(3,0);
\draw[->] (0,-3) -- (0,3);
\foreach \xCoor/\yCoor in{3/3,3/-3,-3/-3,-3/3}{
\pgfmathsetmacro{\angleValue}{ atan2( \yCoor,\xCoor ) }
\draw (0,0) -- (\xCoor,\yCoor)node[right]{\angleValue};
}
\end{tikzpicture}
\end{document}