我在 tikz 中有两个点(m1
和m4
),想计算这两个点与水平线定义的线的角度。
数学应该是atan( (x2-x1) / (y2-y2) )
,我尝试做这个实现(将结果存储在变量中\start
。
\pgfmathsetmacro{\start}{atan((\pgfextracty{m4}-\pgfextracty{m1})/(\pgfextractx{m4}-\pgfextractx{m1}))}
不幸的是,这不能编译并抛出这个错误:
! You can't use a prefix with `the character ='.
<to be read again>
=
l.41 ...y{m1})/(\pgfextractx{m4}-\pgfextractx{m1}))}
我感兴趣的是如何使用 tikz 坐标进行比加法和乘法更复杂的计算。以上只是一个例子。这里有一个小的 mwe,它采用两个坐标进行一个小计算并将结果打印到节点,作为一个略显艺术化的例子。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage[active,tightpage]{preview}
\setlength\PreviewBorder{2pt}
\begin{document}
\begin{preview}
\begin{tikzpicture}
\coordinate (m1) at (0,0);
\coordinate (m4) at ($(m1) +(170:70)$);
\pgfmathsetmacro{\start}{atan((\pgfextracty{m4}-\pgfextracty{m1})/(\pgfextractx{m4}-\pgfextractx{m1}))}
\node at (1,1) {\start};
\end{tikzpicture}
\end{preview}
\end{document}
答案1
如果您的目的是计算由两个点定义的线与水平轴之间的角度(m1)--(m4)
,那么您可以根据需要选择两种方案。首先,您可以将 pgf 数学引擎与\pgfmathanglebetweenpoints
用于此目的的命令一起使用。第二种选择是使用tkz-euclide
包(内部加载 tikz),但您需要三个点。请参阅下面的示例以了解说明:
\documentclass{article}
\usepackage{tkz-euclide}
\usetkzobj{all} % Important
\begin{document}
\begin{tikzpicture}
\coordinate(m1)at(0,0);
\coordinate(m4)at(5,2);
\coordinate(m0)at([xshift=5cm]m1);
\draw (m0)--(m1)--(m4);
% first method
\pgfmathanglebetweenpoints{\pgfpointanchor{m1}{center}}{\pgfpointanchor{m4}{center}}
\edef\twomangle{\pgfmathresult}
\node at (0,-2){\twomangle};
% Second method
\tkzFindAngle(m0,m1,m4)
\tkzGetAngle{angleBCA};
\node at (0,-3){\angleBCA};
\end{tikzpicture}
\end{document}