정사각형 그리드의 테두리 두께 증가

정사각형 그리드의 테두리 두께 증가

방금 생성한 다이어그램의 코드는 다음과 같습니다.

\begin{tikzpicture}[fill=black]
\matrix[matrix of nodes, nodes={draw,minimum size=1cm}, nodes in empty cells,column sep=-\pgflinewidth,row sep=-\pgflinewidth](M){
           &          &   |[fill]|   &      &     &   |[fill]|   &          &    &   |[fill]|     \\

           & |[fill]| &              &              &      |[fill]|     &              &     &      |[fill]|  &      \\
  |[fill]| &         &         &        |[fill]|      &         &              &    |[fill]|      &       &      \\
          &          &   |[fill]|   &      &     &   |[fill]|   &          &    &   |[fill]|     \\
           & |[fill]| &              &              &      |[fill]|     &              &     &      |[fill]|  &      \\
     |[fill]| &         &         &        |[fill]|      &         &              &    |[fill]|      &       &      \\
          &          &   |[fill]|   &      &     &   |[fill]|   &          &    &   |[fill]|     \\
           & |[fill]| &              &              &      |[fill]|     &              &     &      |[fill]|  &      \\
 |[fill]| &         &         &        |[fill]|      &         &              &    |[fill]|      &       &      \\         
};
\end{tikzpicture}

기본적으로 이 코드는 9 x 9 보드를 흰색과 검은색 사각형으로 채우는 데 도움이 됩니다. 이제 이 보드를 9개의 3 x 3 정사각형으로 분해하면 블록의 각 3 x 3 정사각형 경계 주위에 독특한 두꺼운 테두리를 만들 수 있는 방법이 있는지 궁금합니다. 즉, 각 3x3 정사각형의 경계가 다른 선에 비해 더 견고한 검은색 음영이 되기를 원합니다. (이것은 내가 결과를 증명하려고 노력하고 있기 때문에 위의 작업을 수행하면 내 요점을 더 잘 설명하는 데 도움이 될 것입니다.)

편집하다:흠, 내가 얻은 응답에 따르면 이를 수행하는 몇 가지 방법이 있는 것 같습니다. 하나는 행렬 목록을 만든 다음 각 셀을 검은색으로 할지 흰색으로 할지 여부를 개별적으로 지정하는 것입니다. 실제로 이 방법은 훨씬 더 직관적이며 보드가 너무 크지 않은 한 상대적으로 실행 가능합니다. 두 번째 방법은 모듈러 연산을 깔끔하게 적용하는 방법으로, 이해하는 데 약간의 시간이 걸리지만, 보드 전체를 쉽게 색상으로 채울 수 있다는 것이 큰 장점이며, 큰 보드를 사용할 때 유리합니다. 적어도 이것이 내가 모은 것입니다.

답변1

테두리를 하나만 그릴 것인지 아니면 모두 그릴 것인지 알 수 없어서 두 상황 모두에 대한 코드를 추가했습니다. 기본 요점은 행렬의 노드에 이름이 있으므로 다음을 사용할 수 있다는 것입니다.

\draw[blue,thick] (M-1-1.north west) rectangle (M-3-3.south east);

전체 코드:

\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}
\matrix[matrix of nodes, nodes={draw,minimum size=1cm}, nodes in empty cells,column sep=-\pgflinewidth,row sep=-\pgflinewidth](M){
           &          &   |[fill]|   &      &     &   |[fill]|   &          &    &   |[fill]|     \\

           & |[fill]| &              &              &      |[fill]|     &              &     &      |[fill]|  &      \\
  |[fill]| &         &         &        |[fill]|      &         &              &    |[fill]|      &       &      \\
          &          &   |[fill]|   &      &     &   |[fill]|   &          &    &   |[fill]|     \\
           & |[fill]| &              &              &      |[fill]|     &              &     &      |[fill]|  &      \\
     |[fill]| &         &         &        |[fill]|      &         &              &    |[fill]|      &       &      \\
          &          &   |[fill]|   &      &     &   |[fill]|   &          &    &   |[fill]|     \\
           & |[fill]| &              &              &      |[fill]|     &              &     &      |[fill]|  &      \\
 |[fill]| &         &         &        |[fill]|      &         &              &    |[fill]|      &       &      \\         
};
\draw[blue,thick] (M-1-1.north west) rectangle (M-3-3.south east);
\end{tikzpicture}

\begin{tikzpicture}
\matrix[matrix of nodes, nodes={draw,minimum size=1cm}, nodes in empty cells,column sep=-\pgflinewidth,row sep=-\pgflinewidth](M){
           &          &   |[fill]|   &      &     &   |[fill]|   &          &    &   |[fill]|     \\

           & |[fill]| &              &              &      |[fill]|     &              &     &      |[fill]|  &      \\
  |[fill]| &         &         &        |[fill]|      &         &              &    |[fill]|      &       &      \\
          &          &   |[fill]|   &      &     &   |[fill]|   &          &    &   |[fill]|     \\
           & |[fill]| &              &              &      |[fill]|     &              &     &      |[fill]|  &      \\
     |[fill]| &         &         &        |[fill]|      &         &              &    |[fill]|      &       &      \\
          &          &   |[fill]|   &      &     &   |[fill]|   &          &    &   |[fill]|     \\
           & |[fill]| &              &              &      |[fill]|     &              &     &      |[fill]|  &      \\
 |[fill]| &         &         &        |[fill]|      &         &              &    |[fill]|      &       &      \\         
};
\draw[blue,thick] foreach \X in {1,2,3} 
{foreach \Y in {1,2,3}
{(M-\the\numexpr3*\Y-3+1\relax-\the\numexpr3*\X-3+1\relax.north west) rectangle
(M-\the\numexpr3*\Y-3+3\relax-\the\numexpr3*\X-3+3\relax.south east)}};
\end{tikzpicture}
\end{document}

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

답변2

구문을 사용하는 다른 방법 x ? y : z(x이면 y이면 z). 두께는 로 자유롭게 조절됩니다 [line width]. 옵션은 명령 [shift={(1,1)}]정의에 따른 것입니다 grid.

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

\documentclass[tikz,border=5mm]{standalone}
\begin{document}
\begin{tikzpicture}
\def\n{9}
\foreach \i in {1,...,\n} 
\foreach \j in {1,...,\n}
{
\pgfmathparse{mod(\i+\n-\j,3) ? "white" : "black"}
\edef\colour{\pgfmathresult}
\fill[\colour] (\i,\j) rectangle +(1,1);
}
\draw (1,1) grid (\n+1,\n+1);
\draw[magenta,line width=1pt,shift={(1,1)}] (0,0) grid[step=3cm] (\n,\n);
\end{tikzpicture}
\end{document}

관련 정보