GIS中的基本算法之判断点是否在直线上
来源:互联网 发布:怪物世界源码 编辑:程序博客网 时间:2024/06/14 04:17
注:算法的原理描述均来自《地理信息系统算法基础》一书;
原理:设点为Q,线段为P1P2,判断点Q在线段上的依据是:(Q-P1)×(P2-P1)=0(注意这里的减法和乘法均是向量算法,有不懂向量运算原理的可以在网上搜一下)且Q在以P1P2为对角定点的矩形内。前者保证Q点在直线上,后者保证Q点不在线段的延长线或反向延长线上,这一步骤其实就是分别判断一下Q点的x、y坐标是否在P1、P2点的x、y坐标之间;
实现:
#region==判断点是否在直线上 == /// <summary> /// Determines whether [is point on line] [the specified points]. /// </summary> /// <param name="points">The point.</param> /// <param name="lineStartPoint">The line start point.</param> /// <param name="lineEndPoint">The line end point.</param> /// <returns> /// <c>true</c> if [is point on line] [the specified points]; otherwise, <c>false</c>. /// </returns> public static bool isPointOnLine(Point point,Point lineStartPoint,Point lineEndPoint ) { //(P-P1)*(P2-P1)=0 向量差乘是否为0; double X21,Y21,X10,Y10; X21 = lineEndPoint.X-lineStartPoint.X; Y21 = lineEndPoint.Y-lineStartPoint.Y; X10 = point.X-lineStartPoint.X; Y10 = point.Y-lineStartPoint.Y; //向量乘积为0则该点在线上 double vectorValue = X21*Y10-X10*Y21; if (vectorValue != 0.0) return false; else { double xMin = Math.Min(lineStartPoint.X,lineEndPoint.X); double xMax = Math.Max(lineEndPoint.X,lineStartPoint.X); double yMin = Math.Min(lineStartPoint.Y,lineEndPoint.Y); double yMax = Math.Max(lineEndPoint.Y,lineStartPoint.Y); //判断点是否是在该线的延长线上 if (xMin <= point.X && point.X <= xMax && yMin <= point.Y && point.Y <= yMax) return true; else return false; } } #endregion
- GIS中的基本算法之判断点是否在直线上
- 判断点是否在直线上
- c#判断点是否在直线上
- C#判断点是否在直线上
- 判断点在直线上
- 判断点在直线上
- GIS,判断点是否在指定区域内
- GIS中的基本算法之判断折线的拐向
- 判断平面上两线段是否相交,顺便解释判断点在直线的位置...
- 判断点是否在A(x1,y1),B(x2,y2)连线的直线上
- 判断几个点是否在一条直线上(计算几何)
- 点是否在一条直线判断-共线判断
- 判断点是否在多边形上算法roadMap
- UGUI之判断是否点在UI上
- 判断是否是凸多边形,判断点是否在多边形内,点到直线的距离
- java判断多个点是否在同一直线上
- 计算机图形学—判断点在直线上的方法
- C#判断点在直线上的方法
- ie6下面关于html编码问题导致的js出错,css不被应用
- Effective C++读书笔记(33)
- 【Kissy WaterFall】实行手动加载数据
- 容易忘记的命令
- oracle Wallet的使用
- GIS中的基本算法之判断点是否在直线上
- LightOJ 1289 LCM from 1 to n (节省空间的素数筛法+n个数的最小公倍数)
- VC中常见的108个问题
- 让Windows7的Explorer默认打开“我的电脑”
- MAC下用VirtualBox跑ubuntu的一点经验
- TQ2440开发板存储器
- Android fill_parent、wrap_content的区别
- 反弹球
- jsp