瀏覽單個文章
奶油銓
Basic Member
 

加入日期: Feb 2002
您的住址: 地球
文章: 20
你這個問題,約10年前我有寫過一個程式處理這種問題,當時是用f77 寫的不過當時我是用圓去包,但你現在是正方形。分享一下我的想法 (我的作法不能保證一定是最少),但你上面的例子我一定是3個就框住了。

我的想法如下:

(1) 先把圖形切成非常細的小方格 (越細就會找的越準)

(2) 有被小長方形包住的地方就定為1,沒包到的就定為0

(3) 找尋合適的中心位置,把你要框的130x130正方形放上去,計算範圍內的1的數目,累加數字越大的那個位置就蓋上去。

這個合適的中心位置,可以
(i) 自己寫程式判斷,哪邊長方形比較密集,就從那邊開始放正方形
(ii) 無腦的就scan每個格點。(以這個例子來說最多僅需要scan 140625個位置)

(4) 蓋上去後把被蓋住的數值寫成0,然後重複(3) 直到全部都變成0。

我自己原來是用 (3)-(i), 一開始想說從質心附近開始找,但遇到資料極端分散的情形,就失敗。後來有一陣子我想說只計算每個長方形方格的幾何中心間的距離,每次都從距離平方和最小數值的那個位置附近來找。 後來我趁空閒時也寫了一個用 (3)-(ii)的方式,(Scan格點的時候不用太密集),但是找到大約位置後要記得也再附近找一下。

整個概念就是把圖形用"0或1的點"來表示,放上去的130x130的正方形能包住的點越多,就越優先把他放上去,並把那些點都擦掉,然後再重複找。

你參考參考吧
 
舊 2012-10-09, 12:00 AM #12
回應時引用此文章
奶油銓離線中