x
我正在尝试使用坐标变换矩阵,但是当和y
单位设置不相等时,它似乎无法与未变换的对象正确对齐。
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tabular}{cc}
\begin{tikzpicture}[x=2cm,y=2cm]
\fill[cyan, cm={1, .2, 0, .8, (0, 0)}] (4, 4) rectangle (6, 6);
\draw (4, 4) rectangle (6, 6);
\end{tikzpicture} &
\begin{tikzpicture}[x=1.6cm,y=2cm]
\fill[cyan, cm={1, .2, 0, .8, (0, 0)}] (4, 4) rectangle (6, 6);
\draw (4, 4) rectangle (6, 6);
\end{tikzpicture}
\end{tabular}
\end{document}
左侧图像为方格坐标,右侧图像为非方格坐标。左侧图像中,变换后的矩形与边界框的左下角和右上角相交。
我原本期望单位大小的差异不会影响转换,从而导致转换后的形状和未转换的形状像右边那样错位。
除了将其画成正方形并使用 之外,还有什么方法可以纠正这个问题吗resizebox
?
答案1
首先,x
和y
值(或实际上是向量)指定了坐标坐标系(没有单位,三维)和画布坐标系统(有单位,总是二维的)。
指定的变换矩阵cm
应用于画布坐标系的坐标上。
让我们应用第一个变换(坐标→ 画布)之后,我们再进一步了解一下:
\begin{tikzpicture}
\fill[cyan, cm={1, .2, 0, .8, (0, 0)}] (8cm, 8cm) rectangle (12cm, 12cm);
\draw (8cm, 8cm) rectangle (12cm, 12cm);
\end{tikzpicture}
\begin{tikzpicture}
\fill[cyan, cm={1, .2, 0, .8, (0, 0)}] (6.4cm, 8cm) rectangle (9.6cm, 12cm);
\draw (6.4cm, 8cm) rectangle (9.6cm, 12cm);
\end{tikzpicture}
这两个图看起来仍然和你的一样。
现在,当你使用时,你设置了一个转换,将输入坐标转换为cm = {a, b, c, d, (x, y)}
s= (s₁,s₂)(始终在画布坐标系中)转换为 TeX 坐标吨= (吨₁,吨₂)根据
IE
和
- A= 1,
- b= 0.2,
- C= 0 且
- d= 0.8 以及
- X=是= 0
这意味着
代码
\documentclass{standalone}
\usepackage{tikz, amsmath}
\tikzset{
debug coordinate node/.style={node font=\tiny, xscale=.75},
dcn/.style={debug coordinate node/.append style={#1}},
save cm/.code=\pgfgettransformentries\pgfcma\pgfcmb\pgfcmc\pgfcmd\pgfcmx\pgfcmy,
debug coordinate/.style args={#1/#2:#3}{insert path={
[save cm] node[centered, inner sep=+1pt, circle, fill]{}
node[debug coordinate node] {$ \begin{alignedat}{2}
#3_1 &= \pgfcma\cdot\mathrm{#1} + \pgfcmc\cdot\mathrm{#2} + \mathrm{\pgfcmx}
&& = \pgfmathprint{(\pgfcma*(#1)+\pgfcmc*(#2)+\pgfcmx)/1cm}\mathrm{cm}\\
#3_2 &= \pgfcmb\cdot\mathrm{#1} + \pgfcmd\cdot\mathrm{#2} + \mathrm{\pgfcmy}
&& = \pgfmathprint{(\pgfcmb*(#1)+\pgfcmd*(#2)+\pgfcmy)/1cm}\mathrm{cm}\\
\end{alignedat}$}}}}
\begin{document}
\begin{tabular}{cc}
\begin{tikzpicture}
\fill[cyan, cm={1, .2, 0, .8, (0, 0)}]
(8cm, 8cm) [below right, debug coordinate= 8cm/ 8cm:m]
rectangle (12cm, 12cm) [above left, debug coordinate=12cm/12cm:m];
\draw (8cm, 8cm) [above right, debug coordinate= 8cm/ 8cm:n]
rectangle (12cm, 12cm) [below left, debug coordinate=12cm/12cm:n];
\end{tikzpicture} &
\begin{tikzpicture}
\fill[cyan, cm={1, .2, 0, .8, (0, 0)}]
(6.4cm, 8cm) [below right, debug coordinate=6.4cm/ 8cm:m]
rectangle (9.6cm, 12cm) [above left, debug coordinate=9.6cm/12cm:m];
\draw (6.4cm, 8cm) [above right, debug coordinate=6.4cm/ 8cm:n]
rectangle (9.6cm, 12cm) [above left, dcn={yshift=.25cm},
debug coordinate=9.6cm/12cm:n];
\end{tikzpicture}
\end{tabular}
\end{document}