绘制三次曲线的方法和设备的制作方法

文档序号:6414570阅读:287来源:国知局
专利名称:绘制三次曲线的方法和设备的制作方法
技术领域
本发明涉及绘制三次曲线的方法和设备,更具体地,涉及用于绘制三次贝齐尔(Bezier)曲线的方法和设备,此类曲线由两个独立的工作单元快速地分解成许许多多的小段,此二工作单元在判优器的协助下平行地处理三次贝齐尔曲线的四个控制点的输入数据,分段在显示器上显示或输出给打印机。
在计算机辅助设计或者在为显示具有轮廓字形的字符的计算机图解领域,绘制三次曲线常常是必需的;关于三次曲线的贝齐尔曲线的近似逼近是最广泛地使用的方法之一。
在计算机系统中产生贝齐尔曲线有两种基本的方法第一种是自适应细分法(Adaptive Subdivision)及第二种是向前差分法(ForWard Difference)。
正如在“分段多项式曲面的计算机生成和显示的理论进展”一文中所演示的(IEEE Trans.on pattern Analysis and MachineIntelligence,Jan 1980.)贝齐尔曲线的自适应细分原理如下式所示Bn[P;u]=Σi=0nPi(in)ui(1-u)n-i,]]>我们能够指出(Ⅰ) Bn[P;u]=Bn[P00,P11,…,Pnn;2u](Ⅱ) Bn[P;u]=Bn[Pnn,Pnn-1,...,Pn0;2u-1]其中,
参看图2,有四个初始的控制点P00,P01,P02和P03,根据它们,导出三个对应的中间点P11,P12,和P13。接着根据上述的三个点得出二个中间点P22和P23。最后,点P22和P23的中间点P33是在上面方程中的参数U等于0.5的点。从控制点P00,P11,P22,和P33的组以及控制点P33,P23,P13和P03的组,能够分别产生原始曲线的第一和第二半段。如果参数U的间隔从0.0变化到1.0,则第一个半段是相关于参数U从0.0到0.5而第二半段则与参数U从0.5到1.0相关。
如果两个新的控制点组继续被分,能够得到许多具有相等间距的新的控制点。按照贝齐尔曲线的绝对收敛性质,随着分段变得非常小时,新的控制点能够进一步地逼近原始曲线。
用图3所示的二进制树能最好地说明二进制近似算法。由四个控制点组成的控制点基本组C可以产生两个控制点子组LC和RC,它们进一步可以产生作为二进制树的最终输出的LLC,RLC,LRC,和RRC。因此,上述的自适应细分法非常接近传统的二进制树中的深度优先截线法(Method of Depth-First Transversal)右边子组的控制点被存储在堆栈存储器中而左边子组的控制点被用作在本次划分过程结束时下一次划分的源数据。如果待划分的控制点子集满足收敛的要求,也即该子集的四个控制点在相同的直线内,此子集被用于绘制曲线并且停止被进一步划分,并且先前推入堆栈的右边的子集被用作下一个划分过程的源数据。重复上面所述的过程直到无可用的数据。
自适应细分法有四个优点。第一,输入和输出数据在格式上是一致的,即源数据和输出数据两者都是控制点。假如存在着多重的贝齐尔产生器,则通过适当的串行连接能够并行地完成所期望的曲线。第二,只需要使用加法器和移位器的简单运算并且易于通过硬件电路和微型编程来完成,第三,根据收敛条件来确定划分到那一级是必需的,好的输出能够从任何具有精密变分的曲线来得到。第四,如果曲线横过可观察窗口,顶部-底部的划分过程能够筛去那些不必要的超出可视窗口的运算。
但是,自适应细分法有一些缺点,首先,必须有一组快速堆栈存储器用来暂时地存储控制点和推出所存数据。其次,在二进制树中的每个节点在该二进制树被用来完成跟踪运算时都必须被处理。但是,只有最后的节点是需要的而那些中间节点的运算是不必要的。
关于向前差分,使用了差分的原理。定义向前差分为Δf(t)=f(t+δ)-f(t),此处δ>0。当fn=f(tn)且tn=n·δ时,fn+1=fn+Δfn。此外,Δfn+1=Δfn+Δ2fn,Δ2fn+1=Δ2fn+Δ3fn。假定一个多项式f(t)=a+bt+ct2+dt3,
Δf(t)=3dt2δ+t(3dδ2+2cδ)+dδ3+cδ2+bδ.
Δ2f(t)=Δ(Δf(t))=6dδ2t+6dδ3+2cδ2.
Δ3f(t)=Δ(Δ2f(t))=6dδ3.
我们能够计算初始条件f0=a,Δf0=dδ3+cδ2+bδ,Δ2f0=6dδ3+2cδ2,Δ3f0=6dδ3。相继的数据能如下导出fi+1=fi+Δfi,Δfi+1=Δfi+Δ2fi,Δ2fi+1=Δ2fI+Δ3fo。
向前差分法有两个优点,第一,通过使用三个加法器,为快速地产生所希望的用于绘制曲线的点,只需要一个步骤。第二,不仅贝齐尔曲线而且任何类型的三次曲线也能被绘制。
向前差分法仍然有三个缺点,第一,必须将具有几何参量的贝齐尔曲线通过一个浮点乘法运算的预处理转换成一个三次多项式。第二,差分的值必须被确定且是非常难确定的,特别是在那些曲率变化很大以致于很难获得好的输出数据的地方,这是最最严重的缺点。第三,虽然出现的部份计算超出了可视窗口,但这对于完成该计算仍是必需的,因为计算必须逐点地完成。
为了解决上述的缺点,一篇题为“用于绘制曲线和曲面的自适应向前差分”的文章(Compufer Graphics,July 1987)提出一种改进的自适应向前差分方法(AFD)。首先,将控制点取作参数的贝齐尔曲线根据AFD转换为如下的多项式f(t)=a0A0(t)+a1A1(t)+a2A2(t)+a3A3(t)其中ak(t)=((t-k+1)/k)*Ak-1(t)且A0(t)=1这即是,当t=0时AFD的算法包括A0(t)=1,A1(t)=t,A2(t)=(1/2)(t)(t-1)和A3(t)=16(t)(t-1)(t-2),]]>当t=t+1时,AFD的算法包括A0(t+1)=1=A0(t),A1(t+1)=A0(t)+A1(t),A2(t+1)=A1(t)+A2(t)以及A3(t+1)=A2(t)+A3(t)新的算法被代入多项式,得到f(t+1)=(a0+a1)A0(t)+(a1+a2)A1(t)+(a2+a3)A2(t)+a3A3(t),此式表明了与老的算法的关系。
因此,E、L、R、和P代表AFD算法矩阵A的运算矩阵,分别对应于f(t+1),f(f/2),f(t/2+1),和f(2t)。此处A=[A0(t),A1(t),A2(t),A3(t)]E=1100011000110001]]>L=110001/2-1/81/16001/4-1/80001/8]]>R=110001/23/8-1/16001/4-1/80001/8----P=1000021000440008]]>理论上,自适应向前差分法具有在向前差分时快速运算的优点并且能在每一步中适应划分级。作为例子参考图4,自适应向前差分不仅有像自适应细分法中那样的L和R运算,或者像向前差分法中那样的唯一的E运算,并且有L,R,E和P四种运算。
但是,确定划分级的方法是可争论的,因为它没有严格到足以根据当前的和早先的点之间的距离来确定收敛。参考图5,第一点P0和最末点P3之间的距离是零但曲线是不收敛的。因此,如果收敛条件是宽松的则绘制曲线的速度快,而如果该条件是严格的则速度将变慢且它将变成一道难关。
总起来讲,在现有技术中的自适应细分法和自适应向前差分法有如下的缺点(1)自适应细分需要堆栈存储器件,因而系统的运算效率由于在堆栈访问中太多的处理而大大降低,并且划分的效能也不佳。
(2)自适应向前差分需要将贝齐尔曲线的参数公式转换成AFD算法公式,这要花费很多时间去完成浮点运算。
(3)自适应向前差分的输出是格式化的点而不是一组控制点因而贝齐尔曲线的许多特性没有被利用。例如贝齐尔曲线的凸包性质被用来确定曲线是否超出视窗并迅速跳过不必要的计算。进一步讲,曲线的切线能用控制点确定。在计算光源和目标物之间的角度时,这是关于画影线处理的最希望的信息。
本发明的目的是提供一种在计算机系统中绘制三次曲线的方法,以克服上述的问题。计算机系统包括存储器件,显示器件,以及诸如键盘或鼠标之类的输入器件。方法包括步骤1(输入)由用户输入包含贝齐尔曲线中四个控制点的控制点组;步骤2(垂直划分)该控制点组被分成两组控制点组,包括左和右控制点子组;步骤3(水平外延)从四个控制点以适当的算法推导出该控制点组的相邻和母系组;步骤4(输出)如果控制点的组满足直线收敛条件,第一点和最末点被用作在监视器显示的或输出给打印机的终端的点;步骤5(路径选择)原则上,相邻的组被用作下一个过程的源数据;如果控制点组是收敛的,母系组则被选择为下一过程的源数据;如果子系组之一是收敛的,该子系组被选择为下一过程的源数据;以及步骤6(终点)检验所期望的三次曲线是否被完成,如没有完成则返回到步骤2。
本发明的另一个目的是提供一个在包含有存储器件,显示器件,以及诸如键盘或鼠标的输入器件的计算机系统中绘制三次曲线的设备,包括一个可视窗口坐标寄存器,它用来存储可视窗口的左上和右下位置的坐标,作为决定曲线是否为可视的参考;一个输入控制点寄存器,存储输入控制点;一个输出控制点寄存器,存储输出控制点;一个LR运算器,其籍助于简单的加法和移位运算,并行地分三个运算层产生左和右的控制点的子系组;一个EP运算器,籍助于简单的加法和移位处理并行地分三个运算层产生控制点的相邻组和母系组;一个路径选择器,其包括一个收敛分析器,一个可视性测定器件和一个终端计数器,根据从LR和EP运算器导出的控制点决定反馈输入和输出;以及一个段产生器,按照显示器件的驱动程序以贝齐尔曲线的第一和最末控制点作为端点产生所期望线的点数据。
用户可以将贝齐尔曲线的控制点数据输入进输入控制点寄存器和可视窗坐标寄存器并且触发本发明中的设备的其余部件。从任何一组控制点出发通过LR和EP运算器能够获得右、左、相邻、和母系控制点。路径选择器检验该四类点的收敛性和与可视窗口的关系决定下一次操作有关的反馈输入。在最佳条件下,母系控制点是不收敛的,而左和右控制点是收敛的。则左和右控制点被直接传送给输出控制点寄存器。在输出控制点寄存器接收到有效的控制点后,这些数据被传输给段产生器,段产生器将借助于一个传统的数字微分分析器(DDA)分别以第一点和最末点作为起始和终止点产生所期望段的点数据。如果堆栈是空的,传统的自适应细分法将停止绘制操作。但是本发明需要设计一组终端计数器以使得在计数器中的值相对于路径选择器是自适应的,并且当计数器中的值小于零时绘制操作将停止。
本发明的其它特点和优点在下面的参考附图的说明之后将会变得明明白白。


图1表示本发明中的一个优选实施例的系统方块图。
图2显示说明贝齐尔曲线的划分原则的示意3显示说明重复划分的LR运算的二进制树结构。
图4显示利用二制制树结构的自适应向前差分的L、R、E和P运算。
图5表示贝齐尔曲线的特殊情况。
图6表示本发明中的优选实施例的LR运算器的内部结构。
图7表示本发明中的优选实施例的EP运算器的内部结构。
图8显示本发明中的优选实施例的路径选择器的流程图。
图9图示本发明中的优选实施例的路径选择器的一个模拟分析。
图10图示本发明中的优选实施例的控制点的收敛性的确定过程。
图11表示在本发明中的优选实施例的可视窗中的获取过程。
参考图1,系统方块图包括作为输入器件的键盘10和鼠标12,用于用户输入曲线的控制点数据,以及存储来自输入器件的坐标数据的存储器件15。还有CPU13(中央处理单元)被用于将可视窗的坐标数据和存储在存储器件中的控制点的坐标数据传送给数据总线30。可视窗坐标寄存器55和输入控制点寄存器50分别接收上述的坐标数据和控制点数据。一旦控制点数据进入输入控制点寄存器50,贝齐尔曲线的产生过程即被触发。LR运算器80将输入控制点数据组以图6所示的并行方式转变成左和右子系组控制点,图6表示其内部结构。EP运算器85被用于将输入控制点并行地转变成相邻和母系组,就像表示内部结构的图7所示那样。路径选择器90被用于分析来自LR和EP运算器的控制点数据,以便确定是否生成输出数据,如何反馈,以及最后的终点,就像表示控制过程的流程图的图8所示那样。多路转换器70控制两个运算器的输入源使得LP和EP运算器将只接收来自输入控制点寄存器50的第一个输入数据除外的路径选择器的反馈数据。输出控制点寄存器60存储曲线的输出数据。段产生器40进一步处理输出数据并以直线的方式模拟贝齐尔曲线,输出数据被划分并且收敛于一条线。显示驱动器20和显示器件25被用来显示与段产生器40相一致的最终结果。
路径选择器的流程图显示在图8中。终端计数器在步骤S801中被复位为零。步骤S802根据存储在输入控制点寄存器中的数据得到用于运算的第一组输入数据。在步骤S805中,输入C被传送给LR和EP运算器以获得L、R、E、和P四个组,它们是下一步反馈输入数据的待选择的控制点,其优先顺序为P、L、R和E。在此时刻,步骤S806检验输入C是否完全地超出可视窗;如果是,步骤S807检验终止条件(在终端计数器中的值为零)如果它被满足,则过程中的所有运算将停止。如果输入C完全超出视窗但是终止条件不被满足,存在着两种保持完整的二进制树结构的结果。假定控制点的母系组已经被用作正在处理中的控制点。首先,如果当前控制点组是母系组的左子组并且母系组的组P也超出视窗,当前控制点数据C在步骤S810中被母系组的组P所代替。并且接着在步骤S811中终端计数器中的值被除以2,第二,如果步骤S809得出当前控制点组是控制点的母系组的右子组或者组P不完全超出视窗、则在步骤S813中控制点的相邻组E取代C并在步骤S814中将终端计数器中的值减1。然后经由步骤S812返回至步骤S803着手下一运算。
如果至少控制点组C的部分是在可视窗内,步骤S815检验组C是否收敛以及是否为母系组的左子组;如果是,运算移向母系组。步骤S818和S819表示此向前过程。如果组C是最末的,步骤S820输出组C并且终止正在进行中的所有运算。
在步骤S850之后,步骤S851被用于检验L和R且存在着三种情况。第一种,如果L和R是收敛的,则在步骤S859中控制点的相邻组E将代替当前的控制点的组C且在步骤S860中终端计数器中的值将被减1;步骤S861并行地输出组L和组R。当第二种情况,如果组L是收敛的而组R不是,则在步骤S853中控制点组R将代替当前组C;步骤S854输出组L且步骤S855将计数器的值乘以2。第三种情况,如果组L不收敛,组L在步骤857中代替当前组C并且步骤S858将计数器的值乘2后加1。
图9用于说明路径选择的模拟程序其中绘制曲线的每个过程与二进制树结构相对应。在图9中,运算器LR划分运算的秩序是节点900,节点910和节点920。系统将输出921和922的数据并且走向节点930因为相对于由节点920导出的节点921和922的控制点是收敛的。系统将输出931和932的数据并走向节点940,因为相对于由节点930导出的节点931和节点932的控制点是收敛的。但是关于节点940的控制点是收敛的于是系统将进一步走向节点950。从节点950的观点出发,关于节点940的控制点是收敛的且系统输出关于节点940的数据,但是节点960是不收敛的因此系统将进一步走向节点960。因此节点961和962是收敛的,系统将筛去节点961和962的控制点数据。
上述的流程图和模拟结果的说明有四点将被详细描述第一,关于运算器LR和EP的内部结构和运算;第二,如果确定控制点的收敛性;第三如何确定曲线是否在可视窗内;第四,本发明中的设备用于绘制三次曲线的效率。
1.运算器LR和EP的内部结构和运算LR运算器采用如图6所示的传统的自适应细分法的设计。每个小园代表一个产生(A+B)/2的运算单元,此处A和B是两个输入数据,三次运算以后,初始的控制点(P00,P01,P02和P02)被分成左子系组(P00,P11,P22和P33)及右子系组(P03,P13,P23和P33)。
EP运算器是本发明中所提供的,如图7所示,它类似于LR运算器。每个小园代表产生2B-A的运算单元,这里A和B是两个输入数据。三次运算以后,初始的控制点(P00,P01,P02和P03)被分成为母系组(P00,P11,P22和P33)和相邻组(P03,P13,P23和P33)。
正如大家熟知的,LR运算器对于贝齐尔曲线的划分过程如下所示假定Bn[P;u]=Σi=0nPi(in)ui(1-u)n-i,]]>则(Ⅰ) Bn[P;u]=Bn[P00,P11,…,Pnn;2u](Ⅱ) Bn[P;u]=Bn[Pnn,Pnn-1,…,Pn0;2u-1]式中,Pik=(Pi-1k-1+Pik-1)/2,k=1,2,..,nPi,k=0本发明提供如下的关于EP操作器的算法(它能用归纳法来证明)假定Bn[P;u]=Σi=0nPi(in)ui(1-u)n-i,]]>则(Ⅰ) Bn[P;u]=Bn[P00,P11,…,Pnn;u/2](Ⅱ) Bn[P;u]=Bn[Pn0,Pn1,…,Pnn;u-1]式中,
本发明不仅能产生三次曲线而且还有二次曲线或者更高次的曲线。而且,为了更清楚地说明本发明,图6和图7均用了6个运算器。如果希望用硬件电路完成运算,通过增加适当的反馈电路,运算器的数目可以降为3个。
2.如何确定控制点的收敛性如图10所示,为确定由组C(P100,P200,P300和P400)所定义的贝齐尔曲线是收敛于一条线,一般的方法是从P200和P300分别作两条垂直于P100和P400之间线段的线。如果这两条线段的长度小于阈值,则控制点被认为是收敛的。
为了节省计算时间或者为了便于完成硬件电路,如下的更简单的方法常常被使用只有两个矢量V250(V200减V100)和V350(V300减V200)被计算并且如果这两个矢量的X或Y分量小于阈值,控制点被认为是收敛的。
3.如果确定曲线是在可视窗之内本发明优于向前差分法的优点是极容易确定当前控制点超出可视窗和以动态的方法适应划分级。
在图11中,由控制点(P00,P01,P02和P03)所限定的贝齐尔曲线完全超出由(B300和B400)所限定的可视窗。如果得到四个控制点的最大坐标值这就容易确定曲线超出可视窗。
4.本发明中的设备用来绘制三次曲线的效率超过自适应细分的传统方法的优点是第一,不再更多需要存储堆栈,节省了访问时间;第二,二进制树中两个终端结点必需被处理而不是自适应细分法中的所有结点。对于一个完整的二进制树,如果终端结点为N,则总共有2N-1的结点。
这里有三个优点超过自适应向前差分法。第一,自适应向前差分法需要诸如乘法和除法浮点运算,把基于控制点的贝齐尔曲线变换到AFD算法。第二,自适应向前差分不能跳过曲线在可视窗外的情况时的那些不必要的计算。第三,本发明只需要在英特8086处理器中的12个加和减过程(36个钟周期)和12个移位过程(42个钟周期)去完成L,R,E,和P操作而自适应向前差分则需要14个加和减过程(42个钟周期)和41个移位过程(82个钟周期)。
本发明有三个主要的优点(1)在本发明中不需要存储堆栈器件并且通过硬件和微编程降低成本(2)控制点被直接用作输入数据,不需要用于预处理过程的浮点运算。四个运算L,R,E和P的平均效率优于自适应向前差分。
(3)本发明中的中间数据是控制点且能利用贝齐尔曲线的性质,比如确定被检测曲线超出了可视窗,动态地适应划分和外延级,筛出不必要的计算。
虽然在上面的说明中只显示和描述了本发明的优选实施例,要求来自本发明领域中的任何修改或组合受到保护。
权利要求
1.在计算机系统中绘制三次曲线的方法,该计算机系统包括存储器件、显示器件以及诸如键盘或鼠标的输入器件,方法包括的步骤有a.输入包含在所说的三次曲线的贝齐尔曲线中的四个控制点的控制点组;b.利用LR运算器从所说的控制点组产生左子系组和右子系组、所说的左和右子系组每组有四个控制点;c.利用EP运算器使用适当的算法从所说的控制点组推导出相邻组和母系组,所说的相邻组和母系组每组有四个控制点;d.如果所说的控制点组的四个控制点满足预定的直线的收敛条件,采用所说的控制点组的第一和最末控制点显示输出一个线段;e.如果所说的贝齐尔曲线是完整的,终止所说的贝齐尔曲线的绘制,否则执行步骤f;f.返回至步骤b,继续下一个循环用所说的母系组,所说的相邻组,所说的右子系组,或所说的左子系组替代所说的控制点组;其中所说的相邻组被用作下一循环的控制点组;所说的母系组被用作下一循环的控制点组,如果所说的控制点组是收敛的;以及所说的右子系组或左子系组被用作下一循环的控制点组,如果它是收敛的。
2.用于在计算机系统中绘制三次曲线的设备,计算机系统包括一个存储器件,一个显示器件和一个诸如键盘或鼠标的输入器件,该设备包括一个用于存储可视窗的左上和右下位置坐标的可视窗坐标寄存器,所说的左上和右下位置坐标被用来作为确定曲线是否可视的参考;一个用于存储输入控制点的输入控制点寄存器;一个用于存储输出控制点的输出控制点寄存器;一个LR运算器,借助于简单的包括加法和移位处理以三个运算层并行地产生所说的输入控制点的左子系组和右子系组;一个EP运算器,通过利用包括加法和移位的简单处理以三个运算层并行地产生所说的控制点的相邻和母系组;一个路径选择器,包括一个收敛性分析器,一个可视性测定器件,和一个终端计数器,所说的路径选择器从由所说的LR和EP运算器所产生的所说的左和右子系组和所说的相邻和母系组中确定反馈的输入和输出;以及一个段产生器,采用贝齐尔曲线的第一和最末的控制点按照所说的显示器的驱动程序产生在所期望的线中的点数据。
全文摘要
用于绘制三次曲线的方法和设备被揭示。通过利用两个独立的运算单元在一个判优程序的帮助下并行地处理三次贝齐尔曲线的四个控制点,三次贝齐尔曲线被快速地分解为小段分段,以在监视器显示该三次曲线或输出给打印机。
文档编号G06T11/20GK1237739SQ9812241
公开日1999年12月8日 申请日期1998年11月18日 优先权日1998年6月1日
发明者彭鸿文, 吴晓青 申请人:松下电器产业株式会社
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1