algorithm - 绘制给定区域的像素圆

标签 algorithm draw bit dithering

我有一些区域 X x Y 像素,我需要一个像素一个像素地填充它。问题是在任何给定时刻绘制的形状都应尽可能圆。

我认为这个算法是 Ordered Dithering 的子集,在将灰度图像转换为一位时,但我找不到任何引用资料,也无法自己弄清楚。

我知道 Bresenham 圆,但它用于绘制特定半径而不是面积的圆。

我为 10 x 10 像素网格创建了所有填充百分比的动画。由于整个区域是 10x10=100px,因此每一帧正好是 1% inc。

pixel animation

最佳答案

一个填充的圆盘有等式

(X - Xc)² + (Y - Yc)² ≤ C.

当您增加 C 时,满足方程的点数会增加,但由于对称性,它会突然增加。

要得到想要的填充效果,可以对每个像素点计算(X - Xc)² + (Y - Yc)²,根据这个值排序,让像素点一个一个的出现(如果您知道所需的像素数,也可以一次完成)。

你可以用不同的方式打破平局:

  • 使用稳定排序保持计算像素时的原始顺序;

  • 打乱等值的运行;

  • 稍微改变中心坐标,这样就没有关系了。


使用去中心技巧进行填充。

值(value)观:

enter image description here

顺序:

enter image description here

关于algorithm - 绘制给定区域的像素圆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56343457/

相关文章:

algorithm - 计算边缘连通性的有效算法?

algorithm - 互置换算法

C - 将一个字节的三位与一个字节组合

java - 在 Java 中使用位串设置问题

python - 检测损坏数据的算法?

java - Pollard Rho 算法陷入循环

Java - 拖动绘制的对象

java - 如何在 Android 中将文本绘制到图像上

一段时间后 Android Zoom 没有响应?

c++ - 字符大小困惑