如何在双循环的每个元素中获得不同的颜色

如何在双循环的每个元素中获得不同的颜色

这是我的代码

\documentclass[tikz]{standalone}
\usetikzlibrary{calc}
\usetikzlibrary{intersections}
\usetikzlibrary{arrows}
\usetikzlibrary{decorations.pathmorphing,decorations.pathreplacing,decorations.markings}
\usepackage{xparse}
\usetikzlibrary{angles,positioning,quotes}
\usetikzlibrary{shadows}

\begin{document}
\begin{tikzpicture}[scale=0.4, % Lattice Fundamental domaine q=2
  extended line/.style={shorten >=-#1,shorten <=-#1},
  extended line/.default=1cm]


   \coordinate (A) at (0,0);
   \coordinate (B) at (0:3); %Omega_1
   \coordinate (D) at (60:3); %Omega_2
   \coordinate (C) at ($(B) +(D)$);
   \coordinate (F) at (30:{3/sqrt(3)});
   \coordinate (F') at ($(C) - (F)$);

  \clip ($-1.5*(D)-1.5*(B)$) rectangle ($2.5*(B)+2.5*(D)$);


%Draw lattice lines
\foreach \a in {-1,0,...,2.1}{
\foreach \b in {-1,0,...,2.1}{

\draw[gray,extended line=0.5cm] ($\b*(D)-(B)$) -- ($\b*(D)+2*(B)$);
\draw[gray,extended line=0.5cm] ($\a*(B)-(D)$) -- ($\a*(B)+2*(D)$); }}



%Drow lattice points
\foreach \a in {-1,0,...,2.1}{
\foreach \b in {-1,0,...,2.1}{

\filldraw[] ($\a*(B) + \b*(D)$) circle(2pt);}}


%\filldraw[red] (F) circle(2pt);
%\filldraw[green] (F') circle(2pt);




% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %first rose

\foreach \a/\colora in {-1/{violet!30},0/{violet!50},1/{violet!70},2/{violet!90}}{
\foreach \b in {-2,-1,0,1,2}{
\begin{scope}[shift={($\a*(0:3) + \b*(60:3)$)}]


\filldraw[gray,dashed,fill=\colora,opacity=0.2] (30:{3/sqrt(3)}) -- (0:3) -- ($(0:3) + (60:3) - (30:{3/sqrt(3)})$) -- (60:3) -- cycle ; 


\filldraw[rotate around={120:(60:3)},gray,dashed,fill=\colora,opacity=0.2] (30:{3/sqrt(3)}) -- (0:3) -- ($(0:3) + (60:3) - (30:{3/sqrt(3)})$) -- (60:3) -- cycle ; 

\filldraw[rotate around={240:(60:3)},gray,dashed,fill=\colora,opacity=0.2] (30:{3/sqrt(3)}) -- (0:3) -- ($(0:3) + (60:3) - (30:{3/sqrt(3)})$) -- (60:3) -- cycle ; 
\end{scope}
}}

%Fudamental domaine
\filldraw[gray,dashed,fill=yellow!40!white] (30:{3/sqrt(3)}) -- (0:3) -- ($(0:3) + (60:3) - (30:{3/sqrt(3)})$) -- (60:3) -- cycle ; 
\end{tikzpicture}
\end{document}

它看起来是这样的: 在此处输入图片描述

我对范围环境进行了双重循环,并且希望每次迭代都获得不同的颜色。我尝试\colora在第一个循环中添加另一个循环变量(),但无法继续。我认为如果我知道一种以 tikz 允许的语法混合两种颜色以生成新颜色的方法,我就可以解决我的问题,我将\colorb在第二个循环中添加并在每次迭代中混合这两种颜色。


更新

尝试了 Gonzalo Medina 提供的方法后,我并没有得到我想要的结果。我没有解释最终目标是我的错,所以我将尝试纠正:

在欧几里得几何中:上图中的黄色平行四边形就是我们所说的基本域(对于由角度 0°、120°、240° 的旋转和平移 Z ω1+ Z ω2 组成的作用,ω1 和 ω2 是晶格的生成器)

现在,如果我们取一个基本域并仅应用旋转动作,我们得到 在此处输入图片描述 (我几乎刚刚删除了循环)

之后我的想法是通过添加来添加平移动作shift={($\a*(0:3) + \b*(60:3)$)},理论上结果将是覆盖所有计划而没有任何重叠或交叉。

我想让读者清楚地了解该计划的实施过程,这就是为什么我尝试用不同的颜色来表示最后一张图中红色部分的每个翻译。

我不确定这是否适合作为单独的问题,但在解释之后,我很乐意对我的代码和优化方法发表评论,因为这是我开始使用 tikz 编码的第一周,我对我的选择和做事方式充满怀疑。

答案1

更新

我使用基本域简化了代码\pic。对于颜色,我提供了三个选项:

  1. 随机选择固定颜色(在我的例子中为红色)的色调,为每一块提供不同的颜色:

    \documentclass[tikz]{standalone}
    \usetikzlibrary{calc}
    
    \tikzset{
       fundamental/.pic={
           \draw[,scale=0.4,black,fill=red!\tmp,rotate around=#1] 
          (60:3) -- ($(0:3) + (60:3) - (30:{3/sqrt(3)})$) -- (0:3) -- (30:{3/sqrt(3)}) -- (60:3);
      }
    }
    
    \begin{document}
    \begin{tikzpicture}[scale=0.4, % Lattice Fundamental domaine q=2
      extended line/.style={shorten >=-#1,shorten <=-#1},
      extended line/.default=1cm]
    \coordinate (A) at (0,0);
    \coordinate (B) at (0:3); %Omega_1
    \coordinate (D) at (60:3); %Omega_2
    \coordinate (C) at ($(B) +(D)$);
    \coordinate (F) at (30:{3/sqrt(3)});
    \coordinate (F') at ($(C) - (F)$);
    
    \clip ($-1.5*(D)-1.5*(B)$) rectangle ($2.5*(B)+2.5*(D)$);
    
    \foreach \a in {-1,0,1,2}
    {
      \foreach \b in {-2,-1,0,1}
      {
        \begin{scope}    
        \pgfmathparse{95*rnd+5}
        \edef\tmp{\pgfmathresult}
        \pic at ($ \a*(B) + \b*(D)$ ) {fundamental={240:(60:3)}}; 
        \pic at ($ \a*(B) + \b*(D)$ ) {fundamental={120:(60:3)}}; 
        \pic at ($ \a*(B) + \b*(D)$ ) {fundamental={0:(60:3)}}; 
        \end{scope}
      }
    }
    
    %Draw lattice lines
    \foreach \a in {-1,0,...,2.1}{
    \foreach \b in {-1,0,...,2.1}{
    
    \draw[gray,extended line=0.5cm] ($\b*(D)-(B)$) -- ($\b*(D)+2*(B)$);
    \draw[gray,extended line=0.5cm] ($\a*(B)-(D)$) -- ($\a*(B)+2*(D)$); }}
    
    %Drow lattice points
    \foreach \a in {-1,0,...,2.1}
    {
      \foreach \b in {-1,0,...,2.1}
      {
          \filldraw[] ($\a*(B) + \b*(D)$) circle(2pt);
      }
    }
    \end{tikzpicture}
    
    \end{document}
    

    在此处输入图片描述

  2. 每件随机选择不同的颜色:

    \documentclass[tikz]{standalone}
    \usetikzlibrary{calc}
    
    \tikzset{
       fundamental/.pic={
           \draw[,scale=0.4,black,fill=MyColor!85,opacity=\opac,rotate around=#1] 
          (60:3) -- ($(0:3) + (60:3) - (30:{3/sqrt(3)})$) -- (0:3) -- (30:{3/sqrt(3)}) -- (60:3);
      }
    }
    
    \begin{document}
    \begin{tikzpicture}[scale=0.4, % Lattice Fundamental domaine q=2
      extended line/.style={shorten >=-#1,shorten <=-#1},
      extended line/.default=1cm]
    \coordinate (A) at (0,0);
    \coordinate (B) at (0:3); %Omega_1
    \coordinate (D) at (60:3); %Omega_2
    \coordinate (C) at ($(B) +(D)$);
    \coordinate (F) at (30:{3/sqrt(3)});
    \coordinate (F') at ($(C) - (F)$);
    
    \clip ($-1.5*(D)-1.5*(B)$) rectangle ($2.5*(B)+2.5*(D)$);
    
    \foreach \a in {-1,0,1,2}
    {
      \foreach \b in {-2,-1,0,1}
      {
        \begin{scope}
        \pgfmathparse{250*rnd+5}
        \edef\tmpi{\pgfmathresult}
        \pgfmathparse{210*rnd+45}
        \edef\tmpii{\pgfmathresult}
        \pgfmathparse{230*rnd+25}
        \edef\tmpiii{\pgfmathresult}
        \pgfmathparse{0.75*rnd+0.25}
        \edef\opac{\pgfmathresult}
        \definecolor{MyColor}{RGB}{\tmpi,\tmpii,\tmpiii}    
        \pic at ($ \a*(B) + \b*(D)$ ) {fundamental={240:(60:3)}}; 
        \pic at ($ \a*(B) + \b*(D)$ ) {fundamental={120:(60:3)}}; 
        \pic at ($ \a*(B) + \b*(D)$ ) {fundamental={0:(60:3)}}; 
        \end{scope}
      }
    }
    
    %Draw lattice lines
    \foreach \a in {-1,0,...,2.1}{
    \foreach \b in {-1,0,...,2.1}{
    
    \draw[gray,extended line=0.5cm] ($\b*(D)-(B)$) -- ($\b*(D)+2*(B)$);
    \draw[gray,extended line=0.5cm] ($\a*(B)-(D)$) -- ($\a*(B)+2*(D)$); }}
    
    %Drow lattice points
    \foreach \a in {-1,0,...,2.1}
    {
      \foreach \b in {-1,0,...,2.1}
      {
          \filldraw[] ($\a*(B) + \b*(D)$) circle(2pt);
      }
    }
    \end{tikzpicture}
    
    \end{document}
    

    在此处输入图片描述

  3. 对每一“行”使用固定颜色:

    \documentclass[tikz]{standalone}
    \usetikzlibrary{calc}
    
    \tikzset{
       fundamental/.pic={
           \draw[,scale=0.4,black,fill=\colora!80!\colorb,opacity=0.7,rotate around=#1] 
          (60:3) -- ($(0:3) + (60:3) - (30:{3/sqrt(3)})$) -- (0:3) -- (30:{3/sqrt(3)}) -- (60:3);
      }
    }
    
    \begin{document}
    \begin{tikzpicture}[scale=0.4, % Lattice Fundamental domaine q=2
      extended line/.style={shorten >=-#1,shorten <=-#1},
      extended line/.default=1cm]
    \coordinate (A) at (0,0);
    \coordinate (B) at (0:3); %Omega_1
    \coordinate (D) at (60:3); %Omega_2
    \coordinate (C) at ($(B) +(D)$);
    \coordinate (F) at (30:{3/sqrt(3)});
    \coordinate (F') at ($(C) - (F)$);
    
    \clip ($-1.5*(D)-1.5*(B)$) rectangle ($2.5*(B)+2.5*(D)$);
    
    \foreach \a/\colora in {-1/red,0/green,1/blue,2/purple}
    {
      \foreach \b/\colorb in {-2/yellow,-1/magenta,0/gray,1/orange}
      {
        \begin{scope}
        \pic at ($ \a*(B) + \b*(D)$ ) {fundamental={240:(60:3)}}; 
        \pic at ($ \a*(B) + \b*(D)$ ) {fundamental={120:(60:3)}}; 
        \pic at ($ \a*(B) + \b*(D)$ ) {fundamental={0:(60:3)}}; 
        \end{scope}
      }
    }
    
    %Draw lattice lines
    \foreach \a in {-1,0,...,2.1}{
    \foreach \b in {-1,0,...,2.1}{
    
    \draw[gray,extended line=0.5cm] ($\b*(D)-(B)$) -- ($\b*(D)+2*(B)$);
    \draw[gray,extended line=0.5cm] ($\a*(B)-(D)$) -- ($\a*(B)+2*(D)$); }}
    
    %Drow lattice points
    \foreach \a in {-1,0,...,2.1}
    {
      \foreach \b in {-1,0,...,2.1}
      {
          \filldraw[] ($\a*(B) + \b*(D)$) circle(2pt);
      }
    }
    \end{tikzpicture}
    
    \end{document}
    

    在此处输入图片描述

相关内容