矩形窗口中椭圆曲线的快速裁剪方法

文档序号:6434847阅读:232来源:国知局
专利名称:矩形窗口中椭圆曲线的快速裁剪方法
技术领域
本发明涉及一种椭圆弧裁剪方法,且特别涉及一种矩形窗口中椭圆曲线的快速裁剪方法。
背景技术
交互式图形系统中,往往使用鼠标拖动产生的矩形窗口来选择需要进行缩放的图形部分,当这部分图形被选中以后,图形系统需要迅速的将它从原图中分离出来,并做放大或缩小处理。这个过程中就会涉及到矩形窗口中图形的裁剪问题。作为计算机图形学中的基础算法之一,线裁剪算法直接关系到图形系统的效率。在矩形窗口对直线段线裁剪方面,已经出现了很多经典的算法,如基于编码技术的Cohen-Sutherland算法、基于参数化方法的Liang-Barsky算法、基于几何变换的Nicholl-Lee-Nicholl算法,及基于对 Nicholl-Lee-Nicholl改进的ELC算法和FLC算法等。相对于直线段的裁剪,圆弧及椭圆弧相关的裁剪算法比较少,大部分圆弧裁剪算法都是通过求解一元二次方程来实现的,计算非常复杂。相比于圆弧,椭圆弧的代数方程更加复杂,使得基于代数方法的裁剪效率更低, 较难满足复杂工程应用、大数据量实时绘制等需求。
研究发现,相关性测试和椭圆弧-直线求交操作是圆弧裁剪处理的两个重要方面。一般地,椭圆弧与窗口边实际上不相交的概率较大。相关性测试用于快速排除完全在窗口外的圆弧或保留完全在窗口内的圆弧,以避免不必要的椭圆弧-矩形窗口的求交计算。因此,快速圆弧裁剪方法的关键在于1)尽多、尽快地判定完全在窗口外的椭圆弧并加以排除;幻尽多、尽快地判定完全在窗口内的椭圆弧并加以保留;;3)对无法排除或保留的椭圆弧,应明确需要与其求交的矩形窗口的边,快速求出交点,并获取最终裁剪结果。但是在实际的研究过程中仍发现椭圆弧包围盒、矩形窗口端点可用于椭圆弧相关性测试,但具有如下困难1)椭圆弧的非线性特点带来额外的包围盒计算开销,包围盒计算困难,较难尽快地排除和保留;幻椭圆弧包围盒一般较大,较难尽可能多地排除或保留;3)即使椭圆弧两端点均落在矩形窗口内,椭圆弧仍可能和窗口相交,较难做到尽可能多的保留;4)即使椭圆弧两端点均落在矩形窗口外,圆弧也可能和窗口相交,较难做到尽可能多的排除。发明内容
发明目的本发明所要解决的技术问题是针对现有技术的不足,提供一种矩形窗口中椭圆曲线的快速裁剪方法。
为了解决上述技术问题,本发明公开了一种矩形窗口中椭圆曲线的快速裁剪方法,包括以下步骤
步骤1 输入矩形窗口的坐标,包括矩形窗口左上角顶点和右下角顶点的坐标;
步骤2 输入待裁剪的椭圆弧的坐标,包括了椭圆弧的起点坐标、终点坐标以及椭圆弧的长轴和水平坐标轴的夹角;
步骤3 以椭圆弧起点坐标和终点坐标,根据椭圆弧所属椭圆为正则椭圆或非正则椭圆查整体包围盒表获得椭圆弧的整体包围盒,所述整体包围盒查询表包括正则椭圆整体包围盒查询表和非正则椭圆整体包围盒查询表;
步骤4 比较所述椭圆弧整体包围盒和矩形窗口,判断椭圆弧整体包围盒是否位于矩形窗口内,若结果为是,则输出该椭圆弧,并转入步骤23,否则进行步骤5 ;
步骤5 比较该椭圆弧整体包围盒与矩形窗口,判断椭圆弧整体包围盒是否位于矩形窗口外,若结果为是,则舍弃该待裁剪的椭圆弧,并转入步骤23,否则进行步骤6 ;
步骤6 将待裁剪椭圆弧根据四个象限分割为多个象限椭圆弧段,椭圆弧落在几个象限内就被坐标轴分割为对应个数的象限椭圆弧段;
步骤7 根据待裁剪椭圆弧起点坐标、终点坐标,查象限椭圆弧段表获得各分割后的象限椭圆弧段及其对应的象限椭圆弧段包围盒;
步骤8 比较各象限椭圆弧段包围盒与矩形窗口,若各象限椭圆弧段包围盒均在矩形窗口外,则舍弃待裁剪椭圆弧,并转入步骤23,否则进行步骤9 ;
步骤9,根据矩形窗口上边界、下边界、左边界及右边界的延长线将坐标系分为九个分区,由上至下、由左至右分别依次编码为1区到9区;
步骤10,遍历各分割后的象限椭圆弧段,取各个象限椭圆弧段的起点坐标、终点坐标,确定起点、终点所在分区的编码;
步骤11 判断椭圆弧所属椭圆是否为正则椭圆,如果是正则椭圆,则转到步骤12, 否则转步骤14 ;
步骤12 根据各个象限椭圆弧段起点、终点所在分区,及矩形窗口与各象限椭圆弧段的关系,判断各个象限椭圆弧段是否在矩形窗口外,如果是,则舍弃该待裁剪的椭圆弧,并转入步骤23,否则转步骤13 ;
步骤13:根据点 P1(0. 25A,0. 6124B)、点 P2 (0. 5A,0. 866B)、点 P3(0. 7071A, 0. 7071B)、点P4(0. 866A,0. 5B)将象限椭圆弧段分成子段;其中A是椭圆长轴的长度,B是短轴的长度;
步聚14 将点 P1(0. 25A,0. 6124B)、点 P2 (0. 5A,0. 866B)、点 P3(0.7071A, 0. 7071B)、点P4(0. 866A,0. 5B)旋转至待裁剪椭圆弧所属的椭圆上作为分段点,将非正则椭圆弧分成子段;
步骤15 查子段包围盒表得到各子段的包围盒;所述子段包围盒表包括子段包围盒的总表、包含始点的非完整椭圆弧子段包围盒修改表以及包含终点的非完整椭圆弧子段包围盒修改表三个表;
步骤16 比较椭圆弧各子段的包围盒与矩形窗口,若各子段均在矩形窗口外,则舍弃待裁剪椭圆弧,并转入步骤23,否则进行步骤17 ;
步骤17 将椭圆弧各子段按比例变换到规范化坐标空间的半径为R的圆弧,即使椭圆长轴与短轴长度等同于圆弧半径R,矩形窗口按照相同的比例变换;
步骤18 对矩形窗口左右两边界的X坐标和矩形窗口上下两边界的Y坐标作比例变换,比例因子为1024/R,所述X坐标和Y坐标分别为标准坐标系中的横坐标和纵坐标;矩形窗口左右两边界和上下两边界的求交顺序根据求交顺序表来确定;
步骤19 根据变换后的X坐标和Y坐标查规范化圆弧直线交点的坐标表,获得规范化圆弧直线交点坐标,即Y坐标和χ坐标;
步骤20 对所述坐标实施反比例变换,得到圆弧直线实际交点坐标,比例因子为 R/1024 ;
步骤21 根据圆弧直线实际交点坐标,对所输入圆弧进行裁剪;
步骤22 将规范化圆反比例变换为椭圆,得到一个或多个椭圆弧段;
步骤23 输出并显示最终裁剪结果。
本发明中,所输入的待裁剪椭圆弧为逆时针方向,由其椭圆心、长轴与水平坐标轴的夹角、始点和终点描述,且经过平移后将坐标轴原点设定于待裁剪椭圆弧的圆心。
有益效果克服了代数运算的复杂低效的问题;通过查表法提高了椭圆包围盒的计算效率;通过将椭圆弧逐步细分为子段尽可能多的排除了不相关的椭圆弧段,在每一步分解中尽可能多的保留了相关椭圆弧段,从而减少了进一步细分时的计算。整个算法提高了椭圆弧的裁剪效率,减少了多余的计算开销。


