GIS算法原理知识点总结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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的顺时针方向;
P X Q<0,则P 在Q 的顺逆针方向;
P X Q>0,则P Q 共线,但可能同向也可能反向。
6、判断线段的拐向:折线段的拐向判断方法,可以直接由矢量叉积的性质推
出,对于有公共端点的线段p0p1和P1P2,通过计算(p2-p0)×(P1-p0)的符号便可以给出折线段的拐向。
理解矢量的概念通过矢量差积的方法就可以判断的拐向了。 7.判断点是否在线段上:设点为Q ,线段为P1 P2:(Q-P1)X(P2-P1)=0且Q
在以P1,P2为对角顶点的矩形内。前者抱走点在直线上,后者保证点不在线段延长线或反向延长线上。
8、判断两线段是否相交(算法一):
快速排斥实验:设以线段P1P2为对角线的矩形为R ,设以线段Q1Q2为对角
的矩形为T ,如果R 和T 不相交,显然两线段不会相交
p0 p1
p1
p0
p1
p2 基(p2-p0)×(P1-p0)<0,
则P0P1 在P1点拐向左侧后得到
P1P2 基(p2-p0)×(P1-p0)=0,
则P0P1P2三点共线
基(p2-p0)×(P1-
p0)>0,则P0P1
在P1
点拐向右侧后得到
P1P2
跨立实验:如果两线段相交,则两线段必然相互跨立对方。若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在多边形外部;否则,为奇数时,在多
边形内部。
射线法要考虑几种特殊的情况,并且射线法适用于凸多边形
2)转角法:多边形环绕点P的次数称为环绕数,环绕数为0时,点P在多边形
外部,否则在多边形内部。
14.判断线段是否在多边形内:(折线是判断它的每条线段)
条件一:线段的两个端点都在多边形内
条件二:线段和多边形的所有边都不内交。
15.判断多边形否在多边形内:
只要判断多边形的每条边是否都在多边形内即可。判断有m个顶点的多边形是否在一个有n个顶点的多边形内的复杂度为O(mXn)
16.判断矩形是否在多边形内:
将矩形转化为多边形,然后再判断是否在多边形内。
17.判断圆是否在多边形内:计算圆心到多边形每条变边的最短距离,若该
距离大于或等于圆半径,则该圆在多边形内。
18.判断点是否在圆内:计算圆心到该点的距离,若小于或等于半径,则该
点在圆内。
19.判断线段、折线、矩形、多边形是否在圆内:因为圆是凸集,所以
只要判断是否每个顶点都在圆内即可。
20.判断圆是否在圆内:
设两圆为O1,O2,半径为r1,r2。先比较r1,r2的大小,若r1 21.距离交会: 是以两个已知控制点为中心,分别以目标点与两已知控制点的 距离为半径划圆,交会点即为要求目标点(注意方向二选其中一个)。 22.距离量算算法的实现: