在 TikZ 中平移和旋转对象(2D)

在 TikZ 中平移和旋转对象(2D)

在 Tikz 中,有没有办法将一个矩形平移和旋转任意距离/角度?例如

  1. 平移:x 方向 3 次,y 方向 5 次
  2. 旋转: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 说:“通常,您不会直接使用此选项。”

另一种解决方案是使用shiftrotate

\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}
\结束{文档}

旋转平移

相关内容