¿Cómo crear nodos en diferentes grillas unidas por flechas?

¿Cómo crear nodos en diferentes grillas unidas por flechas?

Soy principiante en tikz. Estoy intentando recrear la imagen a continuación (especialmente la cadena superior izquierda, superior derecha e inferior derecha). Empecé así:

\documentclass[tikz]{standalone}
\usepackage{amsmath}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}
  \tikzstyle{tensor} = [circle, inner sep = 0pt, minimum size = 0.2cm]
  \tikzstyle{QTensor} = [tensor, draw, fill=green!50, minimum size = 0.3cm]
  \tikzstyle{delta} = [tensor, draw, fill=red!50, minimum size = 0.4cm]
  \tikzstyle{ellipsisNode} = [tensor, minimum size = 0.7cm]

  % Draw delta tensors
  \foreach \x in {2, 4}
    \foreach \y in {2, 4}
      \node[delta] (\x-\y) at (\x, \y) {};

  % Draw Q tensors
  \foreach \x in {1, 3, 5}
    \foreach \y in {2, 4}
      {
      \node[QTensor] (\x-\y) at (\x, \y) {};
      \node[QTensor] (\y-\x) at (\y, \x) {};
      }

  % Draw ellipsis nodes
  \foreach \x in {0, 6}
    \foreach \y in {2, 4}
    {
    \node[ellipsisNode] (\x-\y) at (\x, \y) {$\cdots$};
    \node[ellipsisNode, rotate = 90] (\y-\x) at (\y, \x) {$\dots$};
    }

  % Connections
  \foreach \x in {0, ..., 5}
    \foreach \y in {2, 4}
    {
    \pgfmathtruncatemacro{\neighbor}{\x + 1};
    \draw (\x-\y) -- (\neighbor-\y);
    \draw (\y-\x) -- (\y-\neighbor);
    }

\end{tikzpicture}
\end{document}

La tarea me resulta desalentadora. No quiero seguir tantas coordenadas. ¿Necesito usar la biblioteca de posicionamiento? ¿Puedo utilizar sistemas de coordenadas relativas a diferentes puntos? ¿O puedo hacer imágenes tikz separadas y unirlas con una flecha?

Como necesito crear varias imágenes más de este tipo, estoy interesado en la solución idiomática más fácil de mantener.

redes tensoriales

Mi resultado hasta ahora:

lo que tengo hasta ahora

Respuesta1

Para fragmentos de código tikz que se reutilizan mucho, vale la pena definir un picsestilo para ellos. Luego, el código se puede dibujar usando \draw (0,0) pic{<pics name>};. Puedes leer más sobre esto en la sección 18.2 del manual de tikz (versión 3.0.1a). Una vez que haya definido imágenes para los componentes repetidos de sus diagramas, es relativamente sencillo colocarlas donde desee mediante \foreachbucles.

Haciéndolo de esta manera puedes producir las siguientes dos imágenes.

ingrese la descripción de la imagen aquí

usando el código:

\documentclass{article}
\usepackage{tikz}

\tikzset{% define pic styles
  pics/array/.style={
       code={\draw(-0.6,0)--+(1.2,0);
             \draw(0,-0.6)--+(0,1.2);
             \draw[fill=red!50] circle[red!50,radius=4pt](0,0);
             \foreach \a in {0.5,-0.5} {
                 \draw[fill=green!50] (0,\a) circle[radius=2pt];
                 \draw[fill=green!50] (\a,0) circle[radius=2pt];
             }
            }
       },
  pics/semiarray/.style={
       code={\draw[rounded corners, fill=yellow!20](-0.45,-0.45) rectangle +(0.9,0.9);
             \draw(-0.6,0)--+(1.2,0); % draw the "axes" over the top of the shading
             \draw(0,-0.6)--+(0,1.2); 
             \draw[fill=red!50] circle[red!50,radius=4pt](0,0);
             \draw[fill=green!50](-0.35,-0.1) -- +(0,0.2) arc(90:-90:0.1) -- cycle; % semicircles
             \draw[fill=green!50](0.35,0.1) -- +(0,-0.2) arc(270:90:0.1) -- cycle;
             \draw[fill=green!50](-0.1,0.35) -- +(0.2,0) arc(0:-180:0.1) -- cycle;
             \draw[fill=green!50](-0.1,-0.35) -- +(0.2,0) arc(0:180:0.1) -- cycle;
             }
       },
}

\begin{document}

\begin{tikzpicture}
    \foreach \x in {0,...,4} {
        \draw[dotted](-0.4,\x)--+(-0.5,0);
        \draw[dotted](4.4,\x)--+(0.5,0);
        \draw[dotted](\x,-0.4)--+(0,-0.5);
        \draw[dotted](\x,4.4)--+(0,0.5);
    }
    \foreach \x in {0,...,4} {
        \foreach \y in {0,...,4} {
           \draw(\x,\y) pic{array};
        }
    }
\end{tikzpicture}
\begin{tikzpicture}
    \foreach \x in {0,...,4} {
        \draw[dotted](-0.4,\x)--+(-0.5,0);
        \draw[dotted](4.4,\x)--+(0.5,0);
        \draw[dotted](\x,-0.4)--+(0,-0.5);
        \draw[dotted](\x,4.4)--+(0,0.5);
    }
    \foreach \x in {0,...,4} {
        \foreach \y in {0,...,4} {
           \draw(\x,\y) pic{semiarray};
        }
    }
\end{tikzpicture}

\end{document}

Observe que las coordenadas dentro de los picscomandos son relativas al lugar donde picse coloca. Los picscomandos también pueden tomar argumentos (ver, por ejemplo,Dibujo sencillo con TikZ).

información relacionada