[英]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.