矩形窗口中的圆弧快速裁剪方法

文档序号:6472048阅读:487来源:国知局
专利名称:矩形窗口中的圆弧快速裁剪方法
技术领域
本发明涉及一种圆弧裁剪方法,且特别涉及一种矩形窗口中的圆弧快速裁剪方法。

背景技术
作为计算机图形学中的基础算法之一,线裁剪算法直接关系到图形系统的效率。在矩形窗口对直线段裁剪方面,已出现许多经典算法,如基于编码技术的Cohen-Sutherland算法、基于参数化方法的Liang-Barsky算法、基于几何变换的Nicholl-Lee-Nicholl算法,及基于对Nicholl-Lee-Nicholl改进的ELC算法和FLC算法等。相对而言,矩形窗口中圆弧裁剪的方法较少,现有圆弧裁剪方法实质上都是通过求解一元二次方程来实现;但由于圆弧代数方程求解的复杂性,其裁剪算法效率较低,较难满足复杂工程应用、大数据量实时绘制等需求。
研究发现,相关性测试和圆弧-直线求交操作是圆弧裁剪处理的两个重要方面。一般地,圆弧与窗口边实际上不相交的概率较大。相关性测试用于快速排除完全在窗口外的圆弧或保留完全在窗口内的圆弧,以避免不必要的圆弧-矩形裁剪窗口的求交计算。因此,快速圆弧裁剪方法的关键在于1)尽多、尽快地判定完全在窗口外的圆弧并加以排除;2)尽多、尽快地判定完全在窗口内的圆弧并加以保留;3)对无法排除或保留的圆弧,应明确需要与其求交的裁剪窗口的边,快速求出交点,并获取最终裁剪结果。但是在实际的研究过程中仍发现圆弧包围盒、端点可用于圆弧相关性测试,但具有如下困难1、圆弧的非线性特点带来额外的包围盒计算开销,不利于尽快地排除和保留;2、圆弧包围盒一般较大,较难尽可能多地排除或保留待裁剪圆弧;3、即使圆弧两端点均落在矩形裁剪窗口内,圆弧仍可能和窗口相交;4、即使圆弧两端点均落在矩形裁剪窗口外,圆弧也可能和窗口相交。


