我有以下代码,我期望最终的角度是 135 度,但无论我如何尝试,我得到的都是 90 度。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\coordinate (A) at (1,0);
\coordinate (B) at (-1,1);
\pgfmathanglebetweenpoints{A}{B}
\edef\angleAB{\pgfmathresult}
\node at (0,0) {\angleAB};
\end{tikzpicture}
\end{document}
我也尝试了以下命令,但不知道它是什么意思,除了一种情况外,它也打印 90。唯一有效的情况是当 A=(1,0) 和 B=(-1,0) 时,它会打印 180。
\pgfmathanglebetweenpoints{\pgfpointanchor{A}{center}}{\pgfpointanchor{B}{center}}
这是为什么?顺便说一句,找不到“pgfmathanglebetweenpoints”的任何参考文档,这就是我在这里提问的原因。
编辑:B 从(-1,-1)更正为(-1,1)
答案1
\pgfmathanglebetweenpoints
正如其名称所示,期望参数扩展到 x 和 y 坐标而不是节点名称(coordinate
是node
具有单个锚点的形状),因为这些必须用pgf@process
等等进行处理。
您的第二个命令是正确的,\pgfpointanchor
您可以从坐标中提取一个点(在本例中为中心)。两者都在TikZ/PGF 手册。
以下应该有效(请注意,(1,0)和(-1,-1)之间的角度是 206(或 154),而不是 135):
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\coordinate (A) at (1,0);
\coordinate (B) at (-1,-1);
\coordinate (C) at (0,1);
% draw and node for illustration purposes only, not necessary for computation
\draw[->] (A) -- (B);
\draw[->] (A) -- (C);
\node[fill=white] (An) at (1,0) {A};
\node[fill=white] (Bn) at (-1,-1) {B};
\node[fill=white] (Cn) at (0,1) {C};
\pgfmathanglebetweenpoints{\pgfpointanchor{A}{center}}{\pgfpointanchor{B}{center}}
\edef\angleAB{\pgfmathresult}
\node at (3,0) {A-B \angleAB};
\pgfmathanglebetweenpoints{\pgfpointanchor{A}{center}}{\pgfpointanchor{C}{center}}
\edef\angleAC{\pgfmathresult}
\node at (3,1) {A-C \angleAC};
\end{tikzpicture}
\end{document}
导致: