判断二维空间中两曲线相交的算法研究.docVIP

  • 184
  • 0
  • 约2.97千字
  • 约 6页
  • 2016-09-18 发布于北京
  • 举报

判断二维空间中两曲线相交的算法研究.doc

判断二维空间中两曲线相交的算法研究.doc

判断二维空间中两曲线相交的算法研究   摘要:研究两条曲线在二维空间中的位置关系是GIS中的重要内容之一,如何判断二维空间中两条曲线相交并计算出交点,是编写程序过程中经常遇到的算法模型,它的准确性与运行效率直接影响程序的可靠性与实用性。本文介绍了常用的三种判断二维空间中两曲线相交并计算交点的算法:近似解法、包围盒法和快速求交法,详细阐述了三种算法的原理和步骤,并对这些算法在计算速度、可靠性方面进行了对比,最后得出了一种最优的算法。   关键词:曲线求交;最小凸多边形;近似解;包围盒   中图分类号:O187文献标识码: A   1、引言   二维空间中两曲线求交计算是程序编写过程中经常遇到的问题,在目前的技术条件下,判断二维空间中两曲线相交算法通常是将两条曲线的方程联立求解,如果没有解析解,或者解析法计算复杂,可以采用各种近似解,其中一种近似解法是将曲线简化为直线段的集合,然后求直线段的交点,这个交点就作为两曲线求交的近似解。也可以对曲线建立包围盒,当两曲线的包围盒相交时,把曲线分割为两条子线段,对于子线段再建立包围盒,然后重复进行包围盒的求交判断,直到包围盒小于一定尺寸。但上述两种方法计算量较大,甚至求解困难。这里提到的另一种快速实用的曲线求交算法,具有较高的稳定性和可靠性。该算法的原理分两步确定两曲线是否相交,首先根据曲线的最小凸多边形判断两条曲线是否相交,并求出两条曲线存在交点的可能区间,然后在此区间内,利用控制顶点算出所对应的曲线段,进行精确求交计算。   2、近似解法   近似解法是将曲线简化为直线段的集合,然后分别求直线段的交点,这个交点就作为曲线求交的近似解。   求两直线段的交点可通过两条曲线方程联立求解法求解,定义、、、为二维空间的点,则有向线段和的参数方程为:      如果和相交,则      求解方程,求和:      设P为直线和的交点,则      如果(0≤≤1)并且(0≤≤1),则有向线段和的交点存在,否则不存在。   如果为0,则和平行。   如果也为0,则和共线。   如果和相交,而交点不位于线段和之间,则交点位置可以通过如下条件进行判断:   如果1,则P点位于有向线段的延长线上;   如果1,则P点位于有向线段的延长线上;   如果1,则P点位于有向线段的延长线上;   如果1,则P点位于有向线段的延长线上。   优缺点:近似解法简单,容易操作,但是当数据量较大时,时间复杂度太大。   3 包围盒法   该方法是分别对两曲线建立最小包围盒,即能围住该曲线的最小凸多边形,然后判断两多边形是否相交,如果相交,则说明两曲线有可能相交,再把曲线分割为两条子线段,对于子线段再分别建立最小凸多边形,以此类推,重复进行包围盒的求交判断,一直到包围盒小于一定尺寸,再对包围盒内的曲线用近似求解法进行判断和就交。   优缺点:包围盒法也和近似求解法一样,但是当数据量较大时,计算量太大,甚至求解困难。   4 快速求交法   4.1 算法原理   该算法的原理分两步确定两曲线是否相交,具体判断情况如图1所示。            图1 判断两曲线是否相交   (1)快速排斥试验:利用控制多边形进行判断,如果两条曲线的控制多边形存在相交的可能,则两条曲线也同样存在相交的可能。并求出存在交点的可能区间。   (2)跨立试验:在两条曲线存在交点可能的参数区间内,利用控制顶点正算出所对应的曲线段,求两条曲线的最短距离,当(可取为或更小的值)时,所对应的点即为交点,否则两条曲线不相交。   4.2 快速排斥试验   判断两条曲线是否有可能相交,可利用控制多边形进行判断,如果两条曲线的控制多边形存在相交的可能,则两条曲线也同样存在相交的可能。判断方法如下:首先取两条曲线控制多边形的第边和第边,两个边的相对位置有四种情况,分别如下图2所示。其中为一曲线控制多边形的其中一条边,为另一曲线控制多边形的其中一条边,是边到边连线的有向夹角,是边到边连线的有向夹角,是边到边连线的有向夹角,是边到边连线的有向夹角,规定逆时针方向角为正,顺时针方向角为负,判断规则如下。            图2线段相互位置关系   如果与方向相反,则进一步判断与,如果与方向相反,则所对应的两条曲线存在相交的可能性,而且交点在由所定义的那段曲线与所定义的那段曲线上,所对应的参数区间为和,如图2(a)所示,如果与方向相同,则所对应的两条曲线没有交点,如图2(d)所示。如果与方向相同,则所对应的两条曲线没有交点,如图2(b)和图2(c)所示。   上述判断原理的算法步骤为:   第一步:分别选取两条曲线控制多边形的其中一条边。   第二步: 计算和,如果与

文档评论(0)

1亿VIP精品文档

相关文档