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,则p0p1在p1点拐向右侧后得到p1p2。
若(p2 - p0)× (p1 - p0) <0,则p0p1在p1点拐向左侧后得到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、判断点是否在多边形中:以点做射线,看交点个数。
- GIS基本算法基础
- GIS基础算法之地图着色问题
- GIS基础
- GIS中的基本算法之判断折线的拐向
- 算法基础-基本数据类型
- java基础之基本算法
- 构建基础GIS数据
- GIS算法源码集合
- GIS 算法,计算箭头
- GIS算法资料
- gis矢量切片算法
- GIS源码下载与GIS经典算法
- GIS源码下载与GIS经典算法
- GIS中的基本算法之判断点是否在直线上
- 【基础算法】位运算-基本运算
- GIS信息系统AO/MO基础
- GIS信息系统AO/MO基础
- 三维GIS基础数据缺点
- java设计模式—原型模式
- 进程间的通讯之油槽
- 流。FileInputStream,DataOutputStream,ByteArrayInputStream,RandomAccessFile
- [转载] elasticsearch遇到的一些问题以及解决方法
- 队列的链式存储结构
- GIS基本算法基础
- poj1321棋盘问题(dfs)
- 数据库总结
- jqchart 去掉右下角的水印的方法
- 自定义View之实现ListView的下拉刷新
- iOS封装常用的方法
- 关于下载使用Genymotion的问题
- Php的运行模式
- clion undefined reference to `boost::system::generic_category()'