繁体   English   中英

所有n个矩形的相交面积

[英]Intersection area of all n rectangles

我不知道该如何开始,最好是为我提供算法帮助。 问题如下,对于n矩形,将调用一个输入来定义每个矩形。 n极限是1000 ,而坐标的极限是10000

给出了4个数字,

x1, x2, y1, y2

这样矩形就由

x=x1, x=x2, y=y1, y=y2  

当我需要找到所有这些矩形之间的相交区域时,就会出现问题。 知道算法应该如何工作吗?

我的想法:我实现了一个循环,该循环首次创建了以相交正方形为边界的坐标。 然后对于每个新循环,我检查下一个输入的坐标是否相交。

将相交矩形设置为第一个矩形,然后找到与第二个矩形的相交并更新相交,然后对剩下的所有矩形重复此操作。

用伪代码:

std::vector<Rect> rects;
Rect intersection = rects[0];
for( int i = 1; i < rects.size(); ++i)
{
    intersection = getIntersection( intersection, rect[i] );
}

您只需要找到4个项目:左侧位置和顶部位置的最大值,右侧位置和底部位置的最小值。 (假设X和Y的正轴指向右侧和下方,这在CS中很常见)

因此,最小的代码可能是:

int lv = -1, tv = -1, rv = 10001, bv = 10001;
int l, t, r, b;
for (int i = 0; i < N; i++) {
    // cin >> l >> t >> r >> b; Input
    lv = max(lv, l);
    tv = max(tv, t);
    rv = min(rv, r);
    bv = min(bv, b);
}

然后,如果lv <= rv && tv <= bv ,则有一个由这4个值指定的交集。 如果lv > rv || tv > bv lv > rv || tv > bv ,没有常见的交集。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM