¿Cómo dibujar una cuadrícula dividida en diagonal con TikZ?

¿Cómo dibujar una cuadrícula dividida en diagonal con TikZ?

Para dibujar el diagrama

ingrese la descripción de la imagen aquí

He escrito el siguiente código:

\documentclass[11pt]{article}
\usepackage{amsmath,tikz}

\begin{document}
\begin{tikzpicture}
 \draw (0,0)--(0,8)--(10,8)--(10,0)--(0,0);
\draw (0,7)--(10,7);
\draw (0,6)--(10,6);
\draw (0,5)--(10,5);
\draw (0,4)--(10,4);
\draw (0,3)--(10,3);
\draw (0,2)--(10,2);
\draw (0,1)--(10,1);
\draw (1,0)--(1,8);
\draw (2,0)--(2,8);
\draw (3,0)--(3,8);
\draw (4,0)--(4,8);
\draw (5,0)--(5,8);;
\draw (6,0)--(6,8);
\draw (7,0)--(7,8);
\draw (8,0)--(8,8);
\draw (9,0)--(9,8);
\draw (0,-1)--(10,9);
\end{tikzpicture}

\end{document}

pero esto produce

ingrese la descripción de la imagen aquí

¿Cómo puedo dibujar la imagen real usando TikZ?

Respuesta1

¿Te refieres a algo como esto?

ingrese la descripción de la imagen aquí

El código:

\documentclass[png,border=10pt,tikz]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc,decorations.shapes}

