2012-05-01 44 views
1

所以我有一個函數需要兩個MKMapRect,第二個與第一個相交。所以函數創建一個MKPolygon是不交叉部的第一RECT:從MKPolygon獲取最小數量的MKMapRects

 -(void) polygons:(MKMapRect)fullRect exclude:(MKMapRect)excludeArea{ 
     NSLog(@"Y is: %f height: %f",excludeArea.origin.y,excludeArea.size.height); 
     double top = excludeArea.origin.y - fullRect.origin.y; 
     double lft = excludeArea.origin.x - fullRect.origin.x; 
     double btm = (fullRect.origin.y + fullRect.size.height) - (excludeArea.origin.y + excludeArea.size.height); 
     double rgt = (fullRect.origin.x + fullRect.size.width) - (excludeArea.origin.x + excludeArea.size.width); 
     double ot = fullRect.origin.y, it = (ot + top); 
     double ol = fullRect.origin.x, il = (ol + lft); 
     double ob = (fullRect.origin.y + fullRect.size.height), ib = (ob - btm); 
     double or = (fullRect.origin.x + fullRect.size.width), ir = (or - rgt); 
     MKMapPoint points[11] = {{ol,it}, {ol,ot}, {or,ot}, {or,ob}, {ol,ob}, {ol,it}, {il,it}, {ir,it}, {ir,ib}, {il,ib}, {il,it}}; 
     MKPolygon *polygon = [MKPolygon polygonWithPoints:points count:11]; 
    } 

我的問題是,現在我怎麼得到MKMapRects從這個MKPolygon的最低數量?我做了一些Google搜索以及瀏覽論壇,但沒有發現任何東西。

編輯: 所以目標如下: 我有一個MKMapRect Rect1的,那我也矩形列表,rectList,這是MKMapRects與Rect1的交叉和我想要做的就是創建Rect1的的直線MKPolygon ,從rect1中移除rectList中所有MKMapRects的表面,然後從創建的直線MKPolygon中創建最小數量的MKMaprects。

現在問題是:我可以創建一個多邊形,當從rect1中刪除一個MKMapRect,但我不知道如何從rect1中刪除以下maprects,我不知道如何從最小集合中提取MkMapRects創建了多邊形。

問候 窺視

回答

0

我不知道如果這是你在找什麼,或者如果我完全理解這個問題,但如果你需要知道的是在一個多邊形矩形的最小數量這是通過從另一個矩形中減去一個矩形創建的,您應該可以通過檢查第一個矩形中包含的第二個矩形中的角點數來完成。在僞代碼中:

int minNumRects(MKRect r1, MKRect r2) { 
    int numPointsContained = 0; 
    for (Point p in r2) { 
     if (MKMapRectContainsPoint(r1, p)) { 
      numPointsContained++; 
     } 
    } 
    if (numPointsContained == 1) { 
     return 2; 
    } else if (numPointsContained == 2) { 
     return 3; 
    } else if (numPointsContained == 4) { 
     return 4; 
    } else { 
     return 0; 
    } 
} 

P.S. - 這假定矩形是軸對齊的,但據我所知這是MKRects的情況

+0

對不起,如果我的問題不清楚,但我想要做的是以下幾點:我有兩個MKMapRects並構造一個Rectilinear MKPolygon(這是第一個MKMapRect的表面減去第二個表面)。之後,我想提取覆蓋MKPolygon表面的最小數量的MKMapRects – Peep

+0

因此,您想要一個給定直線MKPolygon的方法返回一組最小的MKRects? – Mattia

+0

正確。爲我的帖子添加了一個編輯,使事情更清晰。簡而言之,我想要做的是:從第一個maprect中刪除幾個MKMaprects的區域(這將創建一個直線的MKPolygon),然後從中提取最小數量的MKMapRects。現在我的方法只從兩個MapRects創建一個直線Polygon。 – Peep