最近在學習gis演算法,在學習過程中,想把一些經典的演算法或者思想記錄下來,分享給大家
計算幾何基礎本來是計算機圖形學的內容,但是gis在影象處理中是離不開計算機處理的,所以gis演算法基礎第乙個應該是計算幾何基礎。
如何把空間實體的點線面以及他們之間的關係(例如,相交,包含,鄰接,疊置等等)用計算機語言表達出來,應該是這裡解決的第乙個問題。前人已經有過這樣這樣的解決模型---de-9im模型(dimensionally extended nine-intersection model)
de9im模型是一種拓撲模型,他用於描述多邊形之間的關係。現有兩個多邊形,如果他們相交,那他們的邊界,內部,外部的交集情況是怎麼樣的?如果相離呢?情況又是怎樣的?de9im實際上就是乙個3x3的矩陣,他儲存著兩個多邊形,邊界,內部,外部,的交集情況。
假如交集的結果用維數dim = 表示,-1代表無交集,0代表交集為乙個點,1代表線,2代表面。
上面這個圖能很好的說明這個問題。 a,b代表兩個面,他們邊界,內部,外部,相交的結果就是 紅色的部分
例如a的內部和b的內部 交集應該是乙個面,所以是2;a的邊界和b的邊界,交集應該是兩個點,所以是0;
總結一下:dim = -1 無交集;
dim = 0 交集中不包含線和面,但至少包含乙個點
dim = 1 交集中不包含面,但至少包含乙個面
dim = 2 交集至少包含乙個面
現在多邊形之間的問題的模型解決了,那麼如何用計算機語言表達呢?
上面也說了,這個交集的結果可以用乙個3x3的矩陣表達。例如上邊的a,b交集結果 表達為:
2 1 2
1 0 1
2 1 2
於是,空間關係的描述可以歸納為:兩個幾何體,以表示兩個幾何體的de-9im結果的矩陣輸入,然後把這個矩陣轉為字串,例如上面這個就變為"212101212"了
如果我們說兩個多邊形相交,那就是他們的結果要有 0,1,2 也就是交集中游點或線或面
在計算機中就是 (0,1,2) ->true
(-1) ->false
(-1,0,1,2)->*
那麼上面那個字串就可以表示成"ttttttttt"
經過前人的整理,空間關係的判斷可以通過特定的一些模式進行判斷
謂詞返回值
描述相等(equals)
t*f**fff*
邊界上的點和內部的點全部重合。屬於相交的一種
相離(disjoint)
ff*ff****
不相交,與相交相反
相接(touches)
ft*******\f**t*****\f***t****
只有邊界上有共同點,內部沒有。屬於相交的一種
覆蓋(covers)
t*****ff*\*t****ff*\***t**ff*\****t*ff*
b上的每個點都在a上(邊界和內部),且所有點都不在a外部。屬於相交的一種
疊置(overlaps)
t*t***t**\1*t***t**
a和b相交,且具有一部分共同點,但不是全部內部點。屬於相交的一種
所以,只要我們得到了兩個多邊形的de9im矩陣結果,我們就可以判斷他們之間的關係了。
那怎樣獲得兩個多邊形的交集結果呢?這關係到點,線,面-點,線,面 之間的判斷,這也是gis演算法計算幾何中的一大部分的內容,這些我之後在寫把
演算法基礎(上)
演算法 algorithm 是指解題方 而完整的描述,是一系列解決問題的清晰指令,演算法代表著用系統的方法描述解決問題的策略機制,簡單來說就是解決問題的步驟 演算法特徵 有窮性 確切性 輸入項 輸出項 可行性特徵 含義有窮性 演算法在執行有限個步驟之後終止 確切性演算法的每一步必須有確切的定義 輸入...
MATLAB基礎學習(一) 計算基礎
參考文獻 matlab語言常用演算法程式集合 1.變數與常量 1 變數 是數值計算的基本單元,變數名字區分大小寫。名稱說明 format short 短格式 5位定點數 format long 長格式 15位定點數 format short e 短格式e方法 format long e 長格式e方法...
計算幾何基礎 《演算法競賽入門經典》
includeusing namespace std const int n 1e3 struct point 建構函式,方便 編寫 struct polygon struct circle typedef point vector 程式上實現向量與點的結構體相同,一組 x,y 可以代表一點點或者乙...