簡體   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