Minimum bounding rectangle (MBR) 最小外包矩形
在已知物體的邊界時,用其外接矩形的尺寸來刻畫它的基本形狀是最簡單的方法。
正文
如果僅計(jì)算其在坐標(biāo)系方向上的外接矩形是最簡單的,只需計(jì)算物體邊界點(diǎn)的最大和最小坐標(biāo)值,就可得到物體的水平和垂直跨度。但通常需要計(jì)算反映物體形狀特征的主軸方向上的長度和與之垂直方向上的寬度,這樣的外接矩形是物體最小的外接矩形(MER-Minimum Enclosing Rectangle)。
計(jì)算MER的一種方法是將物體在90度范圍內(nèi)等間隔地旋轉(zhuǎn),每次記錄其坐標(biāo)系方向上的外接矩形參數(shù),取其面積為最小的矩形的參數(shù)為主軸意義下的長度和寬度。通常主軸可以通過矩(moments)的計(jì)算得到,也可以用求物體的最佳擬合直線的方法求出。
1、獲取幾何對象的最小外接矩形,并得到其面積值賦給變量AreaMin;
2、對幾何對象進(jìn)行旋轉(zhuǎn)一個角度Φ,并求旋轉(zhuǎn)后的幾何對象的最小外接矩形,獲得其面積值賦給變量AreaTmp;
3、比較AreaTmp和AreaMin的大小,將小面積值賦給AreaMin,此時的角度值賦給一個公共變量;
4、循環(huán)執(zhí)行第2、3步的過程,最終獲取一個最小的面積值以及與之相對應(yīng)的旋轉(zhuǎn)角度;
5、得到了最合適的旋轉(zhuǎn)角度β后,我們可以將旋轉(zhuǎn)后的矩形反旋轉(zhuǎn)一個β角度,這樣就可以獲得我們需要的斜矩形了。
///////////////////////////////////////////////
GetRgnBox得到包含一個區(qū)域的最小的矩形;
判斷兩個區(qū)域的交集,一般是根據(jù)其中一個區(qū)域的邊界點(diǎn)是否在另一個區(qū)域內(nèi),利用PtInRegion來判斷.
GetRgnBox
The GetRgnBox 函數(shù) retrieves the bounding rectangle of the specified region.
int GetRgnBox(
HRGN hrgn, // handle to a region LPRECT lprc // bounding rectangle); Parametershrgn [in] Handle to the region. lprc [out] Pointer to a RECT structure that receives the bounding rectangle in logical units.
為了提高空間檢索效率,有兩個解決的途徑。首先,可以計(jì)算每個地物的MBR,這樣進(jìn)行空間關(guān)系計(jì)算時,可以先通過外包矩形來判斷,可以排除掉根本不可能具有相交或者包含關(guān)系的情形,然后再按照常規(guī)的算法(如射線算法等等)進(jìn)行計(jì)算。其次,考慮到采用MBR后,仍舊要計(jì)算每一個地物Ai,當(dāng)?shù)匚飻?shù)目很多時,依然需要較長的查找時間。解決該問題的一個方案是將數(shù)據(jù)庫的空間范圍進(jìn)行分割,一般是劃分成為矩形,然后計(jì)算并記錄每個矩形包含或者相交的地物,形成空間索引。在進(jìn)行空間檢索時,根據(jù)給定的點(diǎn)(或區(qū)域)得到其對應(yīng)的索引塊,這樣就可以只判斷與索引塊相關(guān)的地物,從而減少了查找時間。通常前一個操作稱為精化,后一個操作叫做過濾。
參考資料 >