我可以在 TikZ 中的极坐标中使用三角函数吗

我可以在 TikZ 中的极坐标中使用三角函数吗

我尝试在 TikZ 坐标声明中使用简单的数学函数,例如 sin、cos 和 sqrt。我发现这适用于笛卡尔坐标,但不适合极坐标:

\documentclass[tikz]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}

\begin{tikzpicture}
% \draw (0,0) -- (2,0) -- (45:1/0.707) -- (0,0); % <-- works
% \draw (0,0) -- (2,0) -- (45:{1/cos(45)}) -- (0,0); % <--doesn't work
\draw (0,0) -- (2,0) -- (1,{1/tan(45)}) -- (0,0); % <--works
\end{tikzpicture}

\end{document}

这只是一个已知的限制,还是有办法解决这个问题?

答案1

这实际上是 PGF/TikZ 的 CVS 版本中修复的一个错误,请参阅在 TikZ 中使用数学

正如 percusse 在对该问题的回答中所报告的那样,您可以通过在半径计算的右括号后添加一个空格来解决此错误:

\draw (0,0) -- (2,0) -- (45:{1/cos(45)} ) -- (0,0);

cjorssen 还发布了现在 CVS 版本中的修复程序,您可以在文档中使用它。请参阅他的回答对上述问题。


原始答案

您可以使用let关键字在坐标外进行计算来解决此问题。这将在第节中描述14.15 Let 操作手册的第 150 页(2010 年 10 月 25 日发布的 2.10 版)。

我习惯于cycle封闭路径,因为这可以确保在那个角落处的线条正确合并。

\documentclass[tikz]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}

\begin{tikzpicture}
\draw let \n1 = {1/cos(45)}  in
   (0,0) -- (2,0) -- (45:\n1) -- cycle; 
\end{tikzpicture}

\end{document}

答案2

我个人更喜欢通过单独进行计算\pgfmathsetmacro,然后使用结果。否则,{}解析器必须使用额外的组才能正常工作。

参考:

代码:

\documentclass{article}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}
    \pgfmathsetmacro{\CosValue}{1/cos(45)}%
    \draw (0,0) -- (2,0) -- (45:\CosValue) -- cycle;
\end{tikzpicture}
%
\begin{tikzpicture}
    \pgfmathsetmacro{\CosValue}{cos(45)}%
    \draw (0,0) -- (2,0) -- (45:1/\CosValue) -- cycle;
\end{tikzpicture}
\end{document}

相关内容