2015-12-02 110 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中找到很少的算法資源。 –