首页 百科知识 双域单向水平倾角最小化圈绕凸壳算法描述

双域单向水平倾角最小化圈绕凸壳算法描述

时间:2022-10-17 百科知识 版权反馈
【摘要】:当右域S右非空时,作右域逆向圈绕寻找当前最小逆正向水平倾角最小点处理。由此观之,双域单向水平倾角圈绕凸壳新算法的主要优势是无效内点的小域化,从根本上消除了诸如卷包裹凸壳算法、单域单向水平倾角最小化圈绕凸壳算法、单域双向水平倾角最小化圈绕凸壳算法等所共有的无效内点原区域的“单域化”缺点,即通过把无效内点原区域的“最大化”改进为“小域化”,从而较大程度地提高了凸壳Q生成速度。

3.5.1 双域单向水平倾角最小化圈绕凸壳算法描述

定义3.5 二维点集S={Pk(xk,yk)│1≤k≤m,3≤m<+∞}中:

(1)Y轴座标值最小点P1(x1,y1=min{yk│1≤k≤m,3≤m<+∞})(注:若有多个最小点,则只取最左一个最小点)、最大点Q1(x1,y1=max{yk│1≤k≤m,3≤m<+∞})(注:若有多个最大点,则只取最左一个最大点),分别称为二维点集S的凸壳Q的最低顶点、最高顶点。线段P1Q1把初始二维点集S分为两个初始子区域——左域S、右域S;称P1为右域凸壳逆(即逆时针)正向圈绕的初始顶点,称Q1为左域逆负向圈绕的初始顶点。这里,把S划分为S、S的方法,可定义为:

首先,删除线段P1Q1的所有内点(即:线段P1Q1的除其两端点P1、Q1外的各点)。

其次,记点R(x,y)为二维点集S中任一点;然后:

若凸壳Q的初始顶点P1、Q1的X轴坐标值相同,且为x0;则使S={R(x,y)│x>x0,R∈S},S={R(xy)│x<x0,R∈S }。

若凸壳Q的初始顶点P1、Q1的X轴坐标值不同;则以P1为端点且平行于X轴正方向的射线P1L正1为始边,P1到点R的射线P1R为终边而形成夹角∠RP1L正1,并使S={R(x,y)│∠RP1 L正1>∠Q1P1L正1,Rk∈S},S={Rk(xk,yk)│∠RP1L正1<∠Q1P1 L正1,Rk∈S}。

(2)在右域S中:以凸壳Q的任一逆正向顶点Pi(1≤i≤n≤m<+∞,n≥3,m≥3)为端点且平行于X轴正方向的射线Pi L正i,称为逆正向顶点Pi的正向水平射线。以“逆正向顶点Pi的正向水平线L正i为始边,Pi到S中任一点R的射线为终边”的夹角∠RPiL正i(0≤∠RPiL正i<2π),称为点R对逆正向顶点Pi的逆正向水平倾角。

(3)在左域S中:以凸壳Q的任一逆负向顶点Qj(1≤j≤n≤m<+∞,n≥3,m≥3)为端点且平行于X轴负方向的射线Qj L负j,称为逆负向顶点Pj的负向水平射线。以“逆负向顶点Pj的负向水平线L负j为始边,Pj到左域S中任一点R的射线为终边”的夹角∠RQjL负j(0≤∠RQjL负j<2π),称为点R对逆负向顶点Qj的逆负向水平倾角。

双域单向水平倾角最小化圈绕凸壳新算法示例,如图3.6所示。

据此,作者提出的双域单向水平倾角最值化圈绕凸壳算法。其算法思想可构造性描述如下:

第0步:“初始顶点生成与初始分布域的左、右子域划分”处理。

图3.6 双域单向圈绕凸壳算法示意图

(1)在初始分布域S中,分别找出Y轴座标值最小(即最低)、最大(即最高)的初始极点P最低、P最高(注意:只各取一个,若有多个最低点,则只取最左的最低点;若有多个最高点,则只取最左的最高点),并分别作为凸壳最低、最高初始顶点P1、Q1

(2)用线段P1Q1,按定义3.5“i”的方法,把初始分布域S划分为两个初始子域——左域S、右域S

(3)使凸壳当前“逆正向、逆负向顶点组”的初始组序号k,取其初值1。

第1步:当子分布域S、S非空时,分别在右域S、左域S作逆向圈绕寻找凸壳当前逆向最新顶点(即凸壳的下一组逆正向、逆负向最新顶点,而该组最新顶点具有特性“初始组必为一个,最后组方可一个,其余组总为一对”)处理。

