【學習筆記:計算幾何基礎4】 Geometric Intersection
阿新 • • 發佈:2018-10-07
找到 篩選 檢查 結果 凸包 gap 直線 新的 ole
Ahead
10.6.2018
新的章節,從凸包到幾何求交
定義
在一組幾何物體中找到公共部分
問題主要分4類
- 判斷問題(Determine) 即判定是否有交
- 計數問題(Count) 計算有多少交點
- 枚舉問題(Enumerate) 枚舉交點是那些(在哪裏)
構造問題(Construct) 幾何物體的公共交本身構造出新的幾何物體
Element Uniqueness (EU)
元素唯一性判定檢測
排序判定(nlogn)Min-Gap問題
最小空隙問題
同樣可以O(nlogn) 排序求解IEU
元素類型一定是整數
求交算法
判定問題
Interval Intersection Detection(IID)
以線段為例
樸素:對於所有區間搜索判定O(n^2)改進
- 染色
對於所有的線段,左端點標1,右端點標2 - 排序
左端點第一關鍵字,右端點第二關鍵字 掃描
依次檢查相鄰的端點,檢查他們的Patterns
結論:如果無交,那麽他們的Patterns 一定是1 2 相間 反之不然
所以時間復雜度降為O(nlogn)
Segment Intersection Detection (SID)
樸素枚舉 O(n^2)
關於判斷
ToLeft Text
4次判斷,如果對於兩條線段每次的兩個結果都為在異側則相交更優的算法(BO算法)
先了解幾個結論
Separebility
如果線段在垂直方向上可分開,那麽一定不可能相交
所以我們嘗試在篩選完後,進行比對
更近一步,如果兩條線段是相交的,當且僅當他們與某一條垂直線相交
所以我們可以采用類似掃描線的想法,我們當前考慮的僅僅是與當前線相交的
需要註意的是顯然我們不可能讓掃描線都掃過全部的數,事實上,我們只用處理很少的位置,即只處理端點處和與線段有交點的時刻。
如圖,當掃描線處於t時刻是,我們僅僅考慮圖中的藍線,同時,我們可以按高度對他們依次遍歷。對於高度,我們定義交點高度越高,那麽線段越高。
很顯然的是,這幾個點的序列是動態的 ,所以我們需要考慮如何去更新
而這樣的變化僅僅發生在三種狀況下
- 左端點處增加
- 右端點處減少
- 交點處高度變化
如圖,在L,X,R位置時,序列會發生變化 ,對此將這三種情況統稱為事件。
【學習筆記:計算幾何基礎4】 Geometric Intersection