下面结合附图和具体实施方式
对本发明做更进一步的具体说明,本发明的上述和 /或其他方面的优点将会变得更加清楚。
图1表示本发明的工作流程图。
图2表示通过象限椭圆弧段分割来完成相关性测试的例子。
图3表示矩形窗口分区及两个通过矩形窗口右上/左下顶点内外测试排除不相关象限椭圆弧段的例子。
图4表示非正则椭圆划分子段的例子。
具体实施方式
如图1所示,本发明提供一种矩形窗口中的椭圆弧快速裁剪方法,该方法包括以下步骤
步骤1 输入矩形窗口的坐标,包括矩形窗口左上角顶点和右下角顶点的坐标;
步骤2 输入待裁剪椭圆弧的坐标,包括了椭圆弧的起点坐标、终点坐标以及椭圆弧的长轴和水平坐标轴的夹角;
步骤3 以椭圆弧起点和终点坐标,根据椭圆弧所属椭圆为正则椭圆或非正则椭圆查整体包围盒表获得椭圆弧的整体包围盒,所述整体包围盒查询表包括正则椭圆整体包围盒查询表(表1)和非正则椭圆整体包围盒查询表(表2);
步骤4 比较所述圆弧整体包围盒和矩形窗口,判断椭圆弧整体包围盒是否位于矩形窗口内,若结果为是,则输出该椭圆弧,并转入步骤23,否则进行步骤5 ;
步骤5 比较该椭圆弧整体包围盒与矩形窗口,判断椭圆弧整体包围盒是否位于矩形窗口外,若结果为是,则舍弃该椭圆弧,并转入步骤23,否则进行步骤6 ;
步骤6 将待裁剪椭圆弧根据四个象限分割为多个象限椭圆弧段,椭圆弧落在几个象限内就被坐标轴分割为对应个数的象限椭圆弧段;
步骤7 根据待裁剪圆弧起点坐标、终点坐标,查象限椭圆弧段表(表幻获得各分割后的象限椭圆弧段及其对应的象限椭圆弧段包围盒;
步骤8 比较各象限椭圆弧段包围盒与矩形窗口,若各象限椭圆弧段包围盒均在矩形窗口外,则舍弃待裁剪椭圆弧,并转入步骤23,否则进行步骤9 ;
步骤9,根据矩形窗口上边界、下边界、左边界及右边界的延长线将坐标系分为九个分区,由上至下、由左至右分别依次编码为1区到9区,如图3 ;
步骤10,遍历各分割后的象限椭圆弧段,取各个象限椭圆弧段的起点坐标、终点坐标,确定起点、终点所在分区的编码;步骤11 判断椭圆弧所属椭圆是否为正则椭圆,如果是正则椭圆,则转到步骤12,如果不是则转步骤14 ;
步骤12 根据各个象限椭圆弧段起点、终点所在分区,及矩形窗口与各象限椭圆弧段的关系,判断各个象限椭圆弧段是否在矩形窗口外,如果是,则舍弃该椭圆弧,并转入步骤23,否则转步骤13;
步骤13 根据点 Pl (0. 25A, 0. 6124B)、点 P2 (0. 5A, 0. 866B)、点 P3 (0. 7071A, 0. 7071B)、点P4(0. 866A,0. 5B)将象限椭圆弧段分成子段;其中A是椭圆长轴的长度,B是短轴的长度;
步骤14 将点 P1(0. 25A,0. 6124B)、点 P2 (0· 5A,0· 866B)、点 Ρ3(0·7071Α, 0. 7071Β)、点Ρ4(0. 866Α,0. 5Β)旋转至待裁剪椭圆弧所属的椭圆上作为分段点,将非正则椭圆弧分成子段;
步骤15 查子段包围盒表得到各子段的包围盒;所述子段包围盒表包括子段包围盒的总表(表6)、包含始点的非完整椭圆弧子段包围盒修改表(表7)以及包含终点的非完整椭圆弧子段包围盒修改表三个表(表8);
步骤16 比较椭圆弧各子段的包围盒与矩形窗口,若各子段均在矩形窗口外,则舍弃待裁剪椭圆弧,并转入步骤23,否则进行步骤17 ;
步骤17 将椭圆弧段按比例变换到规范化坐标空间的半径为R的圆弧,即使椭圆长轴与短轴长度等同于圆弧半径R,矩形窗口按照相同的比例变换到相应位置;
步骤18 对矩形窗口左右两边界的X坐标和矩形窗口上下两边界的Y坐标作比例变换,比例因子为1024/R,所述X坐标和Y坐标分别为标准坐标系中的横坐标和纵坐标;矩形窗口左右两边界和上下两边界的求交顺序根据求交顺序表(表9)来确定;
步骤19 根据变换后的X坐标和Y坐标查规范化圆弧直线交点的坐标表(表10), 获得规范化圆弧直线交点坐标,即Y坐标和X坐标;
步骤20 对所述坐标实施反比例变换,得到圆弧与直线的实际交点坐标,比例因子为R/10M(其中除以IOM的操作通过将y坐标的二进制形式右移10位后换算实现);
步骤21 根据圆弧直线实际交点坐标,对圆弧进行裁剪;
步骤22 将规范化圆反比例变换为椭圆,得到一个或多个椭圆弧段;
步骤23 输出并显示最终裁剪结果。
步骤2中初始所输入的待裁剪椭圆弧为逆时针方向,由其椭圆心、长轴与水平坐标轴的夹角、始点和终点描述,且经过平移后将坐标轴原点设定于待裁剪椭圆弧的圆心。
步骤3通过查表法获得椭圆弧的整体包围盒,正则椭圆根据正则椭圆整体包围盒查询表(表1)进行查表,其步骤如下1)判定椭圆弧起APs(Xs,ys)与终点Pe(Xe,ye)所在象限,以此作为查询条件;2)对始、终点的某些组合,比较^与^,以作为查询的附加条件; 3)根据表1给出的规则快速获取任意圆弧的整体包围盒。
非正则椭圆根据表2进行查表,其步骤如下1)判定椭圆弧起点Ps(xs,ys)与终点Pe(xe, ye)所在象限,以及Ps和Pe各自的X、Y坐标所满足的条件作为查询条件;2)对始点、 终点的某些组合,比较^与^,以作为查询的附加条件;3)根据表2给出的规则快速获取任意椭圆弧的整体包围盒。
步骤4、5利用椭圆弧整体包围盒作相关性测试,若该整体包围盒位于矩形窗口内,则直接输出该椭圆弧、本次裁剪结束;若该整体包围盒完全位于矩形窗口外,则直接舍弃该椭圆弧、本次裁剪结束。设椭圆弧整体包围盒为(Xleft,yb。t,Xright' yt。p),矩形窗口为 (Xleft' Ybof Xright' Yt。P),则椭圆弧整体包围盒的相关性测试为
(1)若以下条件符合,则椭圆弧整体包围盒在矩形窗口同一边的外侧,应予以舍弃
(xright < Xlfet) V (xleft > Xright) V (ybot > Ytop) V (ytop < Ybot)
(2)若以下条件符合,则椭圆弧整体包围盒落在矩形窗口内部,应予以保留
(Xleft > Xleft) Λ (Xright < Xright) Λ (ybot > Ybot) Λ (ytop < Ytop)
步骤6将无法通过整体包围盒排除的椭圆弧进一步分割为若干个象限椭圆弧段。 图2给出了一个例子,其中待裁剪椭圆弧的整体包围盒较大,与矩形窗口重叠,因而无法排除。分割为三个象限椭圆弧段%及^3后,由于所有象限椭圆弧段的包围盒与窗口均不重叠,因而可判定原椭圆弧与窗口不相关。
给定任意椭圆弧,步骤7获取其各象限椭圆弧段的划分及象限椭圆弧段包围盒。 为避免象限椭圆弧段及其包围盒生成的计算开销,可同样由查表法快速获取,其步骤如下 1)判定圆弧始点Ps(xs,ys)与终点Pe(xe,ye)所在象限,以此作为查询条件;2)对始、终点的某些组合,比较^与^,以作为查询的附加条件;;3)根据预定义表5给出的规则获取其象限椭圆弧段分段及各象限椭圆弧段包围盒。
步骤8利用象限椭圆弧段的单调性,对各象限椭圆弧段进行快速相关性测试。以某象限椭圆弧段为例,设其始点为Psij (xsiJ,ysiJ),终点为Peij (xeiJ, yeiJ),则其相关性测试方法如下
一、若Psij及Peij均在矩形窗口(Xleft,Ybot, Xright, Ytop)内,则保留该象限椭圆弧段;
二、按以下条件对象限椭圆弧段进行相关性测试
1、若aij位于第1象限,且其始点在矩形窗口上侧(ysij > Ytop),或始点在矩形窗口左侧Usij < )(left),或终点在矩形窗口下侧(yeij < Yb。t),或终点在矩形窗口右侧Ueij > Xright),则排除 Bij ;
2、若aij位于第2象限,且其始点在矩形窗口下侧(ysij < Ybot),或始点在矩形窗口左侧Usij < )(left),或终点在矩形窗口上侧(yeij > Yt。p),或终点在矩形窗口右侧Ueij > Xright),则排除 Bij ;
3、若aij位于第3象限,且其始点在矩形窗口下侧(ysij < Ybot),或始点在矩形窗口右侧(Xsij > Xright),或终点在矩形窗口上侧(yeij>Yt。P),或终点在矩形窗口左侧(Xeij <)(lrft),则排除 aiJ;
4、若aij位于第4象限,且其始点在矩形窗口上侧(ysij > Ytop),或始点在矩形窗口右侧(XsijSXright),或终点在矩形窗口下侧(yeij<Yb。t),或终点在矩形窗口左侧(Xeij <)(lrft),则排除 aiJ;
三、若Psij及Peij中有且仅有一个在矩形窗口内,则留待后续求交处理;
四、其它情况需作进一步的相关性测试。
若所给椭圆弧所有象限椭圆弧段均被排除,则舍弃该椭圆弧、本次裁剪结束。
步骤9判断椭圆弧所属的椭圆是否为正则椭圆,若为正则椭圆则转到步骤10,否则转到步骤14。
步骤10按矩形窗口边界进行分区,分区编码见图3,根据矩形窗口上边界、下边界、左边界及右边界的延长线将坐标系分为九个分区,由上至下、由左至右分别依次编码为 1区到9区;
步骤11进一步遍历步骤8无法排除的象限椭圆弧,分别确定各象限椭圆弧起点和终点的分区编码。然后步骤12根据各椭圆弧始、终点分区编码情况,分别对矩形窗口右上或左下顶点作内外检测,以判断是否应排除该象限椭圆弧段,具体方法是对在第I象限的象限椭圆弧段(a)如果其起点或终点之一在5区,该椭圆弧段不能排除、需保留以便后续求交才能完成裁剪;(b)如果其起点在6区、终点在1区,或起点在6区、终点在2区,或起点在9区、终点在2区,且当该象限椭圆弧段在窗口右上顶点外绕过,即矩形窗口右上顶点在椭圆弧段内侧时,该椭圆弧段与窗口无交点、应排除;(c)如果其起点在8区、终点在1 区,或起点在8区、终点在4区,或起点在9区、终点在4区,且当该椭圆弧段在窗口左下顶点外绕过,即矩形窗口左下顶点在椭圆弧段外侧时,该椭圆弧段与窗口无交点、应排除;⑷ 其它情况下该椭圆弧应直接排除。当象限椭圆弧段在第II象限时,将该象限椭圆弧段的圆心、起点、始点坐标及矩形窗口顶点坐标作如下变换
χ,= -χ,y' = y
其中(X,y)为变换前的点,(χ’,γ’ )为变换后的点,然后交换变换后位于第I象限的象限椭圆弧段的起点、终点次序,并按第I象限内的象限椭圆弧段快速排除方法排除; 当象限椭圆弧段在第III象限时,将该象限椭圆弧段的圆心、起点、始点坐标及矩形窗口顶点坐标作如下变换
χ,= -χ,f = -y
从而将该象限椭圆弧段变换至第I象限后,按第I象限内的象限椭圆弧段快速排除方法排除。当象限椭圆弧段在第IV象限时,将该象限椭圆弧段的圆心、起点、始点坐标及矩形窗口顶点坐标作如下变换
χ,= X,y,= -y
然后交换变换后位于第I象限的象限椭圆弧段的起点、终点次序,并按第I象限内的象限椭圆弧段快速排除方法排除。
不管是椭圆弧整体,还是各象限椭圆弧段的包围盒,都包含大块的空自区,造成许多无关的情况无法简单地排除,从而需要通过求交来排除,耗费较多时间。解决的办法是将无法简单地排除的椭圆弧通过进一步分段来排除。步骤13和步骤14分别对没能在步骤8 被排除的正则椭圆弧和非正则椭圆弧进行分段处理。
对于正则椭圆而言,在步骤13中,完整的象限椭圆弧被分成四个子段,分段点分别为点 Pl (0. 25Α,0· 61ΜΒ)、点 Ρ2(0. 5Α,0· 866Β)、点 Ρ3(0. 7071Α,0. 7071Β)、点 Ρ4 (0· 866Α,0.5Β)。直接用分段点形成包围盒的计算量太大,可通过查表法获得子段包围盒。表6为完整的象限椭圆弧段的子段查找表。查表步骤如下1)获得椭圆弧子段所在的象限作为查询条件;2)以椭圆弧子段上所有点的X坐标范围作为进一步的查询条件;幻根据表中给出的子段包围盒规则得到椭圆弧子段的包围盒。非完整椭圆弧段是包含椭圆弧始点或终点的象限椭圆弧段,对于非完整椭圆弧段,通过查表7、表8修正椭圆弧子段的包围盒。划分子段后,一个象限椭圆弧段的所有子段包围盒均在裁剪矩形之外时,该象限椭圆弧段可直接排除。
对于非正则椭圆而言,在步骤14中,将正则椭圆中点Pl (0. 25A,0. 6124B),点 Ρ2(0· 5Α,0· 866Β),点 Ρ3 (0. 7071Α,0. 707IB),点 P4 (0. 866Α,0· 5Β)这四个点做旋转后作为分段点。旋转的角度为将正则椭圆旋转到待裁剪椭圆的位置所需要的角度。
为减少乘法,使用前述类似办法用加减法获得A或B的小数倍来减少计算。为了确保精度,段间可略有覆盖,视不同位置用一个小斜线,如图4。旋转后的分段点与最高、右、 左、低点顺序可能随旋转角而变化,需要进行判定。旋转后的点计算公式如下,其中Pqx、Pqy 分别是旋转前的点的χ、y坐标,Phx, phy分别是旋转后的点的χ、y坐标
Phx = PqxCOS α -PqySIN α
Phy = PqxSIN α +PqyCOS α
SINa和COS α可通过查常用角度三角函数表(表3)获得。
步骤17、18、19、20、21、22通过查表法快速获取通过求交才能完成裁剪的圆弧的交点并完成裁剪。在象限椭圆弧段与窗口某边求交时,步骤17首先将椭圆弧变换为规范化圆弧,即将椭圆弧端点和窗口边坐标按比例变换到规范化坐标空间的圆弧(如A、B变成 512)。步骤22将查表求交后得到标准化圆弧反比例变换回原椭圆弧,即步骤17和步骤22 先后各做了一次乘法,最后裁剪出的新端点也要反比例变换回去。
设椭圆弧长轴为A,短轴为B,将椭圆弧按比例变换为规范化圆后其半径为R,始、 终点X坐标分别为X1和&,矩形窗口右上顶点坐标为(XHhgt,Tt。p),则其求交步骤如下
1、变换Xrihgt ·Χ rihgt = Xrihgt*1024/R ;(乘以10 的操作通过左移10位实现,完全整数运算)
2、用X’ rihgt作表4地址(左栏),查右栏结果Y’ cross ;
3、逆变换得交点的纵坐标Y。rass = Y'cross*R/1024 ;(除以IOM的操作通过右移10 位实现,完全整数运算)
步骤19中利用变换后的右边界X坐标查预定义的规范化圆弧-直线交点的y坐标表,见明表10。
SY。r。ss<Yt。pJiJ (Xrihgt,Y。r。ss)即为该竖直边与椭圆弧的有效交点,若Y。r。ss>Yt。p, 则圆弧在右上顶点外绕过(此时右上顶点位于“弦”与弧之间),应排除。该过程中仅涉及两次整数乘法运算,无需开方等复杂运算。对该象限椭圆弧段与水平裁剪边相交的处理,将 χ与y互换后亦可使用表10 (利用圆的八分对称性)。查表操作实际上通过指令寻址中的变址来实现,少数几条机器指令即可实现,其时间开销可忽略不计,因而与求解直线和圆的联立方程相比,效率提高很多倍。其它象限椭圆弧段及其与相关边的求交,亦可按照圆的四分对称性,共用一张交点查找表,只需做相应的符号变换即可。
表1给出了正则椭圆由始、终点位置确定圆弧整体包围盒的规则表。Ps(xs,ys)及 Pe(xe,ye)分别为椭圆弧的始点和终点,A和B分别为椭圆长轴和短轴的长度,(Xl,Yb)为圆弧整体包围盒左下角顶点坐标,0(r,Yt)为圆弧整体包围盒边界右上角顶点坐标。表项中, 第一行第一列“始点与终点的象限位置”下对应的是查询条件,而第一行第二列“正则椭圆弧的包围盒”项下对应的是查询结果。查询条件包含第二行第一列的始点位置“Ps(xs,ys) ”、 第二行第二列的终点位置“Pe(Xe,yJ,,以及第二行第三列的“附加条件”,附加条件指的是始点和终点的X坐标的位置关系。查询结果依次是第二行第四列的包围盒左下角顶点X坐标 XI、第二行第五列的左下角Y坐标Y1、第二行第六列的右上角X坐标&·、第二行第七列的右上角Y坐标竹。表项中的具体内容根据椭圆弧的象限关系可直接得到,其中由于始点和终点在同一象限中时各自与长短轴端点的位置关系难以确定,因此需要分两种情况列出。
表1正则椭圆整体包围盒查询表。
权利要求
1. 一种矩形窗口中椭圆曲线的快速裁剪方法,其特征在于,包括以下步骤 步骤1 输入矩形窗口的坐标,包括矩形窗口左上角顶点和右下角顶点的坐标; 步骤2 输入待裁剪的椭圆弧的坐标,包括了椭圆弧的起点坐标、终点坐标以及椭圆弧的长轴和水平坐标轴的夹角;步骤3 以椭圆弧起点坐标和终点坐标,根据椭圆弧所属椭圆为正则椭圆或非正则椭圆查整体包围盒表获得椭圆弧的整体包围盒,所述整体包围盒查询表包括正则椭圆整体包围盒查询表和非正则椭圆整体包围盒查询表;步骤4 比较所述椭圆弧整体包围盒和矩形窗口,判断椭圆弧整体包围盒是否位于矩形窗口内,若结果为是,则输出该椭圆弧,并转入步骤23,否则进行步骤5 ;步骤5 比较该椭圆弧整体包围盒与矩形窗口,判断椭圆弧整体包围盒是否位于矩形窗口外,若结果为是,则舍弃该待裁剪的椭圆弧,并转入步骤23,否则进行步骤6 ;步骤6:将待裁剪椭圆弧根据四个象限分割为多个象限椭圆弧段,椭圆弧落在几个象限内就被坐标轴分割为对应个数的象限椭圆弧段;步骤7 根据待裁剪椭圆弧起点坐标、终点坐标,查象限椭圆弧段表获得各分割后的象限椭圆弧段及其对应的象限椭圆弧段包围盒;步骤8 比较各象限椭圆弧段包围盒与矩形窗口,若各象限椭圆弧段包围盒均在矩形窗口外,则舍弃待裁剪椭圆弧,并转入步骤23,否则进行步骤9 ;步骤9,根据矩形窗口上边界、下边界、左边界及右边界的延长线将坐标系分为九个分区,由上至下、由左至右分别依次编码为1区到9区;步骤10,遍历各分割后的象限椭圆弧段,取各个象限椭圆弧段的起点坐标、终点坐标, 确定起点、终点所在分区的编码;步骤11 判断椭圆弧所属椭圆是否为正则椭圆,如果是正则椭圆,则转到步骤12,否则转步骤14 ;步骤12 根据各个象限椭圆弧段起点、终点所在分区,及矩形窗口与各象限椭圆弧段的关系,判断各个象限椭圆弧段是否在矩形窗口外,如果是,则舍弃该待裁剪的椭圆弧,并转入步骤23,否则转步骤13;步骤 13 根据点 Pl (0. 25Α,0· 6124Β)、点 Ρ2 (0. 5Α,0· 866Β)、点 Ρ3 (0. 7071Α,0. 7071Β)、 点Ρ4(0. 866Α,0. 5Β)将象限椭圆弧段分成子段;其中A是椭圆长轴的长度,B是短轴的长度;步聚 14 将点 Pl (0. 25A, 0. 6124B)、点 P2 (0. 5A, 0. 866B)、点 P3 (0. 7071A, 0. 7071B)、点 P4(0. 866A,0. 5B)旋转至待裁剪椭圆弧所属的椭圆上作为分段点,将非正则椭圆弧分成子段;步骤15 查子段包围盒表得到各子段的包围盒;所述子段包围盒表包括子段包围盒的总表、包含始点的非完整椭圆弧子段包围盒修改表以及包含终点的非完整椭圆弧子段包围盒修改表三个表;步骤16 比较椭圆弧各子段的包围盒与矩形窗口,若各子段均在矩形窗口外,则舍弃待裁剪椭圆弧,并转入步骤23,否则进行步骤17 ;步骤17 将椭圆弧各子段按比例变换到规范化坐标空间的半径为R的圆弧,即使椭圆长轴与短轴长度等同于圆弧半径R,矩形窗口按照相同的比例变换;步骤18 对矩形窗口左右两边界的X坐标和矩形窗口上下两边界的Y坐标作比例变换,比例因子为1024/R,所述X坐标和Y坐标分别为标准坐标系中的横坐标和纵坐标;矩形窗口左右两边界和上下两边界的求交顺序根据求交顺序表来确定;步骤19 根据变换后的X坐标和Y坐标查规范化圆弧直线交点的坐标表,获得规范化圆弧直线交点坐标,即Y坐标和X坐标;步骤20 对所述坐标实施反比例变换,得到圆弧直线实际交点坐标,比例因子为 R/1024 ;步骤21 根据圆弧直线实际交点坐标,对所输入圆弧进行裁剪; 步骤22 将规范化圆反比例变换为椭圆,得到一个或多个椭圆弧段; 步骤23 输出并显示最终裁剪结果。
2.根据权利要求1中所述的矩形窗口中椭圆曲线的快速裁剪方法,其特征在于,所输入的待裁剪椭圆弧为逆时针方向,由其椭圆心、长轴与水平坐标轴的夹角、始点和终点描述,且经过平移后将坐标轴原点设定于待裁剪椭圆弧的圆心。
全文摘要
本发明公开了一种矩形窗口中椭圆曲线的快速裁剪方法,对任意给定的椭圆弧,该方法按各类椭圆弧出现的概率及所需操作,先后通过椭圆弧的整体包围盒,各分割后的象限椭圆弧,矩形窗口顶点相对于象限椭圆弧段的内外测试,划分的椭圆弧子段的相关性测试,以较少的操作、尽可能多的排除与矩形窗口不相交的椭圆弧;对剩余的需要求交操作才能完成裁剪的椭圆弧,通过查表法快速获取椭圆弧与矩形窗口边的交点。本发明的有益之处是,对任意待裁剪椭圆弧,仅需几次移位、整数加减或少量乘除法运算,即可快速获取其裁剪结果,椭圆弧裁剪效率有很大提高。此外,由于椭圆弧裁剪是图形学及CAD的基础问题之一,该方法可广泛应用于各类绘图软件、建模软件、CAD软件及复杂工程图设计系统等。
文档编号G06T3/00GK102509258SQ20111030123
公开日2012年6月20日 申请日期2011年10月8日 优先权日2011年10月8日
发明者路通, 陆添超 申请人:南京大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1