tikz
我有以下代码,它使用包含数字数组的包生成图片。如果我更改该行:
\pgfmathsetmacro{\r}{\reds[\index]}
访问更大的数组:
\pgfmathsetmacro{\r}{\REDS[\index]}
构建过程就挂起了。我做错了什么?
\def\res{32}
\def\scale{0.22}
\def\reds
{{
1.00, 0.00, 1.00
}}
\def\REDS
{{
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00
}}
\begin{figure}[htb]
\centering
\mbox{} \hfill
\begin{tikzpicture}
\foreach \x in {1,...,\res}{
\foreach \y in {1,...,\res}{
\pgfmathparse{(\x-0.5)*\scale-\scale}\edef\blx{\pgfmathresult}
\pgfmathparse{(\y-0.5)*\scale-\scale}\edef\bly{\pgfmathresult}
\pgfmathparse{(\x-0.5)*\scale}\edef\trx{\pgfmathresult}
\pgfmathparse{(\y-0.5)*\scale}\edef\try{\pgfmathresult}
\pgfmathparse{mod(((\x-1)*\res + \y-1),3)}\edef\index{\pgfmathresult}
\pgfmathsetmacro{\r}{\reds[\index]}
\definecolor{col}{rgb}{\r,0.7,0.4}
\fill[col] (\blx,\bly) rectangle (\trx,\try);
}
}
\end{tikzpicture}
\end{figure}
答案1
如果你等待足够长的时间,就会得到结果。但我不知道你为什么要从 32x32 的数组中查找介于 0 和 2 之间的值。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\def\res{32}
\def\scale{0.22}
\def\reds{{1.00, 0.00, 1.00}}
\def\REDS
{{
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,
1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00,1.00, 0.00, 1.00
}}
\begin{tikzpicture}
\foreach \x in {1,...,\res}{
\foreach \y in {1,...,\res}{
\pgfmathsetmacro{\blx}{(\x-0.5)*\scale-\scale}
\pgfmathsetmacro{\bly}{(\y-0.5)*\scale-\scale}
\pgfmathsetmacro{\trx}{(\x-0.5)*\scale}
\pgfmathsetmacro{\try}{(\y-0.5)*\scale}
\pgfmathtruncatemacro\index{mod(((\x-1)*\res + \y-1),3)}
\pgfmathsetmacro{\r}{\REDS[\index]}
\definecolor{col}{rgb}{\r,0.7,0.4}
\fill[col] (\blx,\bly) rectangle (\trx,\try);
}
}
\end{tikzpicture}
\end{document}