答案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 提供的灵活性和控制力。
我渴望听到您可能建议的任何想法、反馈或进一步的改进!
此致
基文