绘制给定区域的像素圆
Drawing pixel circle of given area
我有一些区域 X x Y 像素,我需要一个像素一个像素地填充它。问题是在任何给定的时刻绘制的形状应该尽可能圆。
我认为这个算法是 Ordered Dithering 的子集,在将灰度图像转换为一位时,但我找不到任何参考资料,也无法自己弄清楚。
我知道 Bresenham 圆,但它用于绘制特定半径而不是面积的圆。
我为 10 x 10 像素网格创建了所有填充百分比的动画。由于整个区域是 10x10=100px,所以每一帧正好是 1% inc.
填满的圆盘有等式
(X - Xc)² + (Y - Yc)² ≤ C.
当你增加C
时,满足方程的点数会增加,但由于对称性,它会爆发性地增加。
为了得到想要的填充效果,可以为每个像素计算(X - Xc)² + (Y - Yc)²
,根据这个值排序,让像素一个一个的出现(或者一次出现,如果你知道想要的数量)像素)。
您可以通过不同的方式打破平局:
使用稳定排序保持计算像素时的原始顺序;
打乱等值的游程;
稍微改变中心坐标,这样就没有关系了。
用 de-centering 技巧填充。
值:
订单:
我有一些区域 X x Y 像素,我需要一个像素一个像素地填充它。问题是在任何给定的时刻绘制的形状应该尽可能圆。
我认为这个算法是 Ordered Dithering 的子集,在将灰度图像转换为一位时,但我找不到任何参考资料,也无法自己弄清楚。
我知道 Bresenham 圆,但它用于绘制特定半径而不是面积的圆。
我为 10 x 10 像素网格创建了所有填充百分比的动画。由于整个区域是 10x10=100px,所以每一帧正好是 1% inc.
填满的圆盘有等式
(X - Xc)² + (Y - Yc)² ≤ C.
当你增加C
时,满足方程的点数会增加,但由于对称性,它会爆发性地增加。
为了得到想要的填充效果,可以为每个像素计算(X - Xc)² + (Y - Yc)²
,根据这个值排序,让像素一个一个的出现(或者一次出现,如果你知道想要的数量)像素)。
您可以通过不同的方式打破平局:
使用稳定排序保持计算像素时的原始顺序;
打乱等值的游程;
稍微改变中心坐标,这样就没有关系了。
用 de-centering 技巧填充。
值:
订单: