2015-12-02 70 views
0

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

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

schematic view

解决方案涉及斯威夫特/ iOS版不胜感激...

回答

0

你只需要适应图像周围的矩形(我假设图像大小切成只是围住形象没有任何白边)进入圈子。正如你所知道的圈子(我希望)的半径,对于图像的比例系数应该是

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

然后集中在圆和完成缩放后的图像。

+0

是的,这是一个可能的解决方案,但它可能会放弃几个像素。在我描述的例子中,看看右上角。国旗的边界框会清晰地显示在灰色区域,因此您提案的缩放比所需的小。更为极端的例子是等边三角形或圆形。 – Stefan

+0

我正在纠正... – TheEye

+0

当然,您还会遇到图像的附加问题,即不能按比例放大以适应圆圈,在这种情况下,您还必须定义适合图像的哪个尺寸。 – TheEye

1

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

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

enter image description here

查找“最小包围圆Nayuki”什么似乎是一个干净的执行随机算法。

+0

由于语言的年轻化,恐怕你会在Swift中找到很少的算法资源。 –