1

所以我有一个函数需要两个 MKMapRect,第二个与第一个相交。因此该函数创建了一个 MKPolygon,它是第一个没有相交部分的矩形:

     -(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];
     } 

我现在的问题是如何从这个 MKPolygon 中获得最小数量的 MKMapRects?我做了一些谷歌搜索以及浏览论坛,但没有找到任何东西。

编辑:所以目标如下:我有一个 MKMapRect rect1,然后我有一个矩形列表 rectList,它是与 rect1 相交的 MKMapRects,我想要做的是创建一个 rect1 的直线 MKPolygon,删除所有的表面从 rect1 的 rectList 中创建 MKMapRects,然后从创建的直线 MKPolygon 中创建最小数量的 MKMaprects。

现在的问题如下:从 rect1 中删除一个 MKMapRect 时,我能够创建一个多边形,但我不知道如何从 rect1 中删除以下 maprect,我不知道如何从创建的多边形中提取最小的 MkMapRect 集。

最好的问候窥视

4

1 回答 1

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;
    }
}

PS - 这假设矩形是轴对齐的,但据我所知,MKRects 就是这种情况

于 2012-05-01T22:50:22.830 回答