Basic Member
|
你這個問題,約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的正方形能包住的點越多,就越優先把他放上去,並把那些點都擦掉,然後再重複找。
你參考參考吧
|