使用命令在 TikZ 中获取节点位置

使用命令在 TikZ 中获取节点位置

我设置了一个命令来计算节点的变换位置,因为我想将这些节点置于已旋转的矩形上方。因此,我没有使用计算器手动计算值,而是尝试将其自动化。

\documentclass{standalone}
\usepackage{tikz}
\usepackage{physics}

\newcommand{\rotateX}[5]{\pgfmathparse{cos(#5)*(#1-#3)-sin(#5)*(#2-#4)+#3}\pgfmathresult}
\newcommand{\rotateY}[5]{\pgfmathparse{sin(#5)*(#1-#3)+cos(#5)*(#2-#4)+#4}\pgfmathresult}

\begin{document}
\begin{tikzpicture}
    ...
    % Line 27
    \node at (\rotateX{-0.5}{3.5}{-2}{1}{40},\rotateY{-0.5}{3.5}{-2}{1}{40}) {$\mathcal{C}\left(\vb*{A}^\top\right)$};
    ...
\end{tikzpicture}
\end{document}

\rotateX命令本身运行良好,但我无法将此输出用作 TikZpicture 中节点的位置。

我收到的错误:

Incomplete \iffalse; all text was ignored after line 27.

    <inserted text> 
                \fi 
    <*> main.tex

我想要的(手动输入的位置):

\node at (-2.4579,3.87929) {$\mathcal{C}\left(\vb*{A}^\top\right)$};

(我添加了网格线和轴来显示它正好位于(-2.4579,3.87929)) 输出

任何帮助,将不胜感激。 :)

答案1

只需删除\pgfmathparse\pgfmathresult,Ti无论如何,Z 都会解析坐标。

\documentclass{standalone}
\usepackage{tikz}
\usepackage{physics}
\newcommand{\rotateX}[5]{{cos(#5)*(#1-#3)-sin(#5)*(#2-#4)+#3}}
\newcommand{\rotateY}[5]{{sin(#5)*(#1-#3)+cos(#5)*(#2-#4)+#4}}
\begin{document}
\begin{tikzpicture}
    ...
    % Line 27
    \node at (\rotateX{-0.5}{3.5}{-2}{1}{40},\rotateY{-0.5}{3.5}{-2}{1}{40}) 
    {$\mathcal{C}\left(\vb*{A}^\top\right)$};
    ...
\end{tikzpicture}
\end{document}

由于您对 x 和 y 使用相同的参数,因此您可以将它们放在一个宏中(如果您确实想使用宏)。

\documentclass{standalone}
\usepackage{tikz}
\usepackage{physics}
\newcommand{\rotateX}[5]{{cos(#5)*(#1-#3)-sin(#5)*(#2-#4)+#3}}
\newcommand{\rotateY}[5]{{sin(#5)*(#1-#3)+cos(#5)*(#2-#4)+#4}}
\newcommand{\rotateXY}[5]{(\rotateX{#1}{#2}{#3}{#4}{#5},\rotateY{#1}{#2}{#3}{#4}{#5})}
\begin{document}
\begin{tikzpicture}
    ...
    % Line 27
    \node at \rotateXY{-0.5}{3.5}{-2}{1}{40}
    {$\mathcal{C}\left(\vb*{A}^\top\right)$};
    ...
\end{tikzpicture}
\end{document}

答案2

请始终发布可用的示例,这未定义\vb,但您需要将计算与\node必须扩展为数字的参数分开。

\documentclass{standalone}
\usepackage{tikz}

\newcommand{\rotateX}[5]{\pgfmathparse{cos(#5)*(#1-#3)-sin(#5)*(#2-#4)+#3}\let\myX\pgfmathresult}
\newcommand{\rotateY}[5]{\pgfmathparse{sin(#5)*(#1-#3)+cos(#5)*(#2-#4)+#4}\let\myY\pgfmathresult}

\begin{document}
\begin{tikzpicture}
    ...
    % Line 27
    \rotateX{-0.5}{3.5}{-2}{1}{40}%
    \rotateY{-0.5}{3.5}{-2}{1}{40}%
    \node at (\myX,\myY) {$\mathcal{C}\left(\vb*{A}^\top\right)$};
    ...
\end{tikzpicture}
\end{document

相关内容