将不规则形状拟合成圆圈

时间:2015-12-02 08:46:41

标签: ios swift graphics geometry

我有一个alpha通道的位图,显示不规则的形状。我尝试缩放并移动形状以适合给定半径的圆。任何想法如何以有效的方式做到这一点?这必须在运行时计算。

精度可以是1..2像素,更重要的是不要切掉形状。我想这可以通过逐步调整偏移和比例值,绘制和检查碰撞来完成,但这听起来很昂贵。

schematic view

涉及Swift / iOS的解决方案非常受欢迎......

2 个答案:

答案 0 :(得分:2)

作为第一步,扫描图像以找到所有前景像素,并计算它们的凸包(使用monotone chain方法,采用线性时间O(N),因为您可以按排序顺序检测点)。这将大大减少要考虑的点数。

然后你可以找到smallest enclosing circle,它可以用线性时间O(H)构建。

enter image description here

查找Nayuki's Smallest Enclosing Circle以了解随机算法的干净实现。

答案 1 :(得分:0)

你只需要将图像的周围矩形(我想图像尺寸被剪切为仅将图像包围没有任何白色边框)放入圆圈中。如你所知圆的半径(我希望),图像的比例因子应为

scaleFactor = (circle diameter) / (longest diagonal of image)

然后将缩放的图像居中放在圆圈上并完成。