GIS算法原理知识点总结 下载本文

GIS算法原理知识点总结

算法设计和分析:

1、算法设计的原则:

正确性:若一个算法本身有缺陷,那么它将不会解决问题;

确定性:指每个步骤必须含义明确,对每种可能性都有确定的操作。 清晰性:一个良好的算法,必须思路清晰,结构合理。

2、算法的复杂性包括:时间复杂性和空间复杂性。

3、时间复杂性:用一个与问题相关的整数量来衡量问题的大小,该整数量表

示输入数据量的尺度,称为问题的规模。利用某算法处理一个问题规模为n的输入所需要的时间,称为该算法的时间复杂性。

4、算法的概念:算法是完成特定任务的有限指令集。所有的算法必须满足下

面的标准:

? 输入 ? 输出 ? 明确性 ? 有限性 ? 有效性

GIS算法的计算几何基础

1、理解矢量的概念:如果一条线段的端点是有次序之分的,我们把这种线段

称为有向线段(directed segment)。如果有向线段p1p2的起点P1在坐标原点,我们可以把它称为矢量P2。

p2

p1

O

5.矢量叉积:计算矢量叉积是直线和线段相关算法的核心部分。

设矢量P = (x1,y1),Q = (x2,y2),则矢量叉积定义为(0,0)、p1、p2和p1p2 所组成的平行四边形的带符号的面积,即P×Q = x1·y2-x2·y1,其结果是个标量。显然有性质P×Q= -(Q×P)和P×-Q= -(P×Q)。 P X Q>0,则P在Q的顺时针方向;

1

P X Q<0,则P在Q的顺逆针方向;

P X Q>0,则P Q共线,但可能同向也可能反向。

6、判断线段的拐向:折线段的拐向判断方法,可以直接由矢量叉积的性质推

出,对于有公共端点的线段p0p1和P1P2,通过计算(p2-p0)×(P1-p0)的符号便可以给出折线段的拐向。 p2 p1

p0 基( p2-p0)×(P1-p0)<0,则

P0P1

在 P1点拐向左侧后得到P1P2

p2 p1

p1

p2 p0

p0 基(p2-p0)×(P1-p0)>0,

则P0P1 基(p2-p0)×(P1-p0)=0,

在P1点拐向右侧后得到则P0P1P2三点共线

P1P2

理解矢量的概念通过矢量差积的方法就可以判断的拐向了。 7.判断点是否在线段上:设点为Q,线段为P1 P2:(Q-P1)X(P2-P1)=0且Q

在以P1,P2为对角顶点的矩形内。前者抱走点在直线上,后者保证点不在线段延长线或反向延长线上。

8、判断两线段是否相交(算法一):

快速排斥实验:设以线段P1P2为对角线的矩形为R,设以线段Q1Q2为对角

的矩形为T,如果R和T不相交,显然两线段不会相交

2

跨立实验:如果两线段相交,则两线段必然相互跨立对方。若p1p2跨立Q1Q2,

则矢量(P1-Q1)和(P2-Q2)位于矢量(Q2-Q1)的两侧,则(P1-Q1)

×(Q2-Q1)×(P2-Q1)×(Q2-Q1)〈0。当(P1-Q1)×(Q2-Q1)=0时,说明(P1-Q1)×(Q2-Q1)共线,但是因为已经通过快速排斥实验,所以P1一定在线段Q1Q2上;同理(Q2-Q1)×(P2-Q1)=0说明P2一定在线段Q1Q2上。

所以判断P1P2跨立Q1Q2的依据是:

(P1-Q1)×(Q2-Q1)×(Q2-Q1)×(P2-Q1≥0。 同理判断Q1Q2跨立P1P2的依据是

(Q1-P1)×(P2-P1)×(P2-P1)×(Q2-P1)≥0。

注意在进行“跨立判断”的时候是进行两次跨立判断

9.判断矩形内是否包含点:只要判断该店的横坐标和纵坐标是否都夹在矩形

的左右边和上下边之间。

10.判断线段、折线、多边形是否在矩形中:因为矩形是个凸集,所以只

要判断所有端点都在矩形就行了。

11.判断矩形是否在矩形中:只要比较左右边界和上下边界就行了。 12.判断圆是否在矩形中:圆心在矩形中且圆的半径小于或等于圆心到矩形四

边的距离的最小值。

13.判断点是否在多边形内:

1)射线法:一条射线从点P开始,穿过多边形的边界的次数称为交点数目。当

交点数目是偶数时,点P在多边形外部;否则,为奇数时,在多边形内部。

3