![Tikz 中的 cm-Option 有什么作用?](https://linux22.com/image/448026/Tikz%20%E4%B8%AD%E7%9A%84%20cm-Option%20%E6%9C%89%E4%BB%80%E4%B9%88%E4%BD%9C%E7%94%A8%EF%BC%9F.png)
在一个主题中,有人使用了选项“cm”,如以下简化的示例所示:
代码
\documentclass[12pt,tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\pgfmathsetmacro{\mySqrt}{sqrt(3)/2}
\def\r{1}
\def\a{1}
\draw [cm={\r,0,.5*\r,\mySqrt*\r,(0,0)}]
(1+\a,0) coordinate (-corner 0) coordinate (-corner 3)
-- (\a,1) coordinate (-corner 1)
-- (-\a,1) coordinate (-corner 2)
-- cycle;
\end{tikzpicture}
\end{document}
来自主题:仅缩放 TikZ 多边形的一部分(@marsupilam)
输出
问题
这个选项起什么作用?其参数是什么意思?
答案1
有时我们需要使用特定的几何变换。参见手册,25.3 坐标变换,第 378 页 对于命令cm
和reset cm
:
稍微解释一下:
scale=2
是相同的cm={2, 0, 0, 2, (0,0)}
xscale=2
是相同的cm={2, 0, 0, 1, (0,0)}
yscale=3
是相同的cm={1, 0, 0, 3, (0,0)}
shift={(3,4)}
是相同的cm={1, 0, 0, 1, (3,4)}
xshift=5cm
是相同的cm={1, 0, 0, 1, (5,0)}
yshift=6cm
是相同的cm={1, 0, 0, 1, (0,6)}
xslant=1.5
是相同的cm={1, 0, 1.5, 1, (0,0)}
yslant=3
是相同的cm={1, 3, 0, 1, (0,0)}
以下是一个小的自学教程^^
\documentclass[tikz,border=5mm]{standalone}
\usepackage{amsmath}
\begin{document}
\begin{tikzpicture}[very thick]
\draw[gray!20,thin] (-3,-3) grid (3,3);
\draw[->,gray,thin] (-3.5,0)--(3.5,0) node[below right,black]{$x$};
\draw[->,gray,thin] (0,-3.5)--(0,3.5) node[below left,black]{$y$};
\def\mypath{(0,0) rectangle (1,1)}
%\def\mypath{(0,0) circle(1)}
%\def\mypath{(0,0) parabola (2,2)}
%\def\mypath{(0,0) sin (2,1.5)}
%\def\mypath{(0,0) .. controls +(70:2) and +(-100:1) .. (3,2)}
\draw[blue] \mypath;
% [xscale=-3,yscale=-2,shift={(0,-1)}] is the same as cm={-3, 0, 0, -2, (0,-1)}
\draw[cm={-3, 0, 0, -2, (0,-1)},red] \mypath;
% [xslant=1.5] is the same as [cm={1, 0, 1.5, 1, (0,0)}]
\draw[cm={1, 0, 1.5, 1, (0,0)},cyan] \mypath;
\draw[cm={1, 2, 3, -4, (-3,1)},orange] \mypath;
\path (0,4.5) node[align=center]{
\verb|[cm={a, b, c, d, (t_x, t_y)}]|\\[2mm]
$\begin{pmatrix}a&c\\b&d\end{pmatrix}
\begin{pmatrix}x\\y\end{pmatrix}+
\begin{pmatrix}t_x\\t_y\end{pmatrix}$
};
\end{tikzpicture}
\end{document}
答案2
作为@Celdor提到,它只是一个坐标变换。
拥有
\draw[cm={a, b, c, d, (t_x, t_y)}] (0,0) -- (1,1) -- (1,0);
每个点都按照以下公式进行变换:
其中该点由 x 和 y 给出。