发明内容
发明目的本发明针对现有技术中裁剪方法的不足,提供一种矩形窗口中的圆弧快速裁剪方法。
技术方案为了解决上述技术问题,本发明提供一种矩形窗口中的圆弧快速裁剪方法,该方法包括以下步骤 步骤1,输入矩形裁剪窗口坐标; 步骤2,输入待裁剪圆弧坐标; 步骤3,以圆弧起点、终点坐标为索引,直接查本发明表来获取该圆弧的整体包围盒; 步骤4,比较步骤3中的圆弧整体包围盒与矩形裁剪窗口,判断圆弧整体包围盒是否位于裁剪窗口内,若结果为是,则输出该圆弧,并返回步骤1,否则进行下一步; 步骤5,比较该圆弧整体包围盒与裁剪窗口,若圆弧整体包围盒位于裁剪窗口外,若结果为是,则舍弃该圆弧,并返回步骤2,否则进行下一步; 步骤6,将待裁剪圆弧分割为多个象限圆弧段; 步骤7,以待裁剪圆弧起点、终点坐标为索引,通过查本发明表直接获取其各分割后的象限圆弧段及其对应的象限圆弧段包围盒; 步骤8,比较各象限圆弧段包围盒与裁剪窗口,若各象限圆弧段均在裁剪窗口外,则舍弃待裁剪圆弧,并返回步骤2,否则进行下一步; 步骤9,在矩形裁剪窗口基础上,根据其上边界、下边界、左边界及右边界将坐标系分为九个分区,由上至下、由左至右分别依次编码为1区到9区; 步骤10,遍历各分割后的象限圆弧段,取其起点、终点坐标,与裁剪窗口四条边界分别比较后,确定起点、终点所在分区的编码; 步骤11,根据各象限圆弧段起点、终点所在分区,及裁剪窗口右上或左下顶点与各象限圆弧段内侧或外侧关系,判断该圆弧是否在裁剪窗口外,若判断结果为是,则舍弃该圆弧,并返回步骤(1);否则进行下一步; 步骤12,对裁剪窗口右边界的x坐标作比例变换,比例因子为1024/R,其中乘以1024的操作通过将x坐标左移10位实现,R为圆弧半径; 步骤13,利用变换后的右边界x坐标查预定义的规范化圆弧-直线交点的y坐标表快速获取规范化圆弧-直线交点坐标; 步骤14,对所查得的y坐标实施比例变换,得到圆弧-直线实际交点坐标,比例因子为R/1024,其中除以1024的操作通过将y坐标右移10位实现; 步骤15,根据上步所得圆弧与裁剪窗口直线边交点坐标,对所输入圆弧进行裁剪; 步骤16,输出并显示最终裁剪结果,并返回步骤1。
其中,步骤1所输入的任意待裁剪圆弧为逆时针方向,圆弧表达式由其圆心、始点和终点描述(均为整数坐标)。不失一般性,本发明假设坐标原点位于待裁剪圆弧的圆心;否则可首先将坐标原点平移至待裁剪圆弧圆心后执行本方法,裁剪结束后将裁剪结果平移回即可(仅需几次整数坐标的加减法运算)。
步骤3、4、5利用圆弧整体包围盒进行待裁剪圆弧相关性测试。由于圆弧本身的非线性特点,生成各类圆弧会增加一些计算开销,因此可预定义圆弧整体包围盒表,在步骤3获取其整体包围盒时,只需根据该圆弧起点、终点坐标,即可快速获取其整体包围盒。所涉及的查表操作通过指令寻址中的变址来实现,只需少数几条机器指令,其计算时间可忽略不计。利用圆弧整体包围盒作相关性测试时,若该整体包围盒位于裁剪窗口内,则直接输出该圆弧、本次裁剪结束;若该整体包围盒完全位于裁剪窗口外,则直接舍弃该圆弧、本次裁剪结束。
步骤6利用坐标轴,将待裁剪圆弧分割为多个象限圆弧段。其中以圆心为原点建立坐标系后,被坐标轴切割的圆弧任一部分均称为该圆弧的象限圆弧段。
步骤7、8利用切割后的象限圆弧段包围盒进行相关性测试。类似地,任意圆弧被坐标轴切割生成的各象限圆弧段、各象限圆弧段的包围盒,均可预定义在象限圆弧段包围盒表中。因此,步骤7只需根据所给圆弧的起点、终点,即可快速通过查表获取各象限圆弧段及其包围盒。步骤8判断各象限圆弧段包围盒是否均位于裁剪窗口外,若结果为是,则直接舍弃该圆弧、本次裁剪结束。
步骤9通过矩形裁剪窗口进行分区编码,根据其上边界、下边界、左边界及右边界将坐标系分为九个分区,由上至下、由左至右分别依次编码为1区-9区;(其中裁剪窗口设定为5区)。
步骤10、11利用在对待裁剪圆弧各象限圆弧段分区编码基础上,通过裁剪窗口顶点相对于象限圆弧段的内/外测试,进一步完成待裁剪圆弧的相关性测试。根据该待裁剪圆弧起点、终点分区编码不同,若裁剪窗口右上或左下顶点均位于该圆弧各象限圆弧段内侧或外侧,则直接舍弃该圆弧、本次裁剪结束。本发明中,步骤11中的象限圆弧段均为逆时针方向。
其中步骤11中的象限圆弧段在第I象限时(a)如果其起点或终点之一在5区,该圆弧段不能排除、需保留以便后续求交才能完成裁剪;(b)如果其起点在6区、终点在1区,或起点在6区、终点在2区,或起点在9区、终点在2区,且当该象限圆弧段在窗口右上顶点外绕过,即裁剪窗口右上顶点在圆弧段内侧时,该圆弧段与窗口无交点、应排除;(c)如果其起点在8区、终点在1区,或起点在8区、终点在4区,或起点在9区、终点在4区,且当该圆弧段在窗口左下顶点外绕过,即裁剪窗口左下顶点在圆弧段外侧时,该圆弧段与窗口无交点、应排除;(d)其它情况下该圆弧应直接排除。
其中步骤(11)中的象限圆弧段在第II象限时,将该象限圆弧段的圆心、起点、始点坐标及裁剪窗口顶点坐标作如下变换 x’=-x,y’=y 其中(x,y)为变换前的点,(x’,y’)为变换后的点,然后交换变换后位于第I象限的象限圆弧段的起点、终点次序,并按权利要求10所述方法快速排除。
其中步骤11中的象限圆弧段在第III象限时,将该象限圆弧段的圆心、起点、始点坐标及裁剪窗口顶点坐标作如下变换 x’=-x,y’=-y 从而将该象限圆弧段变换至第I象限后,按权利要求10所述方法快速排除。
其中步骤(11)中的象限圆弧段在第IV象限时,将该象限圆弧段的圆心、起点、始点坐标及裁剪窗口顶点坐标作如下变换 x’=x,y’=-y 然后交换变换后位于第I象限的象限圆弧段的起点、终点次序,并按权利要求10所述方法快速排除。
步骤12、13、14、15对需通过求交才能完成裁剪的圆弧,首先将裁剪窗口右边界x坐标作比例变换,然后以该变换后的x坐标为索引,快速查找预定义规范化圆弧-直线交点表中交点的y坐标值,在实施反比例变换后得到待裁剪圆弧与裁剪窗口的实际交点,从而完成裁剪。其中的比例变换、反比例变换均通过整数移位实现,非常快速。
有益效果本发明所述的矩形窗口中的圆弧快速裁剪方法,对任意待裁剪圆弧,仅需几次移位、整数加减或少量乘除法运算,即可快速获取其在矩形窗口中的裁剪结果。相比通过求解一元二次方程所涉及的平方、开平方及浮点运算而言,圆弧裁剪效率有很大提高。此外,由于圆弧裁剪是图形学及CAD的基础问题,该方法可广泛应用于各类绘图软件、建模软件、CAD软件及复杂工程设计系统等,并可进一步有效提高图形绘制及计算机辅助设计效率。



