1点和线的关系。.pdfVIP

  • 5
  • 0
  • 约3.83千字
  • 约 6页
  • 2017-09-12 发布于重庆
  • 举报
GIS 中的计算几何 GIS 是一个图形系统,必然会涉及到几何学的理论应用,比如,图形可视化,空间拓扑 分析,GIS 图形编辑等都需要用到几何。向量几何是用代数的方法来研究几何问题,首先, 请大家翻一翻高等数学里有关向量的章节,熟悉一下几个重要的概念:向量、向量的模、向 量的坐标表示、向量的加减运算、向量的点积、向量的叉积,以及这些概念的几何意义... 下面我们将用这些基本概念来解答 GIS 中一些几何问题。 1 点和线的关系。 点是否在线段上,这样的判断在图形编辑,拓扑判断( 比如,GPS 跟踪点是否跑在线上) 需要用到这样的判断。通常的想法是:先求线段的直线方程,再判断点是否符合这条直线方 程,如果符合,还要判断点是否在线段所在的矩形区域(MBR) 内,以排除延长线上的可能性, 如果不符合,则点不在线段上。这种思路是可行的,但效率不高,涉及到建立方程,解方程。 借助向量的叉积(也叫向量的向量积,结果还是向量,有方向的)可以很容易的判断。设向 量 a=(Xa,Ya,Za) b=(Xb,Yb,Zb) 向量叉积a X b 如下: 二维向量叉积的模 |a X b|=|a|*|b|*sinα=|Xa*Yb-Ya*Xb| (α是向量 a,b 之间的夹角), 向量叉积模的几何意义是以向量a,b 为邻边的平行四边形的面积。可以推测:如果两向量共 线,向量叉积模(所代表的平行四边形的面积) 为零 则 |a X b|=|a|*|b|*sinα=|Xa*Yb-Ya*Xb|=0,否则不共线,叉积的模为非零,根据这样条件可以很 轻松的判断点和线的关系,避免了建立方程和解方程的麻烦。 向量叉积的模|AB X AC|=0 即可判断 C 点在 AB 所确定的直线上,再结合 C 点是否在 AB 所 在的 MBR 范围内,就可以最终确定 C 是否在 AB 线段上。关于点和线段的其他关系,都可 以通过叉积的求得,比如 判断点在线的哪一侧,右手法则,可以通过 a X b= (Xa*Yb-Ya*Xb)*k 中的(Xa*Yb-Ya*Xb )正负来判断。留给大家思考,很简单的,呵呵… 2 线和线的关系 判断两条线段是否相交,在很多拓扑判断和图形编辑 ( 比如,线的打断来构建拓扑,编 辑线对象,叠置分析,面与面关系的判断等) 中都需要用到线线相交的判断,如果两条线段 相交,一条线段的两端点必然位于另一条线段的两侧(不考虑退化情况,也就是一条线段的 端点在另一条线段上,这个很容易判断) 两向量的叉积 a X b= (Xa*Yb-Ya*Xb)*k ,分别判断AB X AC 的方向与AB X AD 的方 向是否异号,再判断CD X CA 的方向与CD X CB 的方向是否异号,即可判断两线段是否 相交。 退化情况,即一条线的端点落在另一条线上。运用”点是否在线段上” 的方法来判定。详 细区分留给大家思考。呵呵… 利用向量的方向还可以判断线段的转向,这个在道路导航中有所应用 3 点和面的关系 在各种拓扑判断中(比如,面对象的选取,包含关系的判断等)需要判断一个点是否 位于某个面内,经典的方法就是“垂线法”,在直角坐标系中,从这个点向 X 轴作射线,判 断射线与多边形的交点个数(不考虑退化情况,退化情况下,判断点或者射线与多边形端点 或者边的关系),如果为奇数,则点在面内,为偶数,则点在面外。 4 线和面的关系 线面关系的判断相对比较复杂,线在面内,线和面相交,相离,相接等关系。线段在 面内,第一个必要条件是,线段的两个端点都要在内。但由于多边形可能为凹,所以这不能 成为判断的充分条件,于是有第二个必要条件线段与多边形的边,没有内部交点。 线段和多边形交于线段的两端点并不会影响线段是否在多边形内;但是如果多边形的 某个顶点和线段相交,还必须判断两相邻交点之间的线段是否包含于多边形内部,如果在面 内,则线段在面内,否则不在面内。 所以,算法思路如下(本算法引用网络上一篇文章): if 线段 PQ 的端点不都在多边形内 then return false; 点集 pointSet 初始化为空;

文档评论(0)

1亿VIP精品文档

相关文档