\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}
我使用上述代码生成了上一张图片。我想将最右边的矩形连同第二个矩形右下角的“手”一起旋转。
- 我在第 6 行替换
\draw[thick,rotate around={-15:(2.4,5)++(45:4)}]
。\draw[thick]
但输出如下。为什么这种方法失败了? - 有没有简单的方法可以得到我想要的?欢迎提出其他建议。
谢谢你!
答案1
假设您不能rotate around
像那样使用相对坐标。请注意,是否有 都没有区别++(45:4)
。我认为解析会查找类似 的内容<angle>:(<coordinate>)
,当它到达坐标的第一个右括号时,它会停止查找。
还请(x,y)++(x1,y1)
注意一坐标为 2。因此,您实际上是在创建从(x,y)
到 的路径。因此,我一开始(x+x1,y+y1)
就不指望它能正常工作。rotate around
下面显示了三种可能的解决方法。
首先将点保存在 中
coordinate
,然后在 中使用它rotate around
,即\path (2.4,5)++(45:4) coordinate (x);
其次是
rotate around={-15:(x)}
。使用库的语法
calc
来计算中的坐标rotate around
,即rotate around={-15:($(2.4,5)+(45:4)$)}
使用正弦和余弦“手动”计算点,即
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}