Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 所有n个矩形的相交面积_C++_Algorithm_C++11_Area - Fatal编程技术网

C++ 所有n个矩形的相交面积

C++ 所有n个矩形的相交面积,c++,algorithm,c++11,area,C++,Algorithm,C++11,Area,我不知道如何开始,最好给我一个算法来帮助我。问题如下:对于n矩形,调用一个输入来定义每个矩形。n的极限为1000,而坐标的极限为10000 给出了4个数字 x1, x2, y1, y2 使矩形以 x=x1, x=x2, y=y1, y=y2 当我需要找到所有这些矩形之间的相交区域时,问题就出现了。知道算法应该如何工作吗 我的想法是:我实现一个循环,第一次创建相交正方形的边界坐标。然后,对于每个新循环,我检查下一个输入的坐标是否相交。将“相交矩形”设置为第一个矩形,然后查找与第二个矩形的相

我不知道如何开始,最好给我一个算法来帮助我。问题如下:对于
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] );
}
std::vector rects;
矩形交点=矩形[0];
对于(int i=1;i
将相交矩形设置为第一个矩形,然后查找与第二个矩形的相交并更新相交,然后对左侧的所有矩形重复此操作

在伪代码中:

std::vector<Rect> rects;
Rect intersection = rects[0];
for( int i = 1; i < rects.size(); ++i)
{
    intersection = getIntersection( intersection, rect[i] );
}
std::vector rects;
矩形交点=矩形[0];
对于(int i=1;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);
}
int-lv=-1,tv=-1,rv=10001,bv=10001;
int l,t,r,b;
对于(int i=0;i>l>>t>>r>>b;输入
lv=最大值(lv,l);
tv=最大值(tv,t);
rv=最小值(rv,r);
bv=min(bv,b);
}

然后你知道如果
lv你只需要找到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);
}
int-lv=-1,tv=-1,rv=10001,bv=10001;
int l,t,r,b;
对于(int i=0;i>l>>t>>r>>b;输入
lv=最大值(lv,l);
tv=最大值(tv,t);
rv=最小值(rv,r);
bv=min(bv,b);
}

那么你知道如果
lv,你会如何在一张纸上这样做?交叉点的坐标(或形状)是否有值得注意的属性?是否有任何约束?
n
?@PhamTrung的最大数量限制为1000是,如果你不能在Ivaylos纸上书写,而只在第二张纸上做笔记,每两个矩形写下一个数字,你会使用什么样的遍历系统。你能把它添加到问题中吗?那么
x
y
呢?在一张纸上你会怎么做?交叉点的坐标(或形状)是否有值得注意的属性?是否有任何约束?
n
?@PhamTrung的最大数量限制为1000是,如果你不能在Ivaylos纸上书写,而只在第二张纸上做笔记,每两个矩形写下一个数字,你会使用什么样的遍历系统。你能把它添加到问题中吗?
x
y
如何?
交点可以是多个矩形。@PhamTrung“所有这些矩形之间的相交区域”不是所有相交区域。
交点可以是多个矩形。@PhamTrung“所有这些矩形之间的相交区域”并非所有的交叉区域。