(计算机图形学)自由曲线曲面
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
n n i 0 i 0
2.权性: Bi ,n (t ) Cni t i (1 t ) ni t (1 t )n 1
•凸包性
由Bernstein基函数的非负性和权性可知,在闭区间〔0,1〕 n Bi ,n (t ) 0 ,而且 Bi,n (t ) 1 内,
Examples: These two curves do not fit together at all. These two curves fit together, but not smoothly.
These two curves fit together smoothly.
连续性条件
i 0
3
,
,
(1 t) 3 P0 3t (1 t ) 2 P1 3t 2 (1 - t) P2 t 3 P3
。
( t 3 3t 2 - 3t 1)P0 (3t 3 6t 2 3t ) P1 (3t 3 3t 2 ) P2 t 3 P3
几种典型的Bezier曲线
7.2.1 Bezier曲线的定义
给定n+1个控制点Pi(i=0,1,2……n),称为n次 Bezier曲线。
t∈〔0,1〕 式中,Pi(i=0,1,2……n)是控制多边形的n+1 个控制点,控制多边形是连接n条边构成的多边形。 Bi,n(t) 是Bernstein基函数,其表达式为:
隐函数方程表示为
y1 y0 f ( x, y) y y0 ( x x0 ) 0 x1 x0 参数方程表示为
工业上常使用 优点:易推导至高维; 改变t值得到一条轨迹,直观; 不同参数方程可得到同一曲线
x x0 ( x1 x0 )t ,t∈〔0,1〕 y y 0 ( y1 y 0 )t
B2,3 (t ) 3t 3 3t 2 3t 2 (1 t )
B3,3 (t ) t 3
在区间〔0,1〕范围内,每 个基函数均不为零,说明不能 使用控制多边形对曲线的形状 进行局部调整,如果要改变某 一控制点位置,整条曲线都将 受到影响。
B0,3(t)
B3,3(t)
B1,3(t)
i 0
说明Bezier曲线位于控制多边形构成的凸包之内,而且 永远不会超出凸包的范围。
P1 P0
P2 P0
2.端点性质
1, i 0 Bi ,n (0) 0, i 0
1, i n Bi ,n (1) 0, i n
这里用到:00=1,0!=1
曲线端点必经过控制多边形的端点 当t=0时,p(0)=P0; 当t=1时,p(1)=Pn。
B2,3
,
,
。
t3
Leabharlann Baidu
t2
1 3 3 3 6 3 t 1 3 3 0 0 0 1
t∈〔0,1〕
三次Bezier曲线的Bernstein基函数:
B0,3 (t ) t 3 3t 2 3t 1 (1 t ) 3
B1,3 (t ) 3t 3 6t 2 3t 3t (1 t ) 2
i 0
p (t ) Pi Bi ,n (t )
n
n! i i Bi ,n (t ) t i (1 t ) n i Cn t (1 t ) n i i!(n i )!
在实际应用中,最常用的是三次Bezier曲线,其 次是二次Bezier曲线,高次Bezier曲线一般很少使用。
7.1.2曲线构造方法
插值法
给定一组有序的数据点Pi,i=0, 1, …, n,构造一条 曲线顺序通过这些数据点,称为对这些数据点进行 插值,所构造的曲线称为插值曲线。
逼近法
构造一条曲线使之在某种意义下最接近给定的数 据点(但未必通过这些点) ,称为对这些数据点进行 逼近,所构造的曲线称为逼近曲线。
一次Bezier曲线是一段直线。
2.二次Bezier曲线 当n=2时,Bezier曲线的控制多边形有三个控制 点P0、P1和P2,Bezier曲线是二次多项式。
p(t ) Pi Bi , 2 (t ) P0 B0, 2 P 1 B1, 2 P2 B2,2
i 0
2
2 (1 t)2 P0 2t (1 t ) P t P2 1
4.对称性(即从左到右,从右到左是对称的)
ni Bni,n (1 t ) Cn (1 t )ni (1 (1 t ))n(ni )
参数连续性,用C 表示 C0连续(0阶参数连续) —— 指曲线相连,前一段曲线的终点
阶数
t=1与后一段曲线的起点t=0相同,即 相邻两段曲线结合点处有相同坐标。
C1连续(一阶参数连续) ——代表两个相邻曲线段的方程在相交
点处有相同的一阶导数(切线)。 (一阶导数反映了曲线对参数 t 的变 化速度)
列点。
曲线构造方法
判断哪些是插值、哪些是逼近
插值法
线性插值:假设给定函数f(x)在两个不同点 x1和x2的值,用线形函数 近似 代替f(x),称为的线性插值函数。
插值法
抛物线插值(二次插值):
已知在三个互异点x1,x2,x3的函数值为y1,y2,y3,要求构 造函数 ¢ (x)=ax2+bx+c,使得¢(x)在xi处与f(x)在xi处的 值相等。
B2,3(t)
O
t
4个基函数
7.2.2 Bernstein基函数及曲线的性质
Bi ,n (t ) n! i i t i (1 t ) ni C n t (1 t ) ni i!(n i)!
t∈〔0,1〕(i=0,1,2……n) ,t∈〔0,1〕
1.非负性: Bi,n (t ) 0
插值和逼近统 称为拟合。
在前面的插值法中,如果给定的点(叫做型值点)
太多,很难构造插值函数,因此可以适当的放弃一些 型值点。 型值点:是用于确定曲线和曲面的位置与形状, 且相应曲线或曲面一定经过的点。 控制点:是用于确定曲线和曲面的位置与形状, 但相应曲线或曲面不一定经过。
插值点:是在型值点或控制点值之间插入的一系
• 它的应用极为广泛,在动画领域上举足轻重,在造型工业 设计上更是独占鳌头。汽车车身、飞机机翼和轮船船体等 的曲线和曲面均属于这一类。
7.1 基本概念
7.1.1 曲线与曲面的表示形式
已知直线段的起点坐标P0(x0,y0)和终点坐标P1 (x1,y1),直线段的显式方程表示为
x x0 y y0 x1 x 0 y1 y0
In 1959, while working at Citroen, Paul De Casteljau developed an algorithm for evaluating calculations on a certain family of curves, which would later be formalized and popularized by engineer Pierre Bezier, and the curves called De Casteljau curve or Bezier curve.
Power幂,Factorial,阶乘
1.一次Bezier曲线
当n=1时,Bezier曲线的控制多边形有二个控制 点P0和P1,Bezier曲线是一次多项式。
p (t ) Pi Bi ,1 (t ) P0 B0,1 (t ) P1 B1,1 (t )
i 0
1
(1 t) P0 t P 1
C2连续(二阶参数连续) ——两个曲线段在交点处有相同的一阶
和二阶导数。 (二阶导数反映了曲 线对参数t的变化的加速度)
连续性条件
几何连续性,用 G 表示,其只要求参数成比例。 G0连续(0阶几何连续) ——与C0连续相同。 G1连续(一阶几何连续) —— 指一阶导数在两个相邻段的交点处成比例但不一 定相等。 G2连续(二阶几何连续) —— 指两个曲线段在相交处其一阶和二阶导数均成比 例。G2 连续性下,两个曲线段在交点处的曲率相等。
void CTestView::DrawBezier()//绘制Bezier曲线 { CDC *pDC=GetDC(); CPen NewPen,*pOldPen; NewPen.CreatePen(PS_SOLID,1,RGB(0,0,255));//曲线颜色 pOldPen=pDC->SelectObject(&NewPen); pDC->MoveTo(P[0]); for(double t=0.0;t<=1.0;t+=0.01) { double x=0,y=0; for(int i=0;i<=n;i++) { x+=P[i].x*C(n,i)*pow(t,i)*pow(1-t,n-i); y+=P[i].y*C(n,i)*pow(t,i)*pow(1-t,n-i); } pDC->LineTo(Round(x),Round(y)); } pDC->SelectObject(pOldPen); NewPen.DeleteObject(); ReleaseDC(pDC); }
二次Bezier曲线是一段抛物线。
3.三次Bezier曲线 当n=3时,Bezier曲线的控制多边形有四个控制 点P0、P1、P2和P3,Bezier曲线是三次多项式。
,
p (t ) Pi Bi ,3 (t ) P0 B0,3 P1 B1,3 P2 B 2,3 P3 B3,3
光顺:
曲线拐点不能太多。对平面曲线来讲,相对光顺的 条件是: 具有二阶几何连续性 不存在多余的拐点和奇异点 曲率变化较小
连续性条件
在拟合过程中,不同控制点和型值点控制的曲线段
不一样,我们可能用多组曲线段去组合一条最终的 拟合曲线,多条曲线首尾相连形成一条曲线,为了 让连接处具有合乎要求的连续性,因此需要定义连 续性条件
在实际的曲线造型应用中,我们要适当地选择曲线段间的连 续性,使造型物体既能保证其光滑性的要求,也能保证其美观性 的要求,一般只使用C1,C2 和G1,G2连续。
阶数
7.2 Bezier曲线
De Casteljau
Bezier
Bezier曲线由法国雪铁龙(Citroen)汽车公司的de
Casteljau于1959年发明,后来又由法国雷诺(Renault) 汽车公司的工程师Bezier于1962年独立发明。
第七章
本章内容
7.1 7.2 7.3 7.4 7.5 7.6
基本概念 Bezier曲线 Bezier曲面 B样条曲线 B样条曲面 本章总结
曲线曲面概述
图形学中一个很复杂的又非常重要的研究领域。
曲线曲面才是造型的真正统治者,它占据了我们生 活和幻想中的造型的绝大部分。 但曲线曲面又是如此地难以理解,让人们在一段很 长很长的时间内无法征服它。 自由曲线和曲面 规则的曲线和曲面,比如:圆和球,可以用固定的 函数表达式来构造,但是他的造型能力有限,我们 这儿不讨论。 自由曲线和曲面是指那些形状比较复杂、不能用初 等解析函数直接表示出来的曲线和曲面。
三次Bezier曲线是段自由曲线。
3.三次Bezier曲线 写成矩阵形式为
P0 P B3,3 1 P2 P3 1 P0 P 0 1 0 P2 0 P3
,
p (t ) B0,3
B1,3
double CTestView::C(const int &n, const int &i)//Bernstein第一项 { return double(Fac(n))/(Fac(i)*Fac(n-i)); } long CTestView::Fac(int n)//阶乘函数 { int f; if(0==n||1==n) f=1; else f=n*Fac(n-1); return f; }
2.权性: Bi ,n (t ) Cni t i (1 t ) ni t (1 t )n 1
•凸包性
由Bernstein基函数的非负性和权性可知,在闭区间〔0,1〕 n Bi ,n (t ) 0 ,而且 Bi,n (t ) 1 内,
Examples: These two curves do not fit together at all. These two curves fit together, but not smoothly.
These two curves fit together smoothly.
连续性条件
i 0
3
,
,
(1 t) 3 P0 3t (1 t ) 2 P1 3t 2 (1 - t) P2 t 3 P3
。
( t 3 3t 2 - 3t 1)P0 (3t 3 6t 2 3t ) P1 (3t 3 3t 2 ) P2 t 3 P3
几种典型的Bezier曲线
7.2.1 Bezier曲线的定义
给定n+1个控制点Pi(i=0,1,2……n),称为n次 Bezier曲线。
t∈〔0,1〕 式中,Pi(i=0,1,2……n)是控制多边形的n+1 个控制点,控制多边形是连接n条边构成的多边形。 Bi,n(t) 是Bernstein基函数,其表达式为:
隐函数方程表示为
y1 y0 f ( x, y) y y0 ( x x0 ) 0 x1 x0 参数方程表示为
工业上常使用 优点:易推导至高维; 改变t值得到一条轨迹,直观; 不同参数方程可得到同一曲线
x x0 ( x1 x0 )t ,t∈〔0,1〕 y y 0 ( y1 y 0 )t
B2,3 (t ) 3t 3 3t 2 3t 2 (1 t )
B3,3 (t ) t 3
在区间〔0,1〕范围内,每 个基函数均不为零,说明不能 使用控制多边形对曲线的形状 进行局部调整,如果要改变某 一控制点位置,整条曲线都将 受到影响。
B0,3(t)
B3,3(t)
B1,3(t)
i 0
说明Bezier曲线位于控制多边形构成的凸包之内,而且 永远不会超出凸包的范围。
P1 P0
P2 P0
2.端点性质
1, i 0 Bi ,n (0) 0, i 0
1, i n Bi ,n (1) 0, i n
这里用到:00=1,0!=1
曲线端点必经过控制多边形的端点 当t=0时,p(0)=P0; 当t=1时,p(1)=Pn。
B2,3
,
,
。
t3
Leabharlann Baidu
t2
1 3 3 3 6 3 t 1 3 3 0 0 0 1
t∈〔0,1〕
三次Bezier曲线的Bernstein基函数:
B0,3 (t ) t 3 3t 2 3t 1 (1 t ) 3
B1,3 (t ) 3t 3 6t 2 3t 3t (1 t ) 2
i 0
p (t ) Pi Bi ,n (t )
n
n! i i Bi ,n (t ) t i (1 t ) n i Cn t (1 t ) n i i!(n i )!
在实际应用中,最常用的是三次Bezier曲线,其 次是二次Bezier曲线,高次Bezier曲线一般很少使用。
7.1.2曲线构造方法
插值法
给定一组有序的数据点Pi,i=0, 1, …, n,构造一条 曲线顺序通过这些数据点,称为对这些数据点进行 插值,所构造的曲线称为插值曲线。
逼近法
构造一条曲线使之在某种意义下最接近给定的数 据点(但未必通过这些点) ,称为对这些数据点进行 逼近,所构造的曲线称为逼近曲线。
一次Bezier曲线是一段直线。
2.二次Bezier曲线 当n=2时,Bezier曲线的控制多边形有三个控制 点P0、P1和P2,Bezier曲线是二次多项式。
p(t ) Pi Bi , 2 (t ) P0 B0, 2 P 1 B1, 2 P2 B2,2
i 0
2
2 (1 t)2 P0 2t (1 t ) P t P2 1
4.对称性(即从左到右,从右到左是对称的)
ni Bni,n (1 t ) Cn (1 t )ni (1 (1 t ))n(ni )
参数连续性,用C 表示 C0连续(0阶参数连续) —— 指曲线相连,前一段曲线的终点
阶数
t=1与后一段曲线的起点t=0相同,即 相邻两段曲线结合点处有相同坐标。
C1连续(一阶参数连续) ——代表两个相邻曲线段的方程在相交
点处有相同的一阶导数(切线)。 (一阶导数反映了曲线对参数 t 的变 化速度)
列点。
曲线构造方法
判断哪些是插值、哪些是逼近
插值法
线性插值:假设给定函数f(x)在两个不同点 x1和x2的值,用线形函数 近似 代替f(x),称为的线性插值函数。
插值法
抛物线插值(二次插值):
已知在三个互异点x1,x2,x3的函数值为y1,y2,y3,要求构 造函数 ¢ (x)=ax2+bx+c,使得¢(x)在xi处与f(x)在xi处的 值相等。
B2,3(t)
O
t
4个基函数
7.2.2 Bernstein基函数及曲线的性质
Bi ,n (t ) n! i i t i (1 t ) ni C n t (1 t ) ni i!(n i)!
t∈〔0,1〕(i=0,1,2……n) ,t∈〔0,1〕
1.非负性: Bi,n (t ) 0
插值和逼近统 称为拟合。
在前面的插值法中,如果给定的点(叫做型值点)
太多,很难构造插值函数,因此可以适当的放弃一些 型值点。 型值点:是用于确定曲线和曲面的位置与形状, 且相应曲线或曲面一定经过的点。 控制点:是用于确定曲线和曲面的位置与形状, 但相应曲线或曲面不一定经过。
插值点:是在型值点或控制点值之间插入的一系
• 它的应用极为广泛,在动画领域上举足轻重,在造型工业 设计上更是独占鳌头。汽车车身、飞机机翼和轮船船体等 的曲线和曲面均属于这一类。
7.1 基本概念
7.1.1 曲线与曲面的表示形式
已知直线段的起点坐标P0(x0,y0)和终点坐标P1 (x1,y1),直线段的显式方程表示为
x x0 y y0 x1 x 0 y1 y0
In 1959, while working at Citroen, Paul De Casteljau developed an algorithm for evaluating calculations on a certain family of curves, which would later be formalized and popularized by engineer Pierre Bezier, and the curves called De Casteljau curve or Bezier curve.
Power幂,Factorial,阶乘
1.一次Bezier曲线
当n=1时,Bezier曲线的控制多边形有二个控制 点P0和P1,Bezier曲线是一次多项式。
p (t ) Pi Bi ,1 (t ) P0 B0,1 (t ) P1 B1,1 (t )
i 0
1
(1 t) P0 t P 1
C2连续(二阶参数连续) ——两个曲线段在交点处有相同的一阶
和二阶导数。 (二阶导数反映了曲 线对参数t的变化的加速度)
连续性条件
几何连续性,用 G 表示,其只要求参数成比例。 G0连续(0阶几何连续) ——与C0连续相同。 G1连续(一阶几何连续) —— 指一阶导数在两个相邻段的交点处成比例但不一 定相等。 G2连续(二阶几何连续) —— 指两个曲线段在相交处其一阶和二阶导数均成比 例。G2 连续性下,两个曲线段在交点处的曲率相等。
void CTestView::DrawBezier()//绘制Bezier曲线 { CDC *pDC=GetDC(); CPen NewPen,*pOldPen; NewPen.CreatePen(PS_SOLID,1,RGB(0,0,255));//曲线颜色 pOldPen=pDC->SelectObject(&NewPen); pDC->MoveTo(P[0]); for(double t=0.0;t<=1.0;t+=0.01) { double x=0,y=0; for(int i=0;i<=n;i++) { x+=P[i].x*C(n,i)*pow(t,i)*pow(1-t,n-i); y+=P[i].y*C(n,i)*pow(t,i)*pow(1-t,n-i); } pDC->LineTo(Round(x),Round(y)); } pDC->SelectObject(pOldPen); NewPen.DeleteObject(); ReleaseDC(pDC); }
二次Bezier曲线是一段抛物线。
3.三次Bezier曲线 当n=3时,Bezier曲线的控制多边形有四个控制 点P0、P1、P2和P3,Bezier曲线是三次多项式。
,
p (t ) Pi Bi ,3 (t ) P0 B0,3 P1 B1,3 P2 B 2,3 P3 B3,3
光顺:
曲线拐点不能太多。对平面曲线来讲,相对光顺的 条件是: 具有二阶几何连续性 不存在多余的拐点和奇异点 曲率变化较小
连续性条件
在拟合过程中,不同控制点和型值点控制的曲线段
不一样,我们可能用多组曲线段去组合一条最终的 拟合曲线,多条曲线首尾相连形成一条曲线,为了 让连接处具有合乎要求的连续性,因此需要定义连 续性条件
在实际的曲线造型应用中,我们要适当地选择曲线段间的连 续性,使造型物体既能保证其光滑性的要求,也能保证其美观性 的要求,一般只使用C1,C2 和G1,G2连续。
阶数
7.2 Bezier曲线
De Casteljau
Bezier
Bezier曲线由法国雪铁龙(Citroen)汽车公司的de
Casteljau于1959年发明,后来又由法国雷诺(Renault) 汽车公司的工程师Bezier于1962年独立发明。
第七章
本章内容
7.1 7.2 7.3 7.4 7.5 7.6
基本概念 Bezier曲线 Bezier曲面 B样条曲线 B样条曲面 本章总结
曲线曲面概述
图形学中一个很复杂的又非常重要的研究领域。
曲线曲面才是造型的真正统治者,它占据了我们生 活和幻想中的造型的绝大部分。 但曲线曲面又是如此地难以理解,让人们在一段很 长很长的时间内无法征服它。 自由曲线和曲面 规则的曲线和曲面,比如:圆和球,可以用固定的 函数表达式来构造,但是他的造型能力有限,我们 这儿不讨论。 自由曲线和曲面是指那些形状比较复杂、不能用初 等解析函数直接表示出来的曲线和曲面。
三次Bezier曲线是段自由曲线。
3.三次Bezier曲线 写成矩阵形式为
P0 P B3,3 1 P2 P3 1 P0 P 0 1 0 P2 0 P3
,
p (t ) B0,3
B1,3
double CTestView::C(const int &n, const int &i)//Bernstein第一项 { return double(Fac(n))/(Fac(i)*Fac(n-i)); } long CTestView::Fac(int n)//阶乘函数 { int f; if(0==n||1==n) f=1; else f=n*Fac(n-1); return f; }