(使用 Overleaf)转换运算符在转换行时出现意外行为

(使用 Overleaf)转换运算符在转换行时出现意外行为

我正在通过官方指导为了学习 tikz,我目前正试图理解转换运算符。

我从网络上了解到,“旋转”会围绕 (0,0) 旋转,除非你使用“旋转”,这部分解释了这种行为。

请看下面的代码。它用辅助线绘制一个网格,然后从 (0,0) 到 (0,0.5) 绘制一条线,然后变换下一条线。

\documentclass[a4paper,12pt]{article}
\usepackage{tikz}
\usetikzlibrary{intersections}
\tikzset{help lines/.style=very thin}
\tikzset{Karl's grid/.style = {help lines,color=#1!50}, Karl's grid/.default = blue}

\begin{document}
\begin{tikzpicture}

    \draw[step = 0.5cm, Karl's grid] (-1.4,1.4) grid (1.4,-1.4);
    \draw[thick] (0,0) -- (0,0.5) [xshift = 0cm, xscale = 1.5, rotate = 10] (1,0) -- (1,0.5);
    
\end{tikzpicture}
\hspace{0.5cm}
\begin{tikzpicture}

    \draw[step = 0.5cm, Karl's grid] (-1.4,1.4) grid (1.4,-1.4);
    \draw[thick] (0,0) -- (0,0.5) [xshift = 1cm, xscale = 1.5, rotate = 10] (0,0) -- (0,0.5);
    
\end{tikzpicture}
\end{document}

生成以下图像:

上述代码的编译图像

如您所见,两种情况下变换后的线条都不同。不同之处在于,在第一种情况下,我使用移位将线向右移动 1cm,在第二种情况下,我直接将 x 坐标增加 1。

那么,为什么会产生不同的输出呢?我假设移位发生在最后,这意味着首先将 x 坐标缩放 1.5,然后旋转 10°,然后然后向右移动 1。这就是为什么第一次最终结果为 1,而第二次最终结果为 1.5。

但旋转至少不应该是相同的吗?为什么有时会“提升”线条,有时却不会?感觉它应该总是被提升,以获得 10° 的角度。

我的直觉是,转变会以某种方式移动旋转点。

总结一下:这些操作是按照什么顺序应用的?切换旋转比例尺产生不同的图像,所以显然它们在我需要时就被执行了。:)

答案1

我假设移位发生在最后,这意味着首先将 x 坐标缩放 1.5,然后旋转 10°,然后向右移动 1。

不,转换在调用它们时应用,并且对 TeX 组的其余部分有效(类似于开关\bfseries\itshape工作方式)。

但旋转至少不应该是相同的吗?为什么有时会“提升”线条,有时却不会?感觉它应该总是被提升,以获得 10° 的角度。

正如你自己所说,轮换总是在进行(0, 0),但是当前的 (0, 0)。原点在相同位置发生移动。

我的直觉是,转变会以某种方式移动旋转点。

是的!


让我们检查一下你的第一的绘画:

[xshift = 0cm, xscale = 1.5, rotate = 10] (1,0) -- (1,0.5);

每个转换都按照其调用的顺序应用:

  • 显然xshift = 0cm什么也没做。

  • xscale使得它就像你写的一样

    (1.5, 0) -- (1.5, 0.5)
    
  • 现在你把它旋转一圈(0, 0),因为你画的都是在正部分的上方X轴,它就会被“提升”。

现在第二

[xshift = 1cm, xscale = 1.5, rotate = 10] (0,0) -- (0,0.5)

我们再回顾一下:

  • 现在,它xshift = 1cm开始发挥作用。它改变了一切 包括右边的原点。
  • 工作xscale原理与以前相同,但由于您只使用了X= 0,在这种情况下它起不了多大作用。(它才不是使转变成为1.5cm!)
  • 最后,旋转。记住,你绕着 旋转(0, 0)(现在它位于原始坐标(1cm, 0cm)),但(0, 0)绕着它自身旋转并没有多大作用,这就是为什么它仍然位于那里。

相关内容