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