計算幾何入門 1.1:凸包的概念

一、什麼是計算幾何:

計算幾何學(computational geometry)發展於二十世紀七十年代末,是一個正在飛速發展的新型學科。作爲一個計算機算法類學科的分支,計算幾何討論更多的是計算而非幾何,幾何只是它的表現形式,核心還是算法。現代意義上的計算幾何起源於1978年M.I.Shamos的博士論文,是計算機圖形學、CAD、人工智能等多領域理論基礎。計算幾何可以簡單理解爲“算法設計與分析”課程的一個分支,是一個融入離散幾何、組合幾何,用幾何的思想來解決問題的學科。

 

二、預備知識:

 

  • 語言:C/C++
  • 數據結構與算法:大O表示法,簡單的複雜度分析方法,基礎排序、查找等算法
  • 數學:基本的高等數學、線性代數、概率論知識,離散數學基礎

 

 

 

三、基本概念:凸包

計算幾何領域幾乎所有的問題都可以“歸約”爲凸包問題,因此學習凸包問題對整個計算幾何體系至關重要。

凸包(Convex Hull)定義爲:

平面的一個子集S被稱爲是“凸”的,當且僅當對於任意兩點p,s∈S,線段ps都完全屬於S。(平面凸包定義)

如下圖所示:

上圖左邊集合中任意兩點組成的線段都屬於該集合,因此是一個凸集,而右邊集合則不是。

集合S的凸包CH(S),就是包含S的最小凸集——即包含S的所有凸集的交。

 

舉個形象的例子來直觀理解凸包。假設一個板子上有許多釘子,你撐開一個橡皮筋要去套住它們:

當你鬆手的時候橡皮筋就會變成這種狀態:

橡皮筋的狀態就可以看作所謂的“凸包”。它的範圍是由“外部”的一些釘子來決定的,而“內部”的釘子並不起作用。當然內部與外部都是相對而言的,若某個釘子能移動位置,就可能使某些點“起作用”,也可能使某些點失去“作用”:

 

1、凸包應用舉例

畫家繪畫時經常會將幾種顏料按比例混合,以得到想要的某種顏色。而所有顏色都能由紅、綠、藍三種基色混合得到(實際上是色光三原色而非美術),簡化起見我們只考慮紅色(R)和綠色(G)兩種顏色,每種顏色可以看成紅色和綠色的函數:C = (R, G)

 

例如某種顏色可以表示爲 X = (10%, 35%),另一種顏色爲 Y = (16%, 20%)。假設我們需要的顏色爲U = (12%, 30%),怎樣的X和Y的比例能“勾兌”得到U呢?

答案是:兩份的X加上一份的Y即可得到U,即 X:Y = 2:1。

 

試探性的湊出一個比值顯然有些麻煩,更大的問題在於很多時候答案是湊不出來的。例如 V = (13%, 22%),無論如何是無法通過X和Y的混合得到的。此時我們可以加入另一種顏色Z = (7%, 15%),這三種顏色能否勾兌出U呢?答案是 X:Y:Z = 1:3:1。

 

現在的問題就能歸結爲:

 

  • 給定某些顏色X, Y, Z...能否通過他們勾兌出特定顏色U
  • 若能勾兌,如何計算原料比例

這就能用凸包來解決了。

 

 

凸包是一種幾何模型,而幾何最基礎的概念就是空間,我們將顏色的歐氏空間定義爲一種“顏色空間”。我們將每一種顏色都對應到顏色空間的一個

上述顏色X,Y,Z、U和V用點表示爲:

X = (10, 35), Y = (16, 20), Z = (7, 15)                  U = (12, 30), V = (13, 22)

橫軸表示紅色分量數值,縱軸表示綠色分量數值,將這些點在圖像上表示爲:

觀察U和V的位置,我們發現:

U在線段XY上,並且 XU:UY = 1:2,是勾兌比例的反比,並且U的勾兌不需要X和Y之外的顏色參與(可以考慮極端情況,U在線段XY的端點上,只需要一種顏色即可);

而V並不在線段XY上,但是在X, Y, Z縮圈定的範圍內,所以V能被這三種顏色勾兌出來,而V到三個原料點距離的反比正好也是勾兌比例1:3:1;

 

2、凸包的數學推導

上述發現有着更嚴格的推導證明其正確性,推導的理論基礎正是凸包:

對於二維空間中點集 S = {p1, p2, ... , pn},p能被其他點的線性組合表示出來:

p = [p1, p2, ... , pn]λ = λ1p1 + λ2p2 + ... + λnpn

其中λ爲一個矢量,由n個分量組成,即各點的係數(相當於勾兌比例)。其中有些組合(相當於勾兌方案)被稱爲凸組合(convex combination),具體來講就是λ要滿足:

λ1 + λ2 + ... + λn = 1,並且min{λ1, λ2, ... ,λn} ≥ 0

即各點係數非負(相當於所用顏料量不可能是負的)且總和爲1。

 

如果我們新加入的顏色Z落在線段XY上,顯然Z本身就能通過X和Y來勾兌,新加入Z對於勾兌出V是毫無幫助的。這種關係被稱爲:凸相關。當Z與X, Y不是凸相關的時候就會組成上圖所示的三角形平面區域,區域內的所有顏色都能被X, Y和Z勾兌出來。若繼續加入一個新的點,並且這個點與X, Y, Z凸無關,就能改變這個區域:

這和一開始我們加入新的釘子本質是一樣的,點相當於釘子,而橡皮筋圈定的範圍就是凸包。

 

本文是學堂在線課程《計算幾何》的筆記,參考資料:《計算幾何——算法與應用》Mark de Berg等著,鄧俊輝譯;《計算幾何——算法設計與分析》 周培德著

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章