Tikz 中的像素化圆圈

Tikz 中的像素化圆圈

我正在尝试在 TikZ 中生成类似这样的内容:

像素化 Minecraft 圆圈

可以为任意半径生成这里,使用此代码

我知道如何在 TikZ 中手动执行此操作,但这真的很麻烦。由于我在手册中看到有一种方法可以在 TikZ 中执行 for 循环,因此一定有一种方法可以生成像素化(/minecraft)圆圈。

关于如何做到这一点有什么指点吗?

答案1

一个非常简短的提议。

\documentclass[tikz,border=3.14mm]{standalone}
\begin{document}
\begin{tikzpicture}
 \draw[gray](-5,-5) grid[step=0.25] (5,5);
 \foreach \X in {-4.875,-4.625,...,4.875}
 {\foreach \Y in {-4.875,-4.625,...,4.875}
 {\pgfmathtruncatemacro{\itest}{sqrt(abs(\X*\X+\Y*\Y-4*4))}
 \ifnum\itest=0
 \draw[gray,fill=red] (\X-0.125,\Y-0.125) rectangle (\X+0.125,\Y+0.125);
 \fi}}
\end{tikzpicture}
\end{document}

在此处输入图片描述

还有一些可以调整参数的东西。该fudge因素决定了圆的“宽度”。

\documentclass[tikz,border=3.14mm]{standalone}
\begin{document}
\begin{tikzpicture}[declare function={radius=4.8;xmax=5;xstep=0.25;fudge=0.9;}]
 \draw[gray](-xmax,-xmax) grid[step=xstep] (xmax,xmax);
 \pgfmathsetmacro{\Xmax}{xmax-xstep/2}
 \pgfmathsetmacro{\Xnext}{xmax-3*xstep/2}
 \foreach \X in {-\Xmax,-\Xnext,...,\Xmax}
 {\foreach \Y in {-\Xmax,-\Xnext,...,\Xmax}
 {\pgfmathtruncatemacro{\itest}{fudge*sqrt(abs(\X*\X+\Y*\Y-radius*radius))}
 \ifnum\itest=0
 \draw[gray,fill=red] (\X-xstep/2,\Y-xstep/2) rectangle (\X+xstep/2,\Y+xstep/2);
 \fi}}
\end{tikzpicture}
\end{document}

在此处输入图片描述

这是实施处方的尝试tch 指出的网站

\documentclass[tikz,border=3.14mm]{standalone}
\begin{document}
\begin{tikzpicture}[declare
function={radius=4.8;xmax=5;xstep=0.25;},pixel at/.style n
args={2}{insert path={({#1*xstep},{#2*xstep}) rectangle
++(xstep,xstep)}}]
 \draw[gray](-xmax,-xmax) grid[step=xstep] (xmax,xmax);
 \pgfmathtruncatemacro{\Ymax}{int(cos(45)*radius/xstep)}
 \foreach \Z in {0,90,180,270}
 {\foreach \Y in {-\Ymax,...,\the\numexpr\Ymax+1\relax}
 {\pgfmathtruncatemacro{\myx}{sqrt(radius*radius-\Y*\Y*xstep*xstep)/xstep}
 \draw[rotate around={\Z:(0,0)},gray,fill=red,pixel at={\myx}{\Y}];}}
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

抱歉顶了这篇文章,但我最近偶然发现了这个帖子,发现讨论与我目前正在使用 TikZ 进行的项目非常相关。正如您所讨论的那样,在 TikZ 中创建像素化的 Minecraft 圆圈的挑战相当有趣,并且与我的兴趣非常吻合。

为了补充之前的对话,我想分享一些见解和一种可能的方法。正如你们许多人指出的那样,在 TikZ 中手动生成这些圆圈可能非常繁琐。但是,正如之前的回复中所展示的那样,在 TikZ 中使用循环提供了一种更有效的方式来应对这一挑战。

汲取灵感圆形发生器 minecraft,我相信我们可以增强 TikZ 方法以实现类似的效果。该网站对于生成任意半径的圆非常方便,为像素化圆提供了清晰的视觉模板。

基于此,我对 TikZ 代码提出了以下修改建议,旨在复制在 Minecraft Circle Generator 上看到的效果:

\documentclass[tikz,border=3.14mm]{standalone}
\begin{document}
\begin{tikzpicture}[declare function={radius=4.5; xstep=0.25;}]
 \draw[gray](-5,-5) grid[step=xstep] (5,5);
 \foreach \X in {-5,-4.75,...,5}
  {\foreach \Y in {-5,-4.75,...,5}
   {\pgfmathtruncatemacro{\itest}{sqrt(abs(\X*\X+\Y*\Y-radius*radius))}
    \ifnum\itest=0
     \draw[gray,fill=blue] (\X-xstep/2,\Y-xstep/2) rectangle (\X+xstep/2,\Y+xstep/2);
    \fi
   }
  }
\end{tikzpicture}
\end{document}

在此代码中,radius 和 xstep 是可调整的参数,分别控制圆的大小和像素大小。循环遍历网格,其中的条件使用勾股定理检查某个点是否位于圆的圆周上。如果是,则填充该网格方块。

此方法应该允许创建类似于 Minecraft 圆圈生成器的像素化圆圈,但具有 TikZ 提供的灵活性和控制力。

我渴望听到您可能建议的任何想法、反馈或进一步的改进!

此致

基文

相关内容