pfg 条件加法

pfg 条件加法

我将坐标存储在\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}

在此处输入图片描述

相关内容