|
发布时间: 2018-04-16 |
GDC 2017会议专栏 |
|
|
收稿日期: 2017-07-10; 修回日期: 2017-09-22
基金项目: 国家自然科学基金项目(61402201,61772013,61272300,11371174)
第一作者简介:
沈莞蔷(1981-), 女, 副教授, 硕士生导师, 2010年于浙江大学获应用数学专业理学博士学位, 主要研究方向为CAGD & CG。E-mail:wq_shen@163.com.
中图法分类号: TP391.41
文献标识码: A
文章编号: 1006-8961(2018)04-0595-10
|
摘要
目的
整体曲线包括传统有限闭区间(比如[0,
关键词
几何造型; C-Bézier曲线; 控制顶点; 参数区间; 线性插值
Abstract
Objective
The parameter of a conventional C-Bézier curve is often limited in a closed interval. In this study, we focus on an integral one made up of the traditional inner segment in a finite closed interval (such as[0,
Key words
geometric modeling; C-Bézier curve; control vertices; parameter interval; linear interpolation
0 引言
在计算机辅助设计中,构造整体曲线曲面时常会产生冗余数据。如图 1所示,使用有理二次Bézier模型[1]画圆时,至少需要6个控制顶点。而在数学中,不共线的3点就可以确定一个圆,可见该造型中存在冗余数据。
事实上,在构造整条曲线过程中,不同段的控制顶点之间可能存在某种联系。因此,如果知道某段的控制顶点和一些形状参数,就能得到整条曲线而且可以减少冗余数据,所以要研究整体曲线。
整体曲线包括两个部分:传统有限闭区间上的曲线段(在本文称之为内部段)及该区间外的延拓段。例如Bézier曲线,区间[0, 1]上是内部段,区间之外是延拓段。要想减少整体曲线的冗余数据,就需要知道这两部分间的关系,并要判断它们是否在同一曲线上。据此,提出以下问题:
1) 给定曲线的内部段,当其参数区间在
2) 判定两条相邻C-Bézier曲线是否在同一整体曲线上。
对上述问题,在文献[1]中,采用开花算法将任意区间[
1) C-Bézier曲线具有良好的几何性质,它可以扩展为整体曲线[2-3]。
2) C-Bézier曲线可以塑造一些不含有理形式的经典曲线,其参数区间不会由于分母的零点导致无法延伸。
C-Bézier曲线始于
对于C-Bézier曲线,本文将会对上述两个问题进行解答。若其参数区间在(0,
1 整体C-Bézier曲线
整体C-Bézier曲线定义类似于内部曲线的定义[21],唯一的区别是参数不再局限于区间[0,
$ \mathit{\boldsymbol{P}}\left( t \right) = \sum\limits_{i = 0}^{n + 2} {C_i^{n + 2}\left( {t;\alpha } \right){\mathit{\boldsymbol{P}}_i}} $ | (1) |
式中,
$ \left\{ \begin{array}{l} C_0^{n + 2}\left( {t;\alpha } \right) = 1 - \frac{{\int_0^t {C_0^{n + 1}\left( {s;\alpha } \right){\rm{d}}s} }}{{\delta _{0,\alpha }^{n + 1}}}\\ C_i^{n + 2}\left( {t;\alpha } \right) = \frac{{\int_0^t {C_{i - 1}^{n + 1}\left( {s;\alpha } \right){\rm{d}}s} }}{{\delta _{i - 1,\alpha }^{n + 1}}} - \\ \frac{{\int_0^t {C_i^{n + 1}\left( {s;\alpha } \right){\rm{d}}s} }}{{\delta _{i,\alpha }^{n + 1}}};\;\;\;\;1 \le i \le n + 1\\ C_{n + 2}^{n + 2}\left( {t;\alpha } \right) = \frac{{\int_0^t {C_{i + 1}^{n + 1}\left( {s;\alpha } \right){\rm{d}}s} }}{{\delta _{n + 1,\alpha }^{n + 1}}} \end{array} \right. $ | (2) |
$ \delta _{i,\alpha }^{n + 1} = \int_0^\alpha {C_i^{n + 1}\left( {s;\alpha } \right){\rm{d}}s} ;\;\;\;\;0 \le i \le n + 2 $ | (3) |
上述基函数可由以下线性p-Bézier基递推得到[22],即
$ \left\{ \begin{array}{l} C_0^2\left( {t;\alpha } \right) = \frac{{{{\sin }^2}\left( {\frac{{\alpha - t}}{2}} \right)}}{{{{\sin }^2}\left( {\frac{\alpha }{2}} \right)}}\\ C_1^2\left( {t;\alpha } \right) = \frac{{2cos\left( {\frac{\alpha }{2}} \right)\sin \left( {\frac{{\alpha - t}}{2}} \right)\sin \left( {\frac{t}{2}} \right)}}{{{{\sin }^2}\left( {\frac{\alpha }{2}} \right)}}\\ C_2^2\left( {t;\alpha } \right) = \frac{{{{\sin }^2}\left( {\frac{t}{2}} \right)}}{{{{\sin }^2}\left( {\frac{\alpha }{2}} \right)}} \end{array} \right. $ | (4) |
图 2为(-∞, ∞)上的整体C-Bézier曲线造型的一个例子。图 2(a)为基函数,虚线框内是传统的C-Bézier基;图 2(b)是相应的曲线,黑色较细的是整体曲线,蓝色较粗的是内部曲线,其控制顶点由蓝色圆圈表示。从图 2中可以看出,整体曲线是内部曲线的自然延拓。
2 沿整体C-Bézier曲线的运动
给定一[0,
为了保持传统C-Bézier内部段正性,区间长度
$ \begin{array}{*{20}{c}} {{\mathit{\boldsymbol{V}}_n}\left( t \right) = \sum\limits_{i = 0}^{n + 2} {C_i^{n + 2}\left( {t - \lambda ;\mu } \right){\mathit{\boldsymbol{V}}_i}} }\\ {t \in \left[ {\lambda ,\lambda + \mu } \right]} \end{array} $ | (5) |
对于控制顶点
2.1 直接形式
首先考虑基函数的递归公式。
引理 1 假设
$ C_i^{n + 2}\left( {t;\alpha } \right) = \sum\limits_{j = 0}^{n + 2} {d_{j,i}^{n + 2}C_j^{n + 2}\left( {t - \lambda ;\mu } \right)} $ | (6) |
$ d_{j,i}^{n + 2} = d_{j - 1,i}^{n + 2} + \frac{{\delta _{j - 1,\mu }^{n + 1}}}{{\delta _{i - 1,\alpha }^{n + 1}}}d_{j - 1,i - 1}^{n + 1} - \frac{{\delta _{j - 1,\mu }^{n + 1}}}{{\delta _{i,\alpha }^{n + 1}}}d_{j - 1,i}^{n + 1} $ | (7) |
$ \begin{array}{l} d_{0,i}^{n + 2} = \sum\limits_{j = 0}^{n + 1} {\frac{{d_{j,i - 1}^{n + 1}}}{{\delta _{i - 1,\alpha }^{n + 1}}}\int_{ - \lambda }^0 {C_j^{n + 1}\left( {t;\mu } \right){\rm{d}}t} } - \\ \;\;\;\;\;\;\;\sum\limits_{j = 0}^{n + 1} {\frac{{d_{j,i}^{n + 1}}}{{\delta _{i,\alpha }^{n + 1}}}\int_{ - \lambda }^0 {C_j^{n + 1}\left( {t;\mu } \right){\rm{d}}t} } \end{array} $ | (8) |
且
$ \left( {\mathit{\boldsymbol{d}}_{j,i}^2} \right) = \left( {\begin{array}{*{20}{c}} {C_0^2\left( {\lambda ;\alpha } \right)}&{C_1^2\left( {\lambda ;\alpha } \right)}&{C_2^2\left( {\lambda ;\alpha } \right)}\\ {{f_1}}&{1 - {f_1} - {f_2}}&{{f_2}}\\ {C_0^2\left( {\beta ;\alpha } \right)}&{C_1^2\left( {\beta ;\alpha } \right)}&{C_2^2\left( {\beta ;\alpha } \right)} \end{array}} \right) $ | (9) |
$ {f_1} = \frac{{\sin \left( {\frac{{\alpha - \lambda }}{2}} \right)\sin \left( {\frac{{\alpha - \beta }}{2}} \right)}}{{{{\sin }^2}\left( {\frac{\alpha }{2}} \right)\cos \left( {\frac{\mu }{2}} \right)}} $ |
$ {f_2} = \frac{{\sin \left( {\frac{\beta }{2}} \right)\sin \left( {\frac{\lambda }{2}} \right)}}{{{{\sin }^2}\left( {\frac{\alpha }{2}} \right)\cos \left( {\frac{\mu }{2}} \right)}} $ |
$ \beta = \lambda + \mu $ |
证明。数学归纳法。当
$ \begin{array}{*{20}{c}} {C_i^{n + 2}\left( {t;\alpha } \right) = \frac{{\int_0^t {C_{i - 1}^{n + 1}\left( {s;\alpha } \right){\rm{d}}s} }}{{\delta _{i - 1,\alpha }^{n + 1}}} - \frac{{\int_0^t {C_i^{n + 1}\left( {s;\alpha } \right){\rm{d}}s} }}{{\delta _{i,\alpha }^{n + 1}}} = }\\ {\int_0^t {\sum\limits_{j = 0}^{n + 1} {\frac{{d_{j,i - 1}^{n + 1}}}{{\delta _{i - 1,\alpha }^{n + 1}}}C_j^{n + 1}\left( {s - \lambda ;\mu } \right){\rm{d}}s} } - }\\ {\int_0^t {\sum\limits_{j = 0}^{n + 1} {\frac{{d_{j,i}^{n + 1}}}{{\delta _{i,\alpha }^{n + 1}}}C_j^{n + 1}\left( {s - \lambda ;\mu } \right){\rm{d}}s} } = }\\ {\sum\limits_{j = 0}^{n + 1} {\frac{{d_{j,i - 1}^{n + 1}}}{{\delta _{i - 1,\alpha }^{n + 1}}}\int_{ - \lambda }^0 {C_j^{n + 1}\left( {t;\mu } \right){\rm{d}}t} } - }\\ {\sum\limits_{j = 0}^{n + 1} {\frac{{d_{j,i}^{n + 1}}}{{\delta _{i,\alpha }^{n + 1}}}\int_{ - \lambda }^0 {C_j^{n + 1}\left( {t;\mu } \right){\rm{d}}t} } + }\\ {\sum\limits_{j = 0}^{n + 1} {\frac{{d_{j,i - 1}^{n + 1}}}{{\delta _{i - 1,\alpha }^{n + 1}}}\int_\lambda ^t {C_j^{n + 1}\left( {s - \lambda ;\mu } \right){\rm{d}}s} } - }\\ {\sum\limits_{j = 0}^{n + 1} {\frac{{d_{j,i}^{n + 1}}}{{\delta _{i,\alpha }^{n + 1}}}\int_\lambda ^t {C_j^{n + 1}\left( {s - \lambda ;\mu } \right){\rm{d}}s} } } \end{array} $ |
由式(2) (7) (8),有
$ \begin{array}{*{20}{c}} {C_i^{n + 2}\left( {t;\alpha } \right) = d_{0,i}^{n + 2} + \sum\limits_{j = 1}^{n + 2} {\frac{{d_{j,i}^{n + 2}}}{{\delta _{j - 1,\mu }^{n + 1}}}\int_\lambda ^t {C_{j - 1}^{n + 1}\left( {s - \lambda ;\mu } \right){\rm{d}}s} } - }\\ {\sum\limits_{j = 0}^{n + 1} {\frac{{d_{j,i}^{n + 2}}}{{\delta _{j,\mu }^{n + 1}}}\int_\lambda ^t {C_j^{n + 1}\left( {s - \lambda ;\mu } \right){\rm{d}}s} } = }\\ {d_{0,i}^{n + 2}\left( {1 - \frac{{\int_\lambda ^t {C_0^{n + 1}\left( {s - \lambda ;\mu } \right){\rm{d}}s} }}{{\delta _{0,\mu }^{n + 1}}}} \right) + }\\ {\sum\limits_{j = 1}^{n + 1} {d_{j,i}^{n + 2}\frac{{\int_\lambda ^t {C_{j - 1}^{n + 1}\left( {s - \lambda ;\mu } \right){\rm{d}}s} }}{{\delta _{j - 1,\mu }^{n + 1}}}} - }\\ {\sum\limits_{j = 1}^{n + 1} {d_{j,i}^{n + 2}\frac{{\int_\lambda ^t {C_j^{n + 1}\left( {s - \lambda ;\mu } \right){\rm{d}}s} }}{{\delta _{j,\mu }^{n + 1}}}} + }\\ {d_{n + 2,i}^{n + 2}\frac{{\int_\lambda ^t {C_{n + 1}^{n + 1}\left( {s - \lambda ;\mu } \right){\rm{d}}s} }}{{\delta _{n + 1,\mu }^{n + 1}}} = }\\ {d_{0,i}^{n + 2}C_0^{n + 2}\left( {t - \lambda ;\mu } \right) + \sum\limits_{j = 1}^{n + 1} {d_{j,i}^{n + 2}C_j^{n + 2}\left( {t - \lambda ;\mu } \right)} + }\\ {d_{n + 2,i}^{n + 2}C_{n + 2}^{n + 2}\left( {t - \lambda ;\mu } \right) = \sum\limits_{j = 1}^{n + 2} {d_{j,i}^{n + 2}C_j^{n + 2}\left( {t - \lambda ;\mu } \right)} } \end{array} $ |
对于
在式(8)中
$ d_{0,i}^{n + 2} = C_i^{n + 2}\left( {\lambda ;\alpha } \right) $ | (10) |
定理 1 以直接形式沿整体C-Bézier曲线的运动。假设
$ {\mathit{\boldsymbol{V}}_i} = \sum\limits_{j = 0}^{n + 2} {d_{i,j}^{n + 2}{\mathit{\boldsymbol{P}}_j}} $ | (11) |
式中,
2.2 细分形式
在2.1节中,若
假设
$ \mathit{\boldsymbol{P}}\left( t \right) = \left\{ \begin{array}{l} \mathit{\boldsymbol{Q}}\left( t \right)\;\;\;\;t \in \left[ {0,\lambda } \right]\\ \mathit{\boldsymbol{R}}\left( t \right)\;\;\;\;t \in \left[ {\lambda ,\alpha } \right] \end{array} \right. $ | (12) |
$ \mathit{\boldsymbol{Q}}\left( t \right) = \sum\limits_{i = 0}^{n + 2} {C_i^{n + 2}\left( {t;\lambda } \right){\mathit{\boldsymbol{Q}}_i}} $ | (13) |
$ \mathit{\boldsymbol{R}}\left( t \right) = \sum\limits_{i = 0}^{n + 2} {C_i^{n + 2}\left( {t - \lambda ;\alpha - \lambda } \right){\mathit{\boldsymbol{R}}_i}} $ | (14) |
与定理2.1类似,有如下细分定理成立。
定理 2 C-Bézier细分。令
$ {\mathit{\boldsymbol{Q}}_i} = \sum\limits_{j = 0}^i {a_{i,j}^{n + 2}{\mathit{\boldsymbol{P}}_j}} $ | (15) |
且
$ {\mathit{\boldsymbol{R}}_i} = \sum\limits_{j = i}^{n + 2} {b_{i,j}^{n + 2}{\mathit{\boldsymbol{P}}_j}} $ | (16) |
式中,系数
$ a_{00}^{n + 2} = 1,\;\;\;\forall n $ | (17) |
$ a_{j,i}^{n + 2} = a_{j + 1,i}^{n + 2} + \frac{{\delta _{j - 1,\lambda }^{n + 1}}}{{\delta _{i - 1,\alpha }^{n + 1}}}a_{j - 1,i - 1}^{n + 1} - \frac{{\delta _{j - 1,\lambda }^{n + 1}}}{{\delta _{i,\alpha }^{n + 1}}}a_{j - 1,i}^{n + 1} $ | (18) |
且矩阵(
$ \left( {\begin{array}{*{20}{c}} 1&0&0\\ {\frac{{\sin \left( {\frac{{\alpha - \lambda }}{2}} \right)}}{{\sin \left( {\frac{\alpha }{2}} \right)\cos \left( {\frac{\lambda }{2}} \right)}}}&{\frac{{\cos \left( {\frac{\alpha }{2}} \right)\sin \left( {\frac{\lambda }{2}} \right)}}{{\sin \left( {\frac{\alpha }{2}} \right)\cos \left( {\frac{\lambda }{2}} \right)}}}&0\\ {C_0^2\left( {\lambda ;\alpha } \right)}&{C_1^2\left( {\lambda ;\alpha } \right)}&{C_2^2\left( {\lambda ;\alpha } \right)} \end{array}} \right) $ | (19) |
$ b_{n + 2,n + 2}^{n + 2} = 1,\forall n $ | (20) |
$ b_{j,i}^{n + 2} = b_{j + 1,i}^{n + 2} + \frac{{\delta _{j,\alpha - \lambda }^{n + 1}}}{{\delta _{i,\alpha }^{n + 1}}}b_{j,i}^{n + 1} - \frac{{\delta _{j,\alpha - \lambda }^{n + 1}}}{{\delta _{i - 1,\alpha }^{n + 1}}}b_{j,i - 1}^{n + 1} $ | (21) |
且
$ \begin{array}{*{20}{c}} {\mathit{\boldsymbol{b}}_{j,i}^2 = }\\ {\left( {\begin{array}{*{20}{c}} {C_0^2\left( {\lambda ;\alpha } \right)}&{C_1^2\left( {\lambda ;\alpha } \right)}&{C_2^2\left( {\lambda ;\alpha } \right)}\\ 0&{\frac{{\cos \left( {\frac{\alpha }{2}} \right)\sin \left( {\frac{{\alpha - \lambda }}{2}} \right)}}{{\sin \left( {\frac{\alpha }{2}} \right)\cos \left( {\frac{{\alpha - \lambda }}{2}} \right)}}}&{\frac{{\sin \left( {\frac{\lambda }{2}} \right)}}{{\sin \left( {\frac{\alpha }{2}} \right)\cos \left( {\frac{{\alpha - \lambda }}{2}} \right)}}}\\ 0&0&1 \end{array}} \right)} \end{array} $ | (22) |
细分方案对任意
根据定理2,可以给出以下细分形式的运动。
定理 3 以细分形式沿整体C-Bézier曲线的运动。如果
1) 由式(20)—式(22)及式(16)可得
$ \left\{ {{\mathit{\boldsymbol{R}}_i},i = 0,1, \cdots ,n + 2} \right\} $ |
2) 由式(17)—式(19)可得
$ {\mathit{\boldsymbol{V}}_i} = \sum\limits_{j = i}^{n + 2} {a_{i,j}^{n + 2}{\mathit{\boldsymbol{R}}_j}} $ | (23) |
式中,
2.3 线性插值形式
线性插值形式表示为
$ \begin{array}{*{20}{c}} {\mathit{\boldsymbol{P}}_i^{\left[ k \right]} = \left( {1 - r_{i,k}^{n + 2}} \right)\mathit{\boldsymbol{P}}_{i - 1}^{\left[ {k - 1} \right]} + }\\ {r_{i,k}^{n + 2}\mathit{\boldsymbol{P}}_i^{\left[ {k - 1} \right]};i = k,k + 1, \cdots ,n + 2} \end{array} $ | (24) |
式中,
$ \mathit{\boldsymbol{P}}_i^{\left[ 0 \right]} = {\mathit{\boldsymbol{P}}_i} $ | (25) |
先考虑特殊的细分情况下线性插值形式。
令{
$ \bar \delta _{i,k}^{n + 2}: = \int_0^\alpha {C_{i,k}^{n + 2}\left( t \right){\rm{d}}t} $ |
这是一个关于
首先,给出
引理 2 如果
$ \bar \delta _{i,k}^{n + 2} = \left\{ \begin{array}{l} \delta _{i,\lambda }^{n + 2}\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;i = k - 1\\ r_{i,k + 1}^{n + 2}\bar \delta _{i,k + 1}^{n + 2} + \\ \left( {1 - r_{i + 1,k + 1}^{n + 2}} \right)\bar \delta _{i + 1,k + 1}^{n + 2}\;\;\;\;k \le i \le n + 2\\ \delta _{n + 3 - k,\alpha - \lambda }^{n + 2}\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;i = n + 3 \end{array} \right. $ | (26) |
式中,
注意到式(26)中,当
$ \bar \delta _{i,0}^{n + 2} = \delta _{i,\alpha }^{n + 2} $ | (27) |
下面考虑
引理 3 当
$ r_{i,k}^{n + 2} = \left\{ \begin{array}{l} 1\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;i = k - 1\\ \frac{{\bar \delta _{i - 1,k}^{n + 1}}}{{\bar \delta _{i - 1,k - 1}^{n + 1}}}r_{i - 1,k}^{n + 1}\;\;\;\;\;k \le i \le n + 2\\ 0\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;i = n + 3 \end{array} \right. $ | (28) |
引理可被作为文献[24]所述的
$ \begin{array}{l} \left( {\mathit{\boldsymbol{r}}_{i,k}^2} \right) = \\ \left( {\begin{array}{*{20}{c}} 1&{}&{}\\ {\frac{{\cos \left( {\frac{\alpha }{2}} \right)\sin \left( {\frac{\lambda }{2}} \right)}}{{\sin \left( {\frac{\alpha }{2}} \right)\cos \left( {\frac{\lambda }{2}} \right)}}}&1&{}\\ {\frac{{\sin \left( {\frac{\lambda }{2}} \right)}}{{\sin \left( {\frac{\alpha }{2}} \right)\cos \left( {\frac{{\alpha - \lambda }}{2}} \right)}}}&{\frac{{\sin \left( {\frac{\lambda }{2}} \right)\cos \left( {\frac{{\alpha - \lambda }}{2}} \right)}}{{\sin \left( {\frac{\alpha }{2}} \right)}}}&1\\ 0&0&0 \end{array}} \right) \end{array} $ | (29) |
式中,
定理 4 线性插值形式的细分。令
$ {\mathit{\boldsymbol{Q}}_i} = \mathit{\boldsymbol{P}}_i^{\left[ i \right]} $ | (30) |
且
$ {\mathit{\boldsymbol{R}}_i} = \mathit{\boldsymbol{P}}_n^{\left[ {n - i} \right]} $ | (31) |
式中,
再考虑一般情况下沿整体C-Bézier曲线运动的线性插值形式。由于引理2和引理3用一些
像Bézier曲线一样,定理4也给出
$ \mathit{\boldsymbol{P}}\left( \lambda \right) = \mathit{\boldsymbol{P}}_{n + 2}^{\left[ {n + 2} \right]} $ | (32) |
且
$ {{\mathit{\boldsymbol{P'}}}_n}\left( \lambda \right)\left\| {\mathit{\boldsymbol{P}}_{n + 1}^{\left[ {n + 1} \right]}\mathit{\boldsymbol{P}}_{n + 2}^{\left[ {n + 1} \right]}} \right. $ | (33) |
式中,
定理 5 以线性插值形式沿整体C-Bézier曲线的运动。如果
$ {\mathit{\boldsymbol{V}}_i} = \mathit{\boldsymbol{\bar P}}_i^{\left[ i \right]} $ | (34) |
其计算步骤为:
1) 由式(24)—式(29)可得
$ \left\{ \begin{array}{l} \mathit{\boldsymbol{P}}_i^{\left[ k \right]};k = 0,1, \cdots ,n + 2;\\ i = k,k + 1, \cdots ,n + 2 \end{array} \right\} $ |
2) 令
$ \mathit{\boldsymbol{\bar P}}_i^{\left[ 0 \right]} = \mathit{\boldsymbol{P}}_n^{\left[ {n - i} \right]} $ | (35) |
由式(24), 式(26)—式(29)可得
$ \left\{ \begin{array}{l} \mathit{\boldsymbol{\bar P}}_i^{\left[ k \right]};k = 1,2, \cdots ,n + 2;\\ i = k,k + 1, \cdots ,n + 2 \end{array} \right\} $ |
式中,
图 4给出了一个沿整体曲线运动的示例,其中
2.4 两条给定内部C-Bézier曲线是否在同一整体曲线上的判断
现在考虑两个给定的内部C-Bézier曲线是否在同一整体曲线上的情况。
假设两条C-Bézier曲线分别是
$ \mathit{\boldsymbol{P}}\left( t \right) = \sum\limits_{i = 0}^{n + 2} {C_i^{n + 2}\left( {t;\alpha } \right){\mathit{\boldsymbol{P}}_i};t \in \left[ {0,\alpha } \right]} $ | (36) |
和
$ \mathit{\boldsymbol{Q}}\left( t \right) = \sum\limits_{i = 0}^{n + 2} {C_i^{n + 2}\left( {t;\beta } \right){\mathit{\boldsymbol{Q}}_i}} $ | (37) |
$ \begin{array}{*{20}{c}} {t \in \left[ {0,\beta } \right];}\\ {\alpha ,\beta \in \left( {0,{\rm{ \mathsf{ π} }}} \right)}\\ {{\mathit{\boldsymbol{P}}_{n + 2}} = {\mathit{\boldsymbol{Q}}_0}} \end{array} $ | (38) |
由于
$ \left\| {\mathit{\boldsymbol{P}}\left( t \right)} \right\| \le \sum\limits_{i = 0}^{n + 2} {C_i^{n + 2}\left( {t;\alpha } \right)\left\| {{\mathit{\boldsymbol{P}}_i}} \right\|} \le \max \left\| {{\mathit{\boldsymbol{P}}_i}} \right\| $ |
这表示C-Bézier曲线的误差会被其控制顶点误差所限制。因此,以下算法可用来判断
判断两条相邻C-Bézier曲线是否在同一整体曲线上。设
1) 根据
2) for
{比较每个
判断的准确性由误差项
3 应用
1) 沿整体C-Bézier曲线的运动可用于放缩给定C-Bézier曲线的参数区间, 缩放后的控制顶点可由直接形式、细分形式或线性插值形式计算得到,如图 5所示。当参数区间长度增加或减小时,黑色的整体曲线保持不变。
2) 考虑整体曲线,可用于减少冗余数据。图 6给出一个5圈的螺线。如果将整体螺线表示为4阶内部C-Bézier曲线形式,因为后者的参数区间长度小于
3) 如果两个相邻的内部C-Bézier曲线在同一整体曲线上,那么在存储时可减少冗余数据。如图 7所示,给定两个6阶内部C-Bézier曲线
4 结论
本文主要讨论的是C-Bézier曲线。它将[0,
但由C-Bézier基递归积分定义式(2)可知,该运动过程很慢。所以,今后可以考虑加速运动的方法。此外,对其他类型的拟C-Bézier曲线[25],由于几何形状和参数区间有所不同,类似的结论还需进一步探讨,这可作为未来研究的另一方向。
参考文献
-
[1] Farin G E. Curves and Surfaces for CAGD:A Practical Guide[M]. 5th ed. San Francisco: Morgan Kaufmann Publishers, 2001.
-
[2] Hoffmann M, Li Y J, Wang G. Paths of C-Bézier and C-B-spline curves[J]. Computer Aided Geometric Design, 2006, 23(5): 463–475. [DOI:10.1016/j.cagd.2006.03.001]
-
[3] Shen W Q, Wang G Z. Geometric shapes of C-Bézier curves[J]. Computer-Aided Design, 2015, 58: 242–247. [DOI:10.1016/j.cad.2014.08.007]
-
[4] Zhang J W. C-curves:an extension of cubic curves[J]. Computer Aided Geometric Design, 1996, 13(3): 199–217. [DOI:10.1016/0167-8396(95)00022-4]
-
[5] Chen Q Y, Wang G Z. A class of Bézier-like curves[J]. Computer Aided Geometric Design, 2003, 20(1): 29–39. [DOI:10.1016/S0167-8396(03)00003-7]
-
[6] Wang G Z, Li Y J. Optimal properties of the uniform algebraic trigonometric B-splines[J]. Computer Aided Geometric Design, 2006, 23(2): 226–238. [DOI:10.1016/j.cagd.2005.09.002]
-
[7] Carnicer J M, Peña J M. Totally positive bases for shape preserving curve design and optimality of B-splines[J]. Computer Aided Geometric Design, 1994, 11(6): 635–654. [DOI:10.1016/0167-8396(94)90056-6]
-
[8] Mainar E, Peña J M. Quadratic-cycloidal curves[J]. Advances in Computational Mathematics, 2004, 20(1-3): 161–175. [DOI:10.1023/A:1025813919473]
-
[9] Mainar E, Peña J M. A general class of Bernstein-like bases[J]. Computers & Mathematics with Applications, 2007, 53(11): 1686–1703.
-
[10] Li Y J, Wang G Z. Two kinds of B-basis of the algebraic hyperbolic space[J]. Journal of Zhejiang University-Science A, 2005, 6(7): 750–759. [DOI:10.1631/jzus.2005.A0750]
-
[11] Xu G, Wang G Z. AHT Bézier curves and NUAHT B-spline curves[J]. Journal of Computer Science and Technology, 2007, 22(4): 597–607. [DOI:10.1007/s11390-007-9073-z]
-
[12] Fang M, Wang G Z. ω-Bézier[C]//Proceedings of the 10th IEEE International Conference on Computer-Aided Design and Computer Graphics. Beijing: IEEE, 2007: 38-42. [DOI:10.1109/CADCG.2007.4407852]
-
[13] Cai H H, Wang G J. Construction of cubic C-Bézier spiral and its application in highway design[J]. Journal of Zhejiang University:Engineering Science, 2010, 44(1): 68–74. [蔡华辉, 王国瑾. 三次C-Bézier螺线构造及其在道路设计中的应用[J]. 浙江大学学报:工学版, 2010, 44(1): 68–74. ] [DOI:10.3785/j.issn.1008-973X.2010.01.013]
-
[14] Zhao Y L. Study and application of C-Bézier curves and surfaces of degree n[D]. Nanjing: Nanjing University of Aeronautics and Astronautics, 2005. [赵玉林. 高阶C-Bézier曲线曲面性质研究及其应用[D]. 南京: 南京航空航天大学, 2005.]
-
[15] Chen Q Y, Wang G Z. Representation of arc with C-Bézier curve[J]. Journal of Software, 2002, 13(11): 2155–2161. [陈秦玉, 汪国昭. 圆弧的C-Bézier曲线表示[J]. 软件学报, 2002, 13(11): 2155–2161. ]
-
[16] Long Y T. Continuity conditions for quartic C-Bézier curves with shape parameter[J]. Journal of Shaanxi University of Science & Technology, 2012, 30(5): 113–117. [龙艳婷. 四次C-Bézier曲线的拼接技术研究[J]. 陕西科技大学学报, 2012, 30(5): 113–117. ] [DOI:10.3969/j.issn.1000-5811.2012.05.028]
-
[17] Chen J L. Biarc approximation of C-Bézier curve[J]. Journal of Hangzhou Dianzi University, 2010, 30(1): 78–80. [陈建兰. C-Bézier曲线的双圆弧逼近[J]. 杭州电子科技大学学报, 2010, 30(1): 78–80. ] [DOI:10.3969/j.issn.1001-9146.2010.01.020]
-
[18] Cai H H, Wang G J. Approximating logarithmic spiral segments by polynomial and C-Bézier[J]. Journal of Zhejiang University:Engineering Science, 2009, 43(6): 999–1004. [蔡华辉, 王国瑾. 对数螺线段的多项式逼近与C-Bézier逼近[J]. 浙江大学学报:工学版, 2009, 43(6): 999–1004. ] [DOI:10.3785/j.issn.1008-973X.2009]
-
[19] Liu H Y. Joining C-Bézier curves and surfaces with fairing algorithm[J]. Journal of Hebei Polytechnic University:Natural Science Edition, 2008, 30(1): 75–79. [刘华勇. C-Bézier曲线曲面的光顺拼接算法[J]. 河北理工大学学报:自然科学版, 2008, 30(1): 75–79. ] [DOI:10.3969/j.issn.1674-0262.2008.01.018]
-
[20] Fan J H, Zhang J W, Wu Y J. Shape modification of C-Bézier curves[J]. Journal of Software, 2002, 13(11): 2194–2200. [樊建华, 张纪文, 邬义杰. C-Bézier曲线的形状修改[J]. 软件学报, 2002, 13(11): 2194–2200. ] [DOI:10.13328/j.cnki.jos.2002.11.021]
-
[21] Chen Q Y, Yang X N, Wang G Z. Properties and applications Of degree 4 C-curve[J]. Applied Mathematics A Journal of Chinese Universities, 2003, 18(1): 45–50. [陈秦玉, 杨勋年, 汪国昭. 四次C-曲线的性质及其应用[J]. 高校应用数学学报A辑, 2003, 18(1): 45–50. ] [DOI:10.3969/j.issn.1000-4424.2003.01.008]
-
[22] Sánchez-Reyes J. Harmonic rational Bézier curves, p-Bézier curves and trigonometric polynomials[J]. Computer Aided Geometric Design, 1998, 15(9): 909–923. [DOI:10.1016/S0167-8396(98)00031-4]
-
[23] He L N, Wang G Z. Subdivision for C-curves of degree five[J]. Journal of Zhejiang University:Science Edition, 2004, 31(2): 125–129. [何玲娜, 汪国昭. 五次C-曲线的细分[J]. 浙江大学学报:理学版, 2004, 31(2): 125–129. ] [DOI:10.3321/j.issn:1008-9497.2004.02.002]
-
[24] Wang G Z, Chen Q Y, Zhou M H. NUAT B-spline curves[J]. Computer Aided Geometric Design, 2004, 21(2): 193–205. [DOI:10.1016/j.cagd.2003.10.002]
-
[25] Zhang J W, Krause F L, Zhang H Y. Unifying C-curves and H-curves by extending the calculation to complex numbers[J]. Computer Aided Geometric Design, 2005, 22(9): 865–883. [DOI:10.1016/j.cagd.2005.04.009]