GIS演算法基礎(一) 計算幾何基礎(上)

2022-08-27 01:12:09 字數 1917 閱讀 9235

最近在學習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 可以代表一點點或者乙...