【问题标题】:Drawing pixel circle of given area绘制给定区域的像素圆
【发布时间】:2019-05-28 13:33:08
【问题描述】:

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

我认为这个算法是有序抖动的子集,在将灰度图像转换为一位时,但我找不到任何参考资料,也无法自己弄清楚。

我知道布雷森汉姆圆,但它是用来画一定半径的圆而不是面积。

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

【问题讨论】:

  • 所以粗略地说,结果将是矩形区域被以区域中间为中心的越来越大的圆盘填充?
  • 必须从中间开始吗?如果 X=3Y 并且该区域是 25%、50% 和 90% 满的,您能否展示您认为最圆的填充?
  • 到目前为止,YOU 尝试过什么?你在哪里卡住了?
  • 可能最简单的方法是使用 Dijkstra 算法按照与中心的距离递增的顺序查找像素。

标签: algorithm draw bit dithering


【解决方案1】:

填满的圆盘有等式

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

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

要获得所需的填充效果,您可以为每个像素计算(X - Xc)² + (Y - Yc)²,对该值进行排序,然后让像素一个接一个地出现(如果您知道所需的像素数,也可以一次性出现)。

你可以用不同的方式打破关系:

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

  • 随机播放等值;

  • 稍微改变中心坐标,使之不存在平局。


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

价值观:

订单:

【讨论】:

  • 非常感谢,这正是我一直在寻找的。​​span>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多