GIS基本算法基础

来源:互联网 发布:足球外文网站 知乎 编辑:程序博客网 时间:2024/06/05 05:10

作为一名GIS开发者,不会算法,太容易被鄙视了,所以一定要认真学习算法,不断总结,非常感谢入行之初,遇到了厉害的师傅。好记性不如烂笔头,把一些基本几何算法记录下来,供后续查阅。

1、矢量概念:如果一条线段的端点有次序之分,称之为有向线段,如果有向线段的起点在坐标原点,称之为矢量。

2、矢量加减法:p(x1,y1),q(x2,y2),p+q=(x1+x2,y1+y2),p-q=(x1-x2,y1-y2)。显然,p+q=q+p。

3、矢量叉积:是直线和线段算法的核心,设矢量p(x1,y1),q(x2,y2),则p*q就是表示有原点(0,0)、p、q,已经p+q组成的平行四边形,p*q=(x1*y2-x2*y1).是一个标量。

矢量叉积的很重要的属性可以用来判断两个矢量的位置关系,如果p*q>0,则p在q的顺时针方向,如果p*q<0,,则p在q的逆时针方向,若p*q=0,则p、q共线,为同向或者相反方向。

4、折线段的拐向判断:这个可以有矢量叉积来判断,对于有公共端点的p0p1,p1p2,则计算p2-p0乘以p1-p0,就可以确定折线的拐向。

如果(p2 - p0)× (p1 - p0) > 0,p0p1p1点拐向右侧后得到p1p2

(p2 - p0)× (p1 - p0) <0,p0p1p1点拐向左侧后得到p1p2

(p2 - p0)× (p1 - p0) = 0,p0p1p2三点共线。

5、判断直线和线段是否相交:如果线段P1P2和直线Q1Q2相交,则P1P2跨立Q1Q2,即:( P1 - Q1 ) × ( Q2 - Q1 ) * ( Q2 - Q1 )× ( P2 - Q1 ) >= 0

6、判断矩形是否包含点:判断改点的横坐标和纵坐标是否夹在矩形的左右边和上下边之间。

7、判断线段、折线、多边形是否想矩形内:因为矩形是个凸集,判断所有端点是否都在矩形内就可以了。

8、判断矩形是否在矩形内:只需要比较左右边界和上下边界。

9、判断圆是否在矩形中:只需要判断圆心在矩形中,圆的半径小于圆心到矩形四边的最小距离。

10、判断点是否在多边形中:以点做射线,看交点个数。



0 0