TikZ로 대각선으로 분할된 그리드를 그리는 방법은 무엇입니까?

TikZ로 대각선으로 분할된 그리드를 그리는 방법은 무엇입니까?

다이어그램을 그리려면

여기에 이미지 설명을 입력하세요

다음 코드를 작성했습니다.

\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}

하지만 이것은 생산

여기에 이미지 설명을 입력하세요

TikZ를 사용하여 실제 그림을 어떻게 그릴 수 있나요?

답변1

이런 뜻인가요?

여기에 이미지 설명을 입력하세요

코드:

\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}

이 솔루션을 사용하면 키를 사용하여 사각형 수를 선택할 수 있습니다 num quad. 이 선택 후 자동으로 이동이 계산됩니다. 그러나 이러한 기능은 설계되었으므로 num quad=5약간의 조정이 필요할 수 있습니다.

답변2

PSTricks와 함께.

하나의:

여기에 이미지 설명을 입력하세요

\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}

다수의:

여기에 이미지 설명을 입력하세요

\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}

답변3

가벼운 코드(다음 코드의 일부는 Qrrbrbirlbel의 답변에서 나왔습니다). 주요 아이디어는 cm={a,b,c,d,(e,f)}. 여기서 생각해 보면 이 방법은 코드 복제(확장)를 방지합니다.

\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}

여기에 이미지 설명을 입력하세요

답변4

그냥 재미를 위해 매트릭스 버전입니다.

\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}

여기에 이미지 설명을 입력하세요

관련 정보