所有N矩形的交点区域
Intersection area of all n rectangles
我不知道如何开始,最好为我提供算法来提供帮助。问题如下,对于n
矩形,调用输入来定义每个矩形。n
的限制为1000
,而坐标的限制为10000
。
给出了4个数字,
x1, x2, y1, y2
使矩形受
的界限x=x1, x=x2, y=y1, y=y2
当我需要找到所有这些矩形之间的相交区域时,就会出现问题。知道该算法应该如何工作吗?
我的想法:我实现了一个循环,该循环第一次创建了坐标的坐标。然后,对于每个新循环,我检查下一个输入的坐标是否相交。
将相交矩形设置为第一个矩形,然后找到与第二个矩形并更新相交的交点,然后重复剩余的所有矩形。
pseudocode:
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
,则没有共同的交叉点。
相关文章:
- cmake在我的项目中所需的所有静态库都不成功
- 递归列出所有目录中的C++与Python与Ruby的性能
- 递归计数给定目录的文件和所有目录
- 基于多个条件处理地图中的所有元素
- 如何用转义符替换字符串中的所有特殊字符
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- 在gem5中打印文件中的所有cache_blocks
- 给定一个向量,如何找到该向量的所有子集和的原始索引
- C++将目录中的所有文件与::filesystem进行比较
- 算法问题:查找从堆栈中弹出的所有序列
- 为什么所有C++编译器都会崩溃或挂起此代码
- 即使我读取了所有内容,在FIFO上打开的QSocketNotifier也会一直启动
- 给定两个偶数,求出它们之间所有偶数的平方和
- 用符号版本替换对函数的所有调用
- 当我在其中一个线程执行中(在activemq-cpp中)捕获到特定值时,我如何终止/停止所有其他线程
- 下载URL中的所有文件
- MESI协议和std::atomic-它是否确保所有写入立即对其他线程可见?
- 所有N矩形的交点区域
- 请给我一些建议,如何评估一个最大的区域,涵盖所有给定的区域