下面结合附图和具体实施方式
对本发明做更进一步的具体说明。
图1表示本发明的工作流程图。
图2表示通过象限圆弧段分割来完成相关性测试的例子。
图3表示裁剪窗口分区及两个通过裁剪窗口右上/左下顶点内外测试排除不相关象限圆弧段的例子。
图4表示圆弧内外快速测试示例。

具体实施例方式 如图1所示,本发明提供一种矩形窗口中的圆弧快速裁剪方法,该方法包括以下步骤 步骤1,输入矩形裁剪窗口坐标; 步骤2,输入待裁剪圆弧坐标; 步骤3,以圆弧起点、终点坐标为索引,直接查本发明表来获取该圆弧的整体包围盒; 步骤4,比较步骤3中的圆弧整体包围盒与矩形裁剪窗口,判断圆弧整体包围盒是否位于裁剪窗口内,若结果为是,则输出该圆弧,并返回步骤1,否则进行下一步; 步骤5,比较该圆弧整体包围盒与裁剪窗口,若圆弧整体包围盒位于裁剪窗口外,若结果为是,则舍弃该圆弧,并返回步骤2,否则进行下一步; 步骤6,将待裁剪圆弧分割为多个象限圆弧段; 步骤7,以待裁剪圆弧起点、终点坐标为索引,通过查本发明表直接获取其各分割后的象限圆弧段及其对应的象限圆弧段包围盒; 步骤8,比较各象限圆弧段包围盒与裁剪窗口,若各象限圆弧段均在裁剪窗口外,则舍弃待裁剪圆弧,并返回步骤2,否则进行下一步; 步骤9,在矩形裁剪窗口基础上,根据其上边界、下边界、左边界及右边界将坐标系分为九个分区,由上至下、由左至右分别依次编码为1区到9区; 步骤10,遍历各分割后的象限圆弧段,取其起点、终点坐标,与裁剪窗口四条边界分别比较后,确定起点、终点所在分区的编码; 步骤11,根据各象限圆弧段起点、终点所在分区,及裁剪窗口右上或左下顶点与各象限圆弧段内侧或外侧关系,判断该圆弧是否在裁剪窗口外,若判断结果为是,则舍弃该圆弧,并返回步骤(1);否则进行下一步; 步骤12,对裁剪窗口右边界的x坐标作比例变换,比例因子为1024/R,其中乘以1024的操作通过将x坐标左移10位实现,R为圆弧半径; 步骤13,利用变换后的右边界x坐标查预定义的规范化圆弧-直线交点的y坐标表快速获取规范化圆弧-直线交点坐标; 步骤14,对所查得的y坐标实施比例变换,得到圆弧-直线实际交点坐标,比例因子为R/1024,其中除以1024的操作通过将y坐标右移10位实现; 步骤15,根据上步所得圆弧与裁剪窗口直线边交点坐标,对所输入圆弧进行裁剪; 步骤16,输出并显示最终裁剪结果,并返回步骤1。
图1中的步骤1初始所输入的待裁剪圆弧为逆时针方向,圆弧表达式由其圆心、始点和终点描述,且平移后将坐标原点设定于待裁剪圆弧的圆心。
步骤2输入待裁剪圆弧坐标。
步骤3通过查表法快速获得圆弧整体包围盒,其步骤如下1)判定圆弧起点Ps(xs,ys)与终点Pe(xe,ye)所在象限,以此作为查询条件;2)对始、终点的某些组合,比较xs与xe,以作为查询的附加条件;3)根据表1给出的规则快速获取任意圆弧的整体包围盒。
表1表示由始、终点位置确定圆弧整体包围盒的规则表。表1由始、终点位置确定圆弧整体包围盒的规则表(Ps(xs,ys)及Pe(xe,ye)分别为圆弧ai始点和终点,R为其半径,(xleft,ybot,xright,ytop)为圆弧整体包围盒边界)。
表1
步骤4、5利用圆弧整体包围盒作相关性测试,若该整体包围盒位于裁剪窗口内,则直接输出该圆弧、本次裁剪结束;若该整体包围盒完全位于裁剪窗口外,则直接舍弃该圆弧、本次裁剪结束。设圆弧整体包围盒为(xleft,ybot,xright,ytop),裁剪窗口为(Xleft,Ybot,Xright,Ytop),则圆弧整体包围盒的相关性测试为 (1)若以下条件符合,则圆弧整体包围盒在裁剪窗口同一边的外侧,应予以舍弃 (xright<Xleft)∨(xleft>Xright)∨(ybot>Ytop)∨(ytop<Ybot) (2)若以下条件符合,则圆弧整体包围盒落在矩形窗口内部,应予以保留 (xleft>Xleft)∧(xright<Xright)∧(ybot>Ybot)∧(ytop<Ytop) 步骤6将无法通过整体包围盒排除的圆弧进一步分割为若干象限圆弧段。图2给出了一个例子,其中待裁剪圆弧整体包围盒较大,与裁剪窗口重叠,因而无法排除。分割为三个象限圆弧段ai1、ai2及ai3后,由于所有象限圆弧段的包围盒与窗口均不重叠,因而可判定原圆弧与窗口不相关。
给定任意圆弧,步骤7获取其各象限圆弧段划分及象限圆弧段包围盒。为避免象限圆弧段及其包围盒生成的计算开销,可同样由查表法快速获取,其步骤如下1)判定圆弧始点Ps(xs,ys)与终点Pe(xe,ye)所在象限,以此作为查询条件;2)对始、终点的某些组合,比较xs与xe,以作为查询的附加条件;3)根据预定义表给出的规则获取其象限圆弧段分段及各象限圆弧段包围盒。表2给出了始点在第1象限,终点分别在第1、2、3、4象限的圆弧的象限圆弧段划分及其包围盒生成规则。其中起点在第1象限、终点也在第1象限的圆弧分优弧与劣弧两类,需通过比较xs与xe以作为附加条件。对于始点在其它象限的圆弧,可按类似方法给出象限圆弧段及对应包围盒的规则表。其它圆弧的象限圆弧段可类似定义。
表2始点在第一象限的圆弧的象限圆弧段分段及象限圆弧段的包围盒生成规则表。
表2
步骤8利用象限圆弧段的单调性,对各象限圆弧段进行快速相关性测试。以某象限圆弧段aij为例,设其始点为Psij(xsij,ysij),终点为Peij(xeij,yeij),则其相关性测试方法如下 一、若Psij及Peij均在裁剪窗口(Xleft,Ybot,Xright,Ytop)内,则保留该象限圆弧段; 二、按以下条件对象限圆弧段aij进行相关性测试 1、若aij位于第1象限,且其始点在裁剪窗口上侧(ysij>Ytop),或始点在裁剪窗口左侧(xsij<Xleft),或终点在裁剪窗口下侧(yeij<Ybot),或终点在裁剪窗口右侧(xeij>Xright),则排除aij; 2、若aij位于第2象限,且其始点在裁剪窗口下侧(ysij<Ybot),或始点在裁剪窗口左侧(xsij<Xleft),或终点在裁剪窗口上侧(yeij>Ytop),或终点在裁剪窗口右侧(xeij>Xright),则排除aij; 3、若aij位于第3象限,且其始点在裁剪窗口下侧(ysij<Ybot),或始点在裁剪窗口右侧(xsij>Xright),或终点在裁剪窗口上侧(yeij>Ytop),或终点在裁剪窗口左侧(xeij<Xleft),则排除aij; 4、若aij位于第4象限,且其始点在裁剪窗口上侧(ysij>Ytop),或始点在裁剪窗口右侧(xsij>Xright),或终点在裁剪窗口下侧(yeij<Ybot),或终点在裁剪窗口左侧(xeij<Xleft),则排除aij; 三、若Psij及Peij中有且仅有一个在裁剪窗口内,则留待后续求交处理; 四、其它情况需作进一步的相关性测试。
若所给圆弧所有象限圆弧段均被排除,则舍弃该圆弧、本次裁剪结束。
步骤9按矩形裁剪窗口边界进行分区,分区编码见图3。步骤10进一步遍历步骤8无法排除的象限圆弧段,将其始、终点分别分区编码。然后步骤11根据各圆弧始、终点分区编码情况,分别对裁剪窗口右上或左下顶点作内外检测,以判断是否应排除该象限圆弧段,具体方法是对在第I象限的象限圆弧段(a)如果其起点或终点之一在5区,该圆弧段不能排除、需保留以便后续求交才能完成裁剪;(b)如果其起点在6区、终点在1区,或起点在6区、终点在2区,或起点在9区、终点在2区,且当该象限圆弧段在窗口右上顶点外绕过,即裁剪窗口右上顶点在圆弧段内侧时,该圆弧段与窗口无交点、应排除;(c)如果其起点在8区、终点在1区,或起点在8区、终点在4区,或起点在9区、终点在4区,且当该圆弧段在窗口左下顶点外绕过,即裁剪窗口左下顶点在圆弧段外侧时,该圆弧段与窗口无交点、应排除;(d)其它情况下该圆弧应直接排除。当象限圆弧段在第II象限时,将该象限圆弧段的圆心、起点、始点坐标及裁剪窗口顶点坐标作如下变换 x’=-x,y’=y 其中(x,y)为变换前的点,(x’,y’)为变换后的点,然后交换变换后位于第I象限的象限圆弧段的起点、终点次序,并按第I象限内的象限圆弧段快速排除方法排除;当象限圆弧段在第III象限时,将该象限圆弧段的圆心、起点、始点坐标及裁剪窗口顶点坐标作如下变换 x’=-x,y’=-y 从而将该象限圆弧段变换至第I象限后,按第I象限内的象限圆弧段快速排除方法排除。当象限圆弧段在第IV象限时,将该象限圆弧段的圆心、起点、始点坐标及裁剪窗口顶点坐标作如下变换 x’=x,y’=-y 然后交换变换后位于第I象限的象限圆弧段的起点、终点次序,并按第I象限内的象限圆弧段快速排除方法排除。
图3给出了两个第1象限圆弧段的内外测试的例子,其中对始、终点分区编码为<6,2>的象限圆弧段作相关性测试时,若裁剪窗口右上顶点在该象限圆弧段内侧,则应排除;对始、终点分区编码为<8,4>的象限圆弧段作相关性测试时,若裁剪窗口左下顶点在该象限圆弧段外侧,则应排除。
步骤11中作某点相对于圆弧内外侧测试时,设圆弧半径为R,窗口右上顶点坐标为(xa,ya),则顶点是否在圆弧内侧的判别可以用表达式xa2+ya2-R2<0来实现,但这种方法涉及三次乘法和两次加减法,比较耗时。本发明用是否在图4所示的多边形内部的判别来代替,方法如下 (1)用判别式xa≥ya先判定该顶点在第一象限中直线x=y的哪一半,判别式满足时顶点在0-45°区域,判别式不满足时顶点在45-90°区域; (2)当顶点在0-45°区域时,再使用判别式xa>2*ya,满足时顶点在图3的逆时针第一扇区,不满足时顶点在第二扇区(2*ya通过ya左移1位实现Left_Shift1bit(ya)); (3)再用所属扇区的弦判定顶点在弦的内侧还是外侧,如果是内侧,则顶点在弧内侧。
由于使用弦的精确表达式进行内侧测试无法避免多次实数乘法运算,本发明将弦略向内移动及转动,使可仅用少数几次移位和加减法来实现内侧判定。例如,调整后第一条“弦”内侧测试表达式为(图4) ya+4.234375*(xa-R)≤0 其中, 4.234375*A=(4+0.25-0.015625)*A =Left_Shift2bits(A)+Right_Shift2bits(A)-Right_Shift6bits(A) 其中A为(xa-R),Left_Shift(n)bits为算术左移n位,Right_Shift(n)bits为算术右移n位。因此使用3次移位、4次加减便可完成第一条弦的测试。调整后的第二条“弦”内侧测试表达式为 ya+1.375(xa-1.1875R)≤0 其中, 1.375*A=(1+0.25+0.125)*A =A+Right_Shift2bits(A)+Right_Shift3bits(A) 1.1875*R=(1+0.25-0.0625)*R =R+Right_Shift2bits(R)+Right_Shift4bits(R) 即共5次移位和6次整数加减法便可完成第二条“弦”的内侧测试。第三和第四条“弦”分别与第二、第一条弦以直线x=y对称。交换x和y,便可获得它们的内侧测试表达式。调整后的第一扇区“弦”内的三角形面积占该扇形面积的96.45%,调整后的第二条“弦”内的三角形面积占该扇形面积的94.76%,上述两种情况下总的内侧测试的平均成功率为95.52%。将弦换成“切钱”,并将“≤”换成“≥”,便可将弧内侧点测试变成弧外侧点的测试。弧外侧测试表达式可用同一公式 ya+2*(xa-1.1875R)≥0 步骤12、13、14、15通过查表法快速获取通过求交才能完成裁剪的圆弧的交点。设圆弧半径为R,始、终点x坐标分别为x1和x2,裁剪窗口右上顶点坐标为(Xrihgt,Ytop),则其求交步骤如下 1、变换XrihgtX’rihgt=Xrihgt*1024/R;(乘以1024的操作通过左移10位实现,完全整数运算) 2、用X’rihgt作表4地址(左栏),查右栏结果Y’cross; 3、逆变换得交点的纵坐标Ycross=Y’cross*R/1024;(除以1024的操作通过右移10位实现,完全整数运算) 步骤13中利用变换后的右边界x坐标查预定义的规范化圆弧-直线交点的y坐标表,见本发明表3。
表3 为三层次相关性测试后的第一象限圆弧段裁剪指导表。

