GIS中的計算幾何(一)

GIS中的計算幾何(一)
2007-08-17 15:46

 

陳玉進 李泉 南京跬步科技有限公司(http://www.creable.cn

 

GIS是一個圖形系統,必然會涉及到幾何學的理論應用,比如,圖形可視化,空間拓撲分析,GIS圖形編輯等都需要用到幾何。向量幾何是用代數的方法來研究幾何問題,首先,請大家翻一翻高等數學裏有關向量的章節,熟悉一下幾個重要的概念:向量、向量的模、向量的座標表示、向量的加減運算、向量的點積、向量的叉積,以及這些概念的幾何意義...下面我們將用這些基本概念來解答GIS中一些幾何問題。

1   點和線的關係

        點是否在線段上,這樣的判斷在圖形編輯,拓撲判斷(比如,GPS跟蹤點是否跑在線上)需要用到這樣的判斷。通常的想法是:先求線段的直線方程,再判斷點是否符合這條直線方程,如果符合,還要判斷點是否在線段所在的矩形區域(MBR)內,以排除延長線上的可能性,如果不符合,則點不在線段上。這種思路是可行的,但效率不高,涉及到建立方程,解方程。藉助向量的叉積(也叫向量的向量積,結果還是向量,有方向的)可以很容易的判斷。設向量a=(Xa,Ya,Za)  b=(Xb,Yb,Zb)  向量叉積a X b如下:

二維向量叉積的模 |a X b|=|a|*|b|*sinα=|Xa*Yb-Ya*Xb| α是向量a,b之間的夾角),向量叉積模的幾何意義是以向量a,b爲鄰邊的平行四邊形的面積。可以推測:如果兩向量共線,向量叉積模(所代表的

平行四邊形的面積) 爲零                        

|a X b|=|a|*|b|*sinα=|Xa*Yb-Ya*Xb|=0,否則不共線,叉積的模爲非零,根據這樣條件可以很輕鬆的判斷點和線的關係,避免了建立方程和解方程的麻煩。

        向量叉積的模|AB X AC|=0即可判斷C點在AB所確定的直線上,再結合C點是否在AB所在的MBR範圍內,就可以最終確定C是否在AB線段上。關於點和線段的其他關係,都可以通過叉積的求得,比如 判斷點在線的哪一側,右手法則,可以通過a X b= (Xa*Yb-Ya*Xb)*k中的(Xa*Yb-Ya*Xb)正負來判斷。留給大家思考,很簡單的,呵呵

2   線和線的關係

        判斷兩條線段是否相交,在很多拓撲判斷和圖形編輯 (比如,線的打斷來構建拓撲,編輯線對象,疊置分析,面與面關係的判斷等) 中都需要用到線線相交的判斷,如果兩條線段相交,一條線段的兩端點必然位於另一條線段的兩側(不考慮退化情況,也就是一條線段的端點在另一條線段上,這個很容易判斷)

兩向量的叉積a X b= (Xa*Yb-Ya*Xb)*k ,分別判斷AB X AC的方向與AB X AD的方向是否異號,再判斷CD X CA 的方向與CD X CB的方向是否異號,即可判斷兩線段是否相交。

退化情況,即一條線的端點落在另一條線上。運用點是否在線段上的方法來判定。詳細區分留給大家思考。呵呵

        利用向量的方向還可以判斷線段的轉向,這個在道路導航中有所應用:

3   點和麪的關係

在各種拓撲判斷中(比如,面對象的選取,包含關係的判斷等)需要判斷一個點是否位於某個面內,經典的方法就是“垂線法”,在直角座標系中,從這個點向X軸作射線,判斷射線與多邊形的交點個數(不考慮退化情況,退化情況下,判斷點或者射線與多邊形端點或者邊的關係),如果爲奇數,則點在面內,爲偶數,則點在面外。

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