1. 程式人生 > >【學習筆記:計算幾何基礎4】 Geometric Intersection

【學習筆記:計算幾何基礎4】 Geometric Intersection

找到 篩選 檢查 結果 凸包 gap 直線 新的 ole

Ahead

10.6.2018
新的章節,從凸包到幾何求交

定義

在一組幾何物體中找到公共部分
問題主要分4類

  1. 判斷問題(Determine) 即判定是否有交
  2. 計數問題(Count) 計算有多少交點
  3. 枚舉問題(Enumerate) 枚舉交點是那些(在哪裏)
  4. 構造問題(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時刻是,我們僅僅考慮圖中的藍線,同時,我們可以按高度對他們依次遍歷。對於高度,我們定義交點高度越高,那麽線段越高。
    很顯然的是,這幾個點的序列是動態的 ,所以我們需要考慮如何去更新
    而這樣的變化僅僅發生在三種狀況下
  1. 左端點處增加
  2. 右端點處減少
  3. 交點處高度變化
    技術分享圖片
    如圖,在L,X,R位置時,序列會發生變化 ,對此將這三種情況統稱為事件。

【學習筆記:計算幾何基礎4】 Geometric Intersection