\tikzset{
  decorate with/.style args={#1 separated by #2}{
    fill,
    decorate,decoration={shape backgrounds,shape=#1,shape size=1.5mm,
    shape sep={#2, between borders}}
  }
}

\pgfkeys{/tikz/.cd,
   num quad/.initial=5,
   num quad/.get=\numquad,
   num quad/.store in=\numquad,
}

\begin{document}


\begin{tikzpicture}[x=0.5025cm,y=0.5025cm,line cap=round]
\foreach \x [count=\xi] in {1,...,\numquad}{
  \foreach \y [count=\yi] in {\x,...,\numquad}{
    \node [draw, minimum size=0.5cm,outer sep=0pt,inner sep=0pt] (u-\xi\yi) at (\xi,-\yi) {};
  }
}

\pgfmathsetmacro\shiftx{\numquad-0.5}
\pgfmathsetmacro\shifty{0.5*(\numquad+1)}

\begin{scope}[xshift=\shiftx cm,yshift=-\shifty cm]
\foreach \x [count=\xi] in {1,...,\numquad}{
  \foreach \y [count=\yi] in {\x,...,\numquad}{
    \node [draw, minimum size=0.5cm,outer sep=0pt,inner sep=0pt] (d-\xi\yi) at (-\xi,\yi) {};
  }
}
\end{scope}

\pgfmathsetmacro\halfnumquad{\numquad/2}

\begin{scope}[xshift=0.25 cm]
\path[decorate with=circle separated by 0.125cm] (\halfnumquad,0.35)--($(\halfnumquad,0.35)+(0,1.5)$) ;
\end{scope}

\begin{scope}[xshift=\shiftx cm,yshift=-0.25cm]
\path[decorate with=circle separated by 0.125cm] (0.35,-\halfnumquad)--($(0.35,-\halfnumquad)+(1.5,0)$) ;
\end{scope}

\draw[very thick] ([yshift=-0.5cm]u-1\numquad.south)--([yshift=0.5cm]d-1\numquad.north);
\end{tikzpicture}

\end{document}

Esta solución permite seleccionar el número de casillas con la tecla num quad: automáticamente, tras esta selección se calculan los desplazamientos. Sin embargo, están diseñados para num quad=5ello, por lo que quizás sea necesario realizar algún ajuste.

Respuesta2

Con PSTricks.

Soltero:

ingrese la descripción de la imagen aquí

\documentclass[pstricks]{standalone}
\usepackage{pst-node,multido}
\psset{unit=5mm,dimen=middle,nodesep=-1}

\def\Atom#1{%
    \multido{\ix=1+1,\iy=#1+-1}{#1}{%
        \psframe(\ix,\iy)
        \multips(!-.5 #1 2 div)(-.5,0){3}{\qdisk(0,0){2pt}}}}

\def\Molecule#1{%
    \begin{pspicture}(-1,-1)(\numexpr#1+5,\numexpr#1+2)
    \rput{-90}(!0 #1){\Atom{#1}}
    \rput(!#1 3 add 0){\psscalebox{-1 1}{\Atom{#1}}}
    \pcline(!1.5 0)(!#1 1.5 add #1)
    \end{pspicture}}


\begin{document}
\Molecule{4}
\end{document}

Múltiple:

ingrese la descripción de la imagen aquí

\documentclass{article}
\usepackage[a4paper,margin=1cm]{geometry}
\usepackage{multicol}
\pagestyle{empty}

\usepackage{pst-node,multido}
\psset{unit=5mm,dimen=middle,nodesep=-1}

\def\Atom#1{%
    \multido{\ix=1+1,\iy=#1+-1}{#1}{%
        \psframe(\ix,\iy)
        \multips(!-.5 #1 2 div)(-.5,0){3}{\qdisk(0,0){2pt}}}}

\def\Molecule#1{%
    \begin{pspicture}(-1,-1)(\numexpr#1+5,\numexpr#1+2)
    \rput{-90}(!0 #1){\Atom{#1}}
    \rput(!#1 3 add 0){\psscalebox{-1 1}{\Atom{#1}}}
    \pcline(!1.5 0)(!#1 1.5 add #1)
    \end{pspicture}}

\begin{document}
\begin{multicols}{2}
\enumerate
\multido{\i=1+1}{11}{\item \raisebox{-0.5\height}{\Molecule{\i}}}
\endenumerate
\end{multicols}
\end{document}

Respuesta3

Un código de luz (algunas partes del siguiente código provienen de la respuesta de Qrrbrbirlbel). La idea principal es utilizar una transformación con cm={a,b,c,d,(e,f)}. Aquí una reflexión, este método evita duplicar (extender) el código.

\documentclass{article}
\usepackage{tikz}
\begin{document}
\newcommand\mysubfig[1]{%
\begin{scope}[#1]
    \foreach \Row in {1,...,8}{\draw (0,\Row-1) --++(\Row,0) --++(0,8+1-\Row);}
    \draw (8,8) -| (0,0);
    \foreach \Dot in {0,1,2}{\fill (4,9+\Dot/2) circle [radius=.125cm];}
\end{scope}}

\begin{tikzpicture}
\draw (0,0) -- (10,10);
  \mysubfig{shift={(0,2)}}% or cm={1,0,0,1,(0,2)}
  \mysubfig{cm={0,1,1,0,(4,2)}]}% exchange x and y then apply a translation (4,2)
\end{tikzpicture}
\end{document}

ingrese la descripción de la imagen aquí

Respuesta4

Sólo por diversión, una versión matricial.

\documentclass[tikz]{standalone}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}
\matrix[row sep=-0.8pt,column sep=-0.8pt,
small boxes/.style={minimum size=3mm,outer sep=0,anchor=base,thick},
execute at empty cell={
\ifnum\numexpr\pgfmatrixcurrentrow+\pgfmatrixcurrentcolumn\relax<12%
    \ifnum\numexpr\pgfmatrixcurrentrow+\pgfmatrixcurrentcolumn\relax>9%
        \node[small boxes](m-\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn){};
    \else
        \node[small boxes,draw](m-\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn){};
    \fi
\else
    \node[small boxes,draw](m-\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn){};
\fi
}] (m) {
&&&&&&&&&&\\
&&&&&&&&&&\\
&&&&&&&&&&\\
&&&&&&&&&&\\
&&&&&&&&&&\\
&&&&&&&&&&\\
&&&&&&&&&&\\
&&&&&&&&&&\\
};
\draw ([yshift=-3mm]m-8-1.south) -- ([yshift=3mm]m-1-11.north);
\foreach \x in {1,2,3}{
\fill ([yshift=2mm+3*\x mm]m-1-4.north east) circle (3pt);
\fill ([xshift=2mm+3*\x mm]m-4-11.south east) circle (3pt);
}
\end{tikzpicture}
\end{document}

ingrese la descripción de la imagen aquí

información relacionada