(1)当右域S非空时,作右域逆向圈绕寻找当前最小逆正向水平倾角最小点(即凸壳当前逆正向最新顶点Pi+1)处理。

① “构造当前逆正向次新顶点的正向水平射线”处理:过凸壳当前逆正向次新顶点Pi,作Pi的平行X轴正方向的正向水平射线PiL正i

② 在分布域S中,逆向圈绕地找出对当前逆正向次新顶点Pi的正向水平射线PiLi作始边)的逆正向水平倾角最小点Pi+1,使它满足∠Pi+1PiL正i = min{∠RPiL正i | R∈S})(注:若有多个逆正向水平倾角最小点,则只取最末端那个逆正向水平倾角最小点,即离当前次新逆正向顶点Pi最远的那个逆正向水平倾角最小点Pi+1)。

③ 把当前所得逆正向水平倾角最小点Pi+1,按逆向生成顺序,依次保存、标记为凸壳逆正向最新顶点Pa(满足:1<a≤[n/2]+1;若最后一组最新顶点为不同顶点时,则max{a}+max{b}−1=n,否则max{a}+max{b}−2=n)。

(2)当左域S非空时,作左域S逆向圈绕寻找当前最小逆负向水平倾角点(即凸壳当前逆正向最新顶点Qj+1)处理。

①“构造当前逆负向次新顶点的负向水平射线”处理:过凸壳当前逆负向次新顶点Qj,作Qj的平行X轴负方向的负向水平射线QjL负j

②在分布域S中,逆向圈绕地找出对当前逆负向次新顶点Qj的负向水平射线QjL负j(作始边)的水平倾角最小点Qj+1,使它满足Q∠j+1QjL负j = min{∠RQjL负j | RS∈}(注:若有多个逆负向水平倾角最小点,则只取最末端那个逆负向水平倾角最小点,即离当前次新逆负向顶点Qj最远的那个逆负向水平倾角最小点Qj+1)。

③把当前所得逆负向水平倾角最小点Qj+1,按逆向生成顺序,依次保存、标记为凸壳逆负向最新顶点Qb(满足:1<b≤[n/2]+1;若最后一组最新顶点为不同顶点时,则max{a}+max{b}−1=n,否则max{a}+max{b}−2=n)。

第2步:“分布域极小化处理”(即当对前已得各顶点所构成的当前子凸壳内点删除):

如果在对应右域、左域所找到的当前右域逆正向最新顶点Pa、左域逆负向最新顶点Qb是不同顶点:

(1)在当前右域S中,删除与初始逆正向顶点P1位于“由初始逆正向顶点P1和当前右域逆正向最新顶点Pa所构成射线”同一侧(即射线P1Pa沿顺时针方向旋转所遇到的)的全部点;并把所剩右域仍记为S

(2)在当前左域S中,删除与初始逆负向顶点Q1位于“由初始逆负向顶点Q1、当前左域逆负向最新顶点Qb所构成射线”同一侧(即射线Q1Qb沿顺时针方向旋转所遇到的)的全部点;并把所剩右域仍记为S

(3)回到第1步,继续作双域单向圈绕寻找。

否则(即当前右域逆正向最新顶点Pa,同时又是当前左域逆负向最新顶点Qb),已表明此时所求凸壳的各顶点均已找出,故无需再作当前子凸壳内点(无论其有无)的删除处理,并中止其双域单向圈绕。

结束步:按照逆向顺序把所得各顶点,依次两两连接而得到的凸多边形Q,必定是所求二维有限点集S的凸壳Q。

因为对给二维定点集中大量无效内点的重复处理,是影响凸壳算法效率提高的主要障碍,故无效内点的大(区)域化,则必然是加剧阻碍凸壳算法效率提高的首要原因,而无效内点的小域化,则必定为加速提升凸壳算法效率的重要途径之一。

由此观之,双域单向水平倾角圈绕凸壳新算法的主要优势是无效内点的小域化,从根本上消除了诸如卷包裹凸壳算法、单域单向水平倾角最小化圈绕凸壳算法、单域双向水平倾角最小化圈绕凸壳算法等所共有的无效内点原区域的“单域化”缺点,即通过把无效内点原区域的“最大化(即单域化)”改进为“小域化(即二域化)”,从而较大程度地提高了凸壳Q生成速度。同时,它也容易推广和移植为凸壳的并行新算法。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