在 Tikz 中,有没有办法将一个矩形平移和旋转任意距离/角度?例如
- 平移:x 方向 3 次,y 方向 5 次
- 旋转:45度
现在我的目标是围绕原点绘制一个矩形,然后能够通过 TikZ 命令先平移然后旋转对象,反之亦然。因此,人们可以直观地看到,平移和旋转是不可交换的。
先平移然后旋转很容易用手动完成,但反过来我需要借助计算器。
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}[scale = 0.5]
\draw [->](-5,0) -- (5,0); %x-axis
\draw [->](0,-5) -- (0,5); %y-axis
\draw[green] (1,1) -- (1,-1) -- (-1,-1) -- (-1,1) -- (1,1); %square around the origin
\draw[blue] ($ (3,{5+sqrt(2)}) $) -- ($ ({3-sqrt(2)},5) $) -- ($ (3,{5-sqrt(2)}) $) -- ($ ({3+sqrt(2)},5) $) -- ($ (3,{5+sqrt(2)}) $) ; %Rotation first, then translated, values calculated by hand
\draw[green, rotate around={45:(0,0)}] (2,6) rectangle (4,4); %neat solution for the RT case
\end{tikzpicture}
\end{document}
答案1
有几种方法,如下节所述坐标变换在 pgfmanual 中。
一种方法是直接设置坐标变换矩阵,通过cm
:
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}[scale = 0.5]
\draw [->](-5,0) -- (5,0); %x-axis
\draw [->](0,-5) -- (0,5); %y-axis
\draw[green] (1,1) -- (1,-1) -- (-1,-1) -- (-1,1) -- (1,1); %square around the origin
\draw[blue,cm={cos(45) ,-sin(45) ,sin(45) ,cos(45) ,(3 cm,5 cm)}] (1,1) -- (1,-1) -- (-1,-1) -- (-1,1) -- (1,1);
\end{tikzpicture}
\end{document}
请注意,您需要以正确的顺序使用转换。使用 cm 时,您没有选择,总是先旋转,然后平移。并且 pgfmanual 说:“通常,您不会直接使用此选项。”
另一种解决方案是使用shift
和rotate
:
\draw[blue,shift={(3 cm,5 cm)},rotate=45] (1,1) -- (1,-1) -- (-1,-1) -- (-1,1) -- (1,1);
\draw[orange,rotate=45,shift={(3 cm,5 cm)}] (1,1) -- (1,-1) -- (-1,-1) -- (-1,1) -- (1,1);
(Caramdir 的评论:)为此,您需要记住 TikZ 以与自然预期相反的顺序组合变换(即,它作用于坐标平面,而不是作用于对象)。
答案2
对我来说,最好的方法是使用范围
\documentclass{独立} \usepackage{tikz} \usetikzlibrary{计算} \开始{文档} \begin{tikzpicture}[比例 = 0.5] \draw [->](-5,0) -- (5,0); %x 轴 \draw [->](0,-5) -- (0,5); %y 轴 \draw[green] (1,1) -- (1,-1) -- (-1,-1) -- (-1,1) -- (1,1); %围绕原点绘制正方形 \开始{范围}[shift={(3,5)},旋转=45] \draw[red] (1,1) -- (1,-1) -- (-1,-1) -- (-1,1) -- (1,1); %围绕原点绘制正方形 \结束{范围} \开始{范围}[移位={(-1.5,5.5)},旋转=45] \draw[red] (1,1) -- (1,-1) -- (-1,-1) -- (-1,1) -- (1,1); %围绕原点绘制正方形 \结束{范围} \结束{tikzpicture} \结束{文档}