作为更复杂算法的一部分,我需要以下内容:
如何找到每一步要填充的点,以便在每一步结束时我都完全归档了圆圈?
我正在考虑一些圆形光栅化算法,但这会导致填充时出现一些空白。另一种方法是使用一些数学形态学运算,例如膨胀,但这似乎在计算上很昂贵。
我通常正在寻找在任意形状上执行此操作的方法,但最初圆形算法就足够了。
您最好的选择是绘制并填充一个稍大的红色圆圈,然后绘制并填充绿色圆圈。然后在下一次迭代中重做。
只绘制 1px 边框是相当棘手的。您的示例图像甚至不太一致。在某些地方,白色像素出现在绿色像素的对角线上,而在其他地方,该像素为红色。
编辑:
我目前的圆形解决方案。
基于众所周知的中点圆算法
该算法可应用于其他类型的参数化形状(例如基于贝塞尔曲线)
对于非参数形状(基于像素)图像卷积(膨胀),具有中心对称(圆形)的内核。换句话说,对于形状中的每个像素,寻找半径较小的圆中的邻居并将它们设置为集合的一部分。 (昂贵的计算)
另一种选择是绘制一个带有 2 像素宽红色边框的圆形/形状,然后绘制一个没有边框的绿色实心圆形/形状。应该留下 大约 1px 宽的边缘。 这取决于您使用的任何技术如何将线条解析为像素。
圆形算法往往针对绘制圆形进行优化......请参阅此处的链接
绘制半径为 1, 3, 5, 7, 9, ... 的圆,并根据需要填充它们之间的空间,或绘制所有半径 1, 2, 3, 4, 5, ... 并填充孔适当的时间与到中心的距离成正比。
这两种方法都需要提前绘制下一个半径圆并在下一步中使用它。