关于 TikZ 中 `rotate around` 和 `++` 的几个问题

关于 TikZ 中 `rotate around` 和 `++` 的几个问题

\begin{tikzpicture}
\draw[help lines] (0,0) grid (15,15);
\begin{scope}[blue]
\draw[thick] (2,0) rectangle (2.4,5); 
\draw[thick,rotate around={45:(2.4,5)}] (2.4,5.4) rectangle +(4,-0.4);
\draw[thick] (2.4,5)++(45:4) rectangle ++(4,0.4)--++(0,0.2)--++(0.7,0)--++(0,-0.15)--++(-0.55,0)--++(0,-0.5)--++(0.55,0)--++(0,-0.15)--++(-0.7,0)--++(0,0.2);
\end{scope}
\end{tikzpicture}

我使用上述代码生成了上一张图片。我想将最右边的矩形连同第二个矩形右下角的“手”一起旋转。

  1. 我在第 6 行替换\draw[thick,rotate around={-15:(2.4,5)++(45:4)}]\draw[thick]但输出如下。为什么这种方法失败了?
  2. 有没有简单的方法可以得到我想要的?欢迎提出其他建议。

谢谢你!

答案1

假设您不能rotate around像那样使用相对坐标。请注意,是否有 都没有区别++(45:4)。我认为解析会查找类似 的内容<angle>:(<coordinate>),当它到达坐标的第一个右括号时,它会停止查找。

还请(x,y)++(x1,y1)注意坐标为 2。因此,您实际上是在创建从(x,y)到 的路径。因此,我一开始(x+x1,y+y1)就不指望它能正常工作。rotate around

下面显示了三种可能的解决方法。

  1. 首先将点保存在 中coordinate,然后在 中使用它rotate around,即

    \path (2.4,5)++(45:4) coordinate (x);
    

    其次是rotate around={-15:(x)}

  2. 使用库的语法calc来计算中的坐标rotate around,即

    rotate around={-15:($(2.4,5)+(45:4)$)}
    
  3. 使用正弦和余弦“手动”计算点,即

    rotate around={-15:({2.4+4*cos(45)},{5+4*sin(45)})}
    

    注意,在这种情况下,你需要在每个组件周围加上额外的括号,即。这是为了在解析器({<x>},{<y>})中“隐藏”括号,这样它们就不会被解释为坐标末尾的括号。sin(45)cos(45)

在此处输入图片描述

\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\draw[help lines] (0,0) grid (15,15);
\begin{scope}[blue]
\draw[thick] (2,0) rectangle (2.4,5); 
\draw[thick,rotate around={45:(2.4,5)}] (2.4,5.4) rectangle +(4,-0.4);
% save point to coordinate x
\path (2.4,5)++(45:4) coordinate (x);
% use x
\draw[thick,rotate around={-15:(x)}] (2.4,5)++(45:4) rectangle
 ++(4,0.4)--++(0,0.2)--++(0.7,0)--++(0,-0.15)--++(-0.55,0)--++(0,-0.5)--++(0.55,0)--++(0,-0.15)--++(-0.7,0)--++(0,0.2);

\end{scope}

% with the calc library
\draw[red, dashed,thick,rotate around={-15:($(2.4,5)+(45:4)$)}] (2.4,5)++(45:4) rectangle
 ++(4,0.4)--++(0,0.2)--++(0.7,0)--++(0,-0.15)--++(-0.55,0)--++(0,-0.5)--++(0.55,0)--++(0,-0.15)--++(-0.7,0)--++(0,0.2);

% with "manual" calculation
\draw[cyan,densely dotted,thick,rotate around={-15:({2.4+4*cos(45)},{5+4*sin(45)})}] (2.4,5)++(45:4) rectangle
 ++(4,0.4)--++(0,0.2)--++(0.7,0)--++(0,-0.15)--++(-0.55,0)--++(0,-0.5)--++(0.55,0)--++(0,-0.15)--++(-0.7,0)--++(0,0.2);
\end{tikzpicture}
\end{document}

相关内容