接表3
注1“/”表示或者。一旦与窗口上边得到有效交点,就不必再与左边求交;若与上边无有效交点,则需与左边求交。
注2“2/0”表示圆弧与窗口可能有2个交点或没有交点。如与第一候选边无有效交点,则不再与第二候选边求交。
注3如第一交点属窗口下边,则第二次求交对象为“左/上”,如第一交点属窗口右边,则第二次求交对象为“左/上”。
若Ycross≤Ytop,则(Xrihgt,Ycross)即为该竖直边与圆弧的有效交点,若Ycross>Ytop,则圆弧在右上顶点外绕过(此时右上顶点位于“弦”与弧之间),应排除。该过程中仅涉及两次整数乘法运算,无需开方等复杂运算。对该象限圆弧段与水平裁剪边相交的处理,将x与y互换后亦可使用表4(利用圆的八分对称性)。查表操作实际上通过指令寻址中的变址来实现,少数几条机器指令即可实现,其时间开销可忽略不计,因而与求解直线和圆的联立方程相比,效率提高很多倍。其它象限圆弧段及其与相关边的求交,亦可按照圆的四分对称性,共用一张交点查找表,只需做相应的符号变换即可。
表4为规范化第一象限圆弧段与垂直/水平裁剪边交点查找表。
表4 步骤16根据求交结果输出最终裁剪结果。
本发明给出一种矩形窗口中的圆弧裁剪方法,可快速完成各类圆弧相关性测试及圆弧-直线求交。在相关性测试阶段,通过三层次适应性排除测试方法,利用圆弧整体包围盒、象限圆弧段包围盒和裁剪窗口顶点相对于象限圆弧段的内/外测试,尽快、尽多地排除与裁剪窗口无交点的不相关圆弧,避免无效的求交操作;在圆弧-直线求交阶段,充分利用圆的对称性和象限圆弧段的单调性,通过查表法快速获取象限圆弧段与裁剪窗口特定边的交点,从而避免耗时的二次方程求解运算。相关性测试仅使用几次移位、比较及加减运算,即可有效排除绝大部分与裁剪窗口无交点的圆弧;对余下的必需通过求交以完成裁剪的圆弧,也仅利用少数几次整数移位及乘法运算,即可获得圆弧-直线交点及最终裁剪结果。相对于通过求解一元二次方程来实现圆弧裁剪,本方法可大大提高算法效率,并可广泛应用于各类绘图软件、建模软件、CAD软件及复杂工程设计系统等,从而进一步有效提高图形绘制及计算机辅助设计效率。
本发明提供了一种矩形窗口中的圆弧快速裁剪方法的思路及方法,具体实现该技术方案的方法和途径很多,以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。本实施例中未明确的各组成部份均可用现有技术加以实现。
权利要求
1、一种矩形窗口中的圆弧快速裁剪方法,其特征在于,该方法包括以下步骤
(1)输入矩形裁剪窗口坐标;
(2)输入待裁剪圆弧坐标;
(3)以圆弧起点、终点坐标为索引,直接查表来获取该圆弧的整体包围盒;
(4)比较步骤(3)中的圆弧整体包围盒与矩形裁剪窗口,判断圆弧整体包围盒是否位于裁剪窗口内,若结果为是,则输出该圆弧,并返回步骤(1),否则进行下一步;
(5)比较该圆弧整体包围盒与裁剪窗口,若圆弧整体包围盒位于裁剪窗口外,若结果为是,则舍弃该圆弧,并返回步骤(2),否则进行下一步;
(6)将待裁剪圆弧分割为多个象限圆弧段;
(7)以待裁剪圆弧起点、终点坐标为索引,通过查表直接获取其各分割后的象限圆弧段及其对应的象限圆弧段包围盒;
(8)比较各象限圆弧段包围盒与裁剪窗口,若各象限圆弧段均在裁剪窗口外,则舍弃待裁剪圆弧,并返回步骤(2),否则进行下一步;
(9)在矩形裁剪窗口基础上,根据其上边界、下边界、左边界及右边界将坐标系分为九个分区,由上至下、由左至右分别依次编码为1区到9区;
(10)遍历各分割后的象限圆弧段,取其起点、终点坐标,与裁剪窗口四条边界分别比较后,确定起点、终点所在分区的编码;
(11)根据各象限圆弧段起点、终点所在分区,及裁剪窗口右上或左下顶点与各象限圆弧段内侧或外侧关系,判断该圆弧是否在裁剪窗口外,若判断结果为是,则舍弃该圆弧,并返回步骤(1);否则进行下一步;
(12)对裁剪窗口右边界的x坐标作比例变换,比例因子为1024/R,其中乘以1024的操作通过将x坐标左移10位实现,R为圆弧半径;
(13)利用变换后的右边界x坐标查预定义的规范化圆弧-直线交点的y坐标表,快速获取规范化圆弧-直线交点坐标;
(14)对所查得的y坐标实施比例变换,得到圆弧-直线实际交点坐标,比例因子为R/1024,其中除以1024的操作通过将y坐标右移10位实现;
(15)根据上步所得圆弧与裁剪窗口直线边交点坐标,对所输入圆弧进行裁剪;
(16)输出并显示最终裁剪结果,并返回步骤(1)。
2、如权利要求1所述的矩形窗口中的圆弧快速裁剪方法,其中所输入的待裁剪圆弧为逆时针方向,由其圆心、始点和终点定义。
3、如权利要求1或2所述的矩形窗口中的圆弧快速裁剪方法,坐标系原点位于待裁剪圆弧的圆心;否则可先将坐标系原点平移至圆弧圆心,裁剪结束后再平移回去。
4、如权利要求3所述的矩形窗口中的圆弧快速裁剪方法,步骤(6)中以圆心为原点建立坐标系后,所述圆弧的象限圆弧段为被坐标轴切割的圆弧任一部分。
5、如权利要求1所述的矩形窗口中的圆弧快速裁剪方法,其中步骤(4)至步骤(8)中所排除的与裁剪窗口无交点的圆弧分为三种情况圆弧的整体包围盒与窗口不重叠或在窗口内;圆弧的整体包围盒与窗口有重叠,但组成该弧的所有象限圆弧段包围盒均与窗口不重叠或在窗口内;其象限圆弧段包围盒与窗口有重叠,但该象限圆弧与窗口不相交。
6、如权利要求1所述的矩形窗口中的圆弧快速裁剪方法,其中步骤(4)最好情况下只需1次整数比较、最坏情况下只需4次整数比较。
7、如权利要求1所述的矩形窗口中的圆弧快速裁剪方法,其中步骤(5)中为1次到四次整数比较。
8、如权利要求1所述的矩形窗口中的圆弧快速裁剪方法,其中步骤(8)中每一象限圆弧段,需要1次到4次整数比较。
9、如权利要求1所述的矩形窗口中的圆弧快速裁剪方法,其中步骤(12)、步骤(14)中的比例变换均为整数移位操作。
10、如权利要求1所述的矩形窗口中的圆弧快速裁剪方法,其中步骤(3)、步骤(7)、步骤(13)中的查表操作均通过指令寻址中的变址来实现。
全文摘要
本发明公开了一种圆弧在矩形窗口下的快速裁剪方法,对任意给定的圆弧段,该方法按各类圆弧出现概率及所需操作,先后通过圆弧整体包围盒、各分割后的象限圆弧段包围盒、裁剪窗口顶点相对于象限圆弧段的内外测试,以较少的操作尽可能多地排除与裁剪窗口不相交的圆弧;对剩余需求交操作完成裁剪的圆弧,通过查表法快速获取圆弧与裁剪窗口边的交点。本发明的有益之处是,对任意待裁剪圆弧,仅需几次移位、整数加减或少量乘除法运算,即可快速获取其裁剪结果,圆弧裁剪效率有很大提高。此外,由于圆弧裁剪是图形学及CAD的基础问题,该方法可广泛应用于各类绘图软件、建模软件、CAD软件及复杂工程图设计系统等。
文档编号G06T11/00GK101488227SQ20081024387
公开日2009年7月22日 申请日期2008年12月9日 优先权日2008年12月9日
发明者通 路, 杨若瑜, 丰 苏, 蔡士杰 申请人:南京大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1