刘建贞,李亚娟
(杭州电子科技大学理学院,浙江 杭州 310018)
计算机辅助几何设计与图形学中,有理Bézier曲线等自由曲线曲面的导矢界计算问题一直都是非常重要的研究方向。许多学者对有理Bézier曲线、曲面的一阶导矢界进行了研究。Floater[1]首先用控制顶点和权因子来表示有理Bézier曲线的一阶导矢界;文献[2]利用不等式给出了有理Bézier曲线的一阶导矢界;文献[3]估计了特殊点处的导矢界;文献[4]给出一个较大的误差界。Hermann[5]采用Möbius变换,讨论了有理二次Bézier曲线的一阶导矢界问题;文献[6-12]利用不同的不等式对有理Bézier曲线的一阶导矢界进行了估计,并不断加以改进;文献[13]对有理二次Bézier曲线的导矢界模长进行了优化。除此之外,还有部分文献估计了曲面导矢界。如文献[14]将有理Bézier曲线的一阶导矢界估值推广到曲面,文献[15]对NURBS曲面的偏导矢界进行了估计。但是,由于有理Bézier曲线的高阶导矢计算公式异常复杂,其界的估计比较困难,相关文献涉及较少。文献[16]给出了有理Bézier曲线的二阶,三阶导矢界,文献[17]提供了一种n次有理Bézier曲线任意阶导矢界的上确界的理论计算方法,但没有给出确定的界的表示。在文献[2]方法基础上,本文提出一种n次有理Bézier曲线高阶导矢界计算方法。
一条n次有理Bézier曲线R(t)定义如下:
(1)
一条n次有理Bézier曲线(1)的一阶导矢记为:
(2)
文献[2]给出如下引理,并以此计算n次有理Bézier曲线的一阶导矢界。
引理1[2]如果ai≥0,bi≥0,i=0,1,2,…,n,那么
(3)
(4)
(5)
再由
(6)
R′(t)的分子中的第1个乘积项表示为:
(7)
同样,由
(8)
(9)
得到R′(t)的分子中的第2个乘积项表达式:
(10)
(11)
结合式(6),R′(t)的分母表示为:
(12)
把式(7),式(10)和式(12)代入式(2),由引理1,再结合(1-t)wi+twi+1≥min{wi,wi+1},得到导矢界公式(4)。导矢界公式(4)的核心是5个函数P′(t),w(t),w′(t),P(t)和w(t),分别由式(5),式(6),式(8),式(9)和式(11)表示。首先,把P′(t)w(t),w′(t)P(t)和w(t)w(t)分解为简单函数的乘积,结果如表1所示。
表1 一阶导矢的函数分解
然后,把4个简单函数P′(t),w′(t),P(t),w(t)按照同一行函数采用相同系数表达式的方法归类综合,结果如表2所示。
表2 一阶导矢的归类综合
最后,根据表1和表2的结果,计算有理Bézier曲线的一阶导矢界。
由式(2)计算可得:
(13)
和一阶导矢界的计算方法一样。首先,把w3(t)和R″(t)的分子中每一个乘积项分解成简单函数的乘积,结果如表3所示。
表3 二阶导矢的函数分解
分解时须按照简单函数的导矢阶数递减排列。记
Δ(wiPi)=wi+1Pi+1-wiPi,Δwi=wi+1-wi,
Δ2(wiPi)=Δ(wi+1Pi+1-wiPi)=wi+2Pi+2-2wi+1Pi+1+wiPi,
Δ2wi=Δ(wi+1-wi)=wi+2-2wi+1+wi。
然后,把简单函数按照同一行函数采用相同系数表达式的方法归类综合,结果如表4所示。
表4 二阶导矢的归类综合
把表3与表4中的公式代入式(13),得到:
这里,
αi,j,k(t)=(1-t)βi,j,k+tγi,j,k,
βi,j,k=n(n-1)wj[Δ2(wiPi)-Δ2(wiPj)]+2nΔwj[Δ(wiPk)-Δ(wi+1Pi+1)],
γi,j,k=n(n-1)wj+1[Δ2(wiPi)-Δ2(wiPj+1)]+2n2Δwj[Δ(wi+1Pk)-Δ(wi+1Pi+1)]。
根据1.1节和1.2节给出的有理Bézier曲线一阶、二阶导矢界的计算方法,本文归纳出有理Bézier曲线的h阶导矢界(h=1,2,…)的计算方法。先对导矢公式中的各项函数进行分解,再对导矢公式的各项函数进行归类综合,其计算方法如下。
(2)把导矢R(h)(t)的分母w(h+1)(t)和组成分子的所有乘积项按照P(t)导矢阶数从高到低的顺序排列在第1张函数分解表中的第1行,每个乘积项占据一列,如表1和表3。
(3)从第1个乘积项元素开始,每个乘积项都拆成h+1个简单函数的乘积,按照导矢阶数从高到低的顺序依次排列在该乘积项的同一列,每个简单函数占据一行,共占据第2行到第h+2行。分解时,既要考虑导矢阶数从高到低的排列顺序,又要考虑彼此之间的联系。比如不同乘积项分解的结果中,使得处在同一行的简单函数尽可能相同。分解的次序不同,后面导矢界计算的结果也会不同。
(5)由第2张归纳综合表和引理1,并考虑到每个乘积项展开式中相同的系数,即可给出R(h)(t)的界。
使用1.3节给出的次有理Bézier曲线的高阶导矢界的计算方法来计算有理Bézier曲线的三阶导矢界。
(14)
首先,把函数w4(t)和R‴(t)的分子中的每一个乘积项分解成简单函数的乘积,结果如表5所示。
表5 三阶导矢的函数分解
记Δ3(wiPi)=Δ[Δ2(wi+1Pi+1)-Δ2(wiPi)]=wi+3Pi+3-3wi+2Pi+2+3wi+1Pi+1-wiPi,
Δ3wi=Δ(Δ2wi+1-Δ2wi)=wi+3-3wi+2+3wi+1-wi。
然后,把简单函数按同一行函数采用相同系数表达式的方法归类综合,结果如表6所示。
表6 三阶导矢的归类综合
把表5与表6中公式代入式(14),得到:
这里,
ξi,j,k,g(t)=(1-t)2λi,j,k,g+(1-t)μi,j,k,g+t2νi,j,k,g,
ηj,k(t)=[(1-t)wj+twj+1][(1-t)wk+twk+1],
λi,j,k,g=n(n-1)(n-2)wjwk[Δ3(wiPi)-Δ3(wiPg)]+6n3ΔwjΔwk[Δ(wiPi)-Δ(wiPg)]-
3n2(n-1)wk[ΔwjΔ2(wiPi)+2ΔwjΔ2(wiPg)+Δ2wiΔ(wjPj)],
μi,j,k,g=n(n-1)(n-2)(wjwk+1+wj+1wk)[Δ2(wiPi)-Δ3(wiPg)]-
3n2(n-1)Δ(wjPj)(wk+1Δ2wi+wkΔ2wi+1)+
3n2(n-1)Δwj[2Δ2(wjwk+1Pg)+2Δ2(wi+1wkPg)-wkΔ2(wi+1Pi+1)-wk+1Δ2(wiPi)]+
12n3ΔwjΔwk[Δ(wi+1Pi+1)-Δ(wi+1Pg)],
νi,j,k,g=n(n-1)(n-2)wj+1wk+1[Δ3(wiPi)-Δ3(wiPg)]+
6n3ΔwjΔwk[Δ(wi+2Pi+2)-Δ(wi+2Pg)]+
3n2(n-1)wk+1[2ΔwjΔ2(wi+1Pg)+ΔwjΔ2(wi+1Pi+1)-Δ2wi+1Δ(wjPj)]
本文在不等式计算的基础上,采用乘积分解之后再归类综合的方法,提出了一种n次有理Bézier曲线高阶导矢界的框架计算法,并对文献[2]中导矢界计算方法做了进一步推广。但是,随着导矢阶数的增高,本文算法得出的高阶导矢界表达式变得比较复杂,如何简化导矢界的表达式是下一步研究的重点。