rectangle
擺得很正的矩形,四個邊都平行於座標軸
經過數學課程洗禮,大家看到矩形都是直覺想到長與寬。然而在計算學當中,我們傾向記錄左下角座標(X座標、Y座標的下界)與右上角座標(X座標、Y座標的上界)。
就算矩形退化成線段、點,這種記錄方式也不會有問題。
UVa 460 191
矩形相交
要判斷矩形相交相當麻煩,相交的情形有許多種。
逆向思考,事情就變得容易多了:判斷矩形不相交!以第二個矩形作為基準,第一個矩形完全落在其左方、右方、下方、上方,就是不相交。
如果是空心矩形,那麼還得偵測第一個矩形是不是被第二個矩形框住,以及第二個矩形是不是被第一個矩形框住。
大量矩形交集,之一
兩個矩形的交集還是矩形(可能退化成線段、點)。運用incremental method進行推理,大量矩形的交集當然還是矩形。
採用incremental method,一次讀入一個矩形,不斷更新交集。時間複雜度O(N),N是矩形數量。
大量矩形交集,之二
大量矩形聯集,之一
將聯集區域切割為數個矩形。採用incremental method,一次讀入一個矩形,不斷更新聯集。
下面這段程式碼僅計算聯集面積。至於聯集多邊形,就請讀者自行研究了。
circle
triangle
三角形
記錄三個頂點,以逆時針順序記錄。
UVa 11122 11275 11836
大量三角形聯集
我沒有研究。
ICPC 3809