8.2Bezier曲线拼接及升降阶
- 格式:pdf
- 大小:79.79 KB
- 文档页数:14
(4条消息)曲线曲面基本理论(二)一、Bezier曲线的生成生成一条Bezier 曲线实际上就是要求出曲线上的点。
下面介绍两种曲线生成的方法:1、根据定义直接生成 Bezier 曲线绘制Bezier曲线主要有以下步骤:2、Bezier 曲线的递推 (de Casteljau)算法根据 Bezier 曲线的定义确定的参数方程绘制 Bezier 曲线,因其计算量过大,不太适合在工程上使用。
de Casteljau 提出的递推算法则要简单得多。
Bezier 曲线上的任一个点(t),都是其它相邻线段的同等比例( t ) 点处的连线,再取同等比例( t ) 的点再连线,一直取到最后那条线段的同等比例 ( t )处,该点就是Beizer曲线上的点( t ) 。
以二次 Bezier 曲线为例,求曲线上t=1/3的点:当t 从0变到1时,它表示了由三顶点P0、P1、P2三点定义的一条二次Bezier曲线。
二次Bezier曲线P02可以定义为分别由前两个顶点(P0,P1)和后两个顶点(P1,P2)决定的一次Bezier曲线的线性组合。
由(n+1)个控制点Pi(i=0,1,...,n)定义的n次Bezier曲线P0n可被定义为分别由前、后n个控制点定义的两条(n-1)次Bezier曲线P0n-1与P1n-1的线性组合:这便是著名的de Casteljau算法。
用这一递推公式,在给定参数下,求Bezier曲线上一点P(t)非常有效。
de Casteljau算法稳定可靠,直观简便,可以编出十分简捷的程序,是计算Bezier曲线的基本算法和标准算法。
这一算法可用简单的几何作图来实现。
3、Bezier曲线的拼接几何设计中,一条Bezier曲线往往难以描述复杂的曲线形状。
这是由于增加特征多边形的顶点数,会引起Bezier曲线次数的提高,而高次多项式又会带来计算上的困难。
采用分段设计,然后将各段曲线相互连接起来,并在接合处保持一定的连续条件。
三次Bezier曲线的生成与拼接李红林【摘要】本文利用VC++编程环境,生成两段三次Bezier曲线,并对曲线进行连续性条件讨论,且实现了曲线拼接.【期刊名称】《科技视界》【年(卷),期】2016(000)021【总页数】2页(P126,187)【关键词】三次;Bezier;连续性;曲线拼接【作者】李红林【作者单位】曲靖师范学院信息工程学院,云南曲靖655011【正文语种】中文Bezier曲线是由法国人Bezier于20世纪70年代初为解决汽车外型设计而提出的一种新的参数表示方法[1]。
Bezier方法是曲线、曲面造型中的一个里程碑,它以逼近原理为基础,应用Bezier方法,可逼近数学曲线、曲面或设计师勾画的草图,起到辅助设计的作用[2-3]。
由于实际应用中的线和面形状复杂,用单一曲线、曲面无法表示,所以有必要对曲线、曲面进行拼接。
1.1 Bezier曲线的定义其中,t∈[0,1],Pi是特征多边形第i个顶点的坐标(xi,yi)。
依次用线段连接Pi(i=0,1,…,n)中相邻两个向量的终点,组成的n边折线多边形称为Bezier多边形或特征多边形[4]。
Bi,n(t)是伯恩斯坦多项式。
1.2 三次Bezier曲线当n=3时,即为三次Bezier曲线。
三次Bezier曲线用矩阵表示如下:在VC++6.0环境下,新建一个基于MFC的单文档工程。
在工程View.cpp中添加Bezier曲线生成函数,当n=3时,生成任意两条三次Bezier曲线,如图1所示。
样条曲线是由各个多项式曲线段连接而成,为了保证各个曲线段在连接点处是光滑的,需要满足各种连续性条件[5]。
连续性有参数连续性和几何连续性。
若两条相邻参数曲线段在连接点处具有n阶连续导矢,即n阶连续可微,则将这类连续性称为n阶参数连续性条件,记为Cn。
若只要求两条相邻参数曲线段在连接点处的n阶导矢成比例,而不要求必须相等,则将这类连续性称为n阶几何连续性,记为Gn。
第四章 Bezier曲线曲面Ⅱ第三节 Bezier曲线的升阶与降阶2009-08-29 21、升阶的含义与目的:含义:Bezier曲线的升阶就是保持Bezier曲线的 形状与定向不变的条件下增加控制顶点的个数。
目的:增加对曲线形状控制的灵活性,同时在Bezier 曲线拼接或构造张量积Bezier曲面时也要经常涉及 到Bezier曲线的升阶,需要强调的是Bezier曲线的 升阶并没有影响曲线实际的次数。
2009-08-29 32009-08-2942、升阶公式, 0Bezier ()()nj j n j n p t b B t = = å r r设 次 曲线为: 升阶后变 为:1 (1),1 0()()n j j n j p t b B t + + = = å r r 1 (1),,1()() n n j j n j j n j j b B t b B t + + == = åå r r 令: 即:1 (1)1 1 0(1)(1) n n j jn j j j n jj n j n j j b C t t b C t t + -+- + == -=- åå r r2009-08-295[(1)](1)n j jn jj n j t t b C t t - = +-- å r 对上式左边乘以[t +(1-t )],得:11 0[(1)(1)]nj jn j j n jj n j b C t t t t +-+- = =-+- å r 1 (1)11 1 0(1)(1) n j j n j j n jj n j b C t t t t + +-+- + = -- å r 与 比较项前的系数,可得: (1)111 j j j j n j n j nb C b C b C - +- =+ r r r2009-08-296注:1)从上式可以看出升阶后的控制顶点是升阶前控 制顶点的凸组合,新控制多边形一定在旧控制多 边形的凸包内。
Bézier曲线到AH-Bézier曲线的升阶算法沈莞蔷;汪国昭【期刊名称】《计算机工程与应用》【年(卷),期】2014(000)017【摘要】The existing results about curve degree elevation are mainly limited to the same type of curves. In order to push the limit and consider degree elevation between different types of curves, this paper focuses on degree elevation algo-rithm from Bézier curve, defined on algebraic polynomial space, to AH-Bézier curve, defined on algebraic and hyperbolic polynomial space. The study begins with basis functions. Firstly, the transformation matrix from AH-Bézier basis to Bern-stein basis is built by using the block matrix idea and the same property of Bézier and AH-Bézier that the order of basis is reduced for derivative. Secondly, the degree elevation formula of control points is obtained. Lastly, the degree elevation algorithm is given. Results show that any Bézier curve of degree n can be turned into an AH-Bézier curve of order n+3(i.e. degree n+2)by using this algorithm. The algorithm gives an accurate transformation from Bézier to AH-Bézier curve model.%关于曲线升阶,已有的结论往往限于同类曲线之间。
Bezier曲线曲面的拼接Bezier曲线曲面是一种常见的计算机图形学中的曲线曲面构造方法。
其原理是通过数学公式来描述一个点集合的形状。
在实际应用中,我们通常需要根据实际需求来构造或者拼接Bezier曲线曲面。
本文将着重介绍Bezier曲线曲面的拼接方法。
一、Bezier曲线曲面的构造Bezier曲线曲面的构造方法很简单,只需要给定点的坐标和曲线方程即可。
其中,点的坐标用于描述曲线上的控制点位置,而曲线方程则用于描述控制点间的线段的形状。
对于一条Bezier曲线,它的方程可以表示为:$$P(u)=\\sum_{i=0}^{n}B_i^n(u)P_i$$其中,$n$代表控制点的数量,$P_i$表示第$i$个控制点的坐标,$B_i^n(u)$是权重多项式,它可以通过如下公式计算:$$B_i^n(u)={n\\choose i}u^i(1-u)^{n-i}$$这个公式包含两个部分。
第一部分是二项式系数$C_n^i={n\\choose i}$,它描述的是从$n$个点中选取$i$个点的组合数。
第二部分是$u^i(1-u)^{n-i}$,它描述的是每个控制点在曲线上占据的位置和弧长。
通过这两部分的组合,我们可以得到一个平滑连续的Bezier曲线。
对于一条Bezier曲面,它的方程可以表示为:$$P(u,v)=\\sum_{i=0}^{n}\\sum_{j=0}^{m}B_i^n(u)B_j^m(v)P_{ij}$$其中,$n$和$m$分别代表控制点的数量,$P_{ij}$表示第$i$行,第$j$列的控制点的坐标。
这个方程就是通过控制点的二维数组来描述空间中的三维曲面的。
二、Bezier曲线曲面的拼接当需要在一个三维场景中绘制复杂的曲面形状时,往往需要将不同的曲面拼接起来。
Bezier曲线曲面的拼接可以通过各种方法实现。
以下介绍两种常用的拼接方法。
1. 曲面连接法曲面连接法需要将拼接曲面共享一个相邻控制点,从而使得两个曲面连接处的网格点重合。
基于遗传算法的Bézier曲线降多阶逼近【摘要】为了减少曲线表示的存储量,实现高低阶曲线数据传递的有效性,应用Bézier曲线的基本性质,基于遗传算法,提出了Bézier曲线降阶算法,实现了Bézier曲线的一次降多阶,降阶后的曲线直接以显式给出,操作简单,直观性强。
【关键词】Bézier曲线;降阶;遗传算法1.引言参数曲线曲面在许多造型系统中都有重要的应用,不同的造型系统中多项式基的次数是不同的,如果在系统间进行数据传递[1],就需要将参数曲线曲面的阶数统一起来。
由于高阶曲线可以精确的表示低阶曲线,一般来讲,低阶曲线却不能精确表示高阶曲线,近年来,参数曲线曲面的降阶问题引起了国内外许多学者的兴趣。
同时,降阶曲线可以减少数据的存储量,提高了造型系统的效率。
此外,降阶处理也应用在曲线的光顺处理过程中[2]。
Bézier曲线由于本身具有的良好的性质,被广泛应用于计算机辅助设计和制造,国内外许多学者研究了Bézier曲线的降阶问题[3-6]。
Hoschek[3]首先对原曲线进行离散,然后利用原曲线的几何信息,通过多段低阶曲线来插值逼近原曲线;Worsey[4],Lachance[5]及Eck[6]利用Chebyshev多项式理论,对降阶进行了研究;胡事民[7]提出了B网扰动和约束优化的方法等。
这些方法只进行了一次降阶,如需多次降阶,则要循环运用算法,这样一方面是计算繁琐耗时大,另一方面是误差有可能会很大。
2002年陈国栋和王国瑾[8]给出了带端点插值条件的Bézier 曲线一次降多阶逼近方法;郑建民和汪国昭[9]着眼于几何逼近技术,对原曲线控制顶点作最小扰动来得到约束降多阶曲线。
这些研究或者计算繁琐,或者没有很好的误差估计,逼近精度未必最佳,或者没有降阶后曲线的显式表示。
本文在上述研究的基础上,应用遗传算法的性质特点,与Bézier曲线降阶相结合,运用matlab工具箱实现了多次降阶。
bezier曲面的应用-Bezier曲线曲面的拼接Bezier曲线曲面的拼接摘要曲线曲面的表示是计算机图形学的重要研究内容之1,Bézier曲线曲面又是计算机图形学中常用的曲线曲面,它采用分段和分片参数多项式的形式。
Bézier曲线曲面之所以被广泛使用是因为它有许多特别适合计算机图形学和计算机辅助几何设计的特点。
本文依次详细论述了Bézier曲线的定义和性质、Bernstein基函数性质、介绍了双3次Bézier曲面、递推算法、构图法及其应用、Bézier曲线曲面的拼接。
通过对Bézier曲线曲面的论述,阐述了Bézier曲线曲面的原理及其特性,研究Bézier曲线拼接的几何连续性及参数连续性,总结出G ,G 及C ,C 连续的几何意义。
最后研究了Bézier曲面拼接的几何连续性。
关键词: C 连续;G 连续;Bernstein基函数;参数连续性;几何连续性Abstract The curve curved surface expression is one of computer graphics important research contents, Bézier the curv e curved surface also is in the computer graphics the commonly used curve curved surface, it uses the partition and the lamination parameter multinomial form. Bézier the curve curved surface the reason that by the widespread use is because it has many suits the computer graphics and the computer assistance geometry design characteristic specially. This article in detail elaborated Bézier the curve definition and the nature, the Bernstein primary function nature in turn, introduced a pair of three Bézier cu rved surface, the recursion algorithm, the composition law and the application, Bézier curve curved surface splicing. Through to Bézier the curve curved surface elaboration, elaborated Bézier the curve curved surface principle and the characteristic, the r esearch Bézier curve splicing geometrycontinuity and the parameter continuity,Summarizes G,G and C,C continual geometry significance. Finally has studied Bézier thecurved surface splicing geometry continuity.Key words: C continuity ; G continuity; Bernstein basic function ; parametric continuity ; geometric continuity。
Bezier曲线的绘制实验报告一、程序实现环境1操作系统:Windows XP 、Windows72.编程语言:C++3.程序实现环境:Visual C++ 6.0二、算法思想三、使用说明程序界面如下图:用户可以在编辑框中输入4个控制点的坐标,也可以通过在绘图区内直接通过鼠标的单击指定4个控制点的位置,输入4个控制端点后,单击“画Bezier曲线”按钮即可绘制Bezier曲线。
四、实验结果五、程序代码(关键代码)void CMFC_BezierCurve2Dlg::OnLButtonDown(UINT nFlags, CPoint point) {if(pointOrd==1) //原点(490,270){m_p1_x = point.x - 490;m_p1_y = 270 - point.y;}if(pointOrd==2){CDC *pDC=GetDC();pDC->MoveTo(490+m_p1_x, 270-m_p1_y);pDC->LineTo(point.x, point.y);m_p2_x = point.x - 490;m_p2_y = 270 - point.y;}if(pointOrd==3){CDC *pDC=GetDC();pDC->MoveTo(490+m_p2_x, 270-m_p2_y);pDC->LineTo(point.x, point.y);m_p3_x = point.x - 490;m_p3_y = 270 - point.y;}if(pointOrd==4){CDC *pDC=GetDC();pDC->MoveTo(490+m_p3_x, 270-m_p3_y);pDC->LineTo(point.x, point.y);m_p4_x = point.x - 490;m_p4_y = 270 - point.y;}pointOrd++;UpdateData(FALSE);CDialog::OnLButtonDown(nFlags, point);}voidGetCnk (int n, int *c){inti,k;for(k=0; k<=n; k++){c[k]=1;for(i=n; i>=k+1; i--) c[k]=c[k]*i;for(i=n-k; i>=2; i--) c[k]=c[k]/i;}}void CMFC_BezierCurve2Dlg::GetPointPos(intControlN, double t, int *c) {int k, n=ControlN-1;double Bernstein;Pt.x=0.0; Pt.y=0.0;for(k=0; k<ControlN; k++){Bernstein=c[k]*pow(t,k)*pow(1-t,n-k);Pt.x += ControlP[0][k].x * Bernstein;Pt.y += ControlP[0][k].y * Bernstein;}}void CMFC_BezierCurve2Dlg::OnButtonDrawBeziercurve(){UpdateData();pointOrd=1;CDC *pDC=GetDC();ControlP[0][0].x=m_p1_x;ControlP[0][0].y=m_p1_y;ControlP[0][1].x=m_p2_x;ControlP[0][1].y=m_p2_y;ControlP[0][2].x=m_p3_x;ControlP[0][2].y=m_p3_y;ControlP[0][3].x=m_p4_x;ControlP[0][3].y=m_p4_y;pDC->MoveTo(490+m_p1_x, 270-m_p1_y);pDC->LineTo(490+m_p2_x, 270-m_p2_y);pDC->LineTo(490+m_p3_x, 270-m_p3_y);pDC->LineTo(490+m_p4_x, 270-m_p4_y);int *C, i;intControlN=4, m=500;C=new int[ControlN];GetCnk (ControlN-1, C);for(i=0; i<=m; i++){GetPointPos(ControlN, (double)i/(double)m, C);pDC->SetPixel(490+Pt.x, 270-Pt.y, 255);}}两段Bezier曲线的拼接实验报告一、程序实现环境1操作系统:Windows XP 、Windows72.编程语言:C++3.程序实现环境:Visual C++ 6.0二、算法思想三、使用说明程序界面如下图:用户可以在编辑框中输入4个控制点的坐标,也可以通过在绘图区内直接通过鼠标的单击指定4个控制点的位置,输入4个控制端点后,单击“画Bezier曲线”按钮即可绘制Bezier曲线。