计算机图形学 第3章 曲线

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
in 1 Bi ,n (t ) 0 otherwise
②端点性质
i0 1 Bi ,n (t ) 0 otherwise
③权性 ④对称性 ⑤递推性
B
i 0
n
i ,n
(t ) 1, t (0,1)
Bi ,n (t ) Bni ,n (t )
Bi ,n (t ) (1 t )Bi,n1 (t ) tBi 1,n1 (t )
N0,4 (t+3)=(-t3+3t2+3t+1)/6
N0,4 (t+2)=(3t3-6t2+4)/6
N0,4 (t+1)=(-3t3+3t2-3t+1)/6
N0,4 (t)=t3/6
P'(0) P1
P2 P'(1)
P3
P"(1) P"(0) P0 P4
图3-36 三次均匀周期B样条曲线
其主要VC程序代码为: CDC *pDC=GetDC(); x1 = (x[0] + x[2]) * 0.5 / 3 + 2 * x[1] / 3; y1 = (y[0] + y[2]) * 0.5 / 3 + 2 * y[1] / 3; pDC->MoveTo (x1,y1); for(i=0;i<n-3;i++) { for(t=0.01; t<1.0001; t=t+0.01) { n0 = (-t * t * t + 3 * t * t - 3 * t + 1) / 6; n1 = (3 * t * t * t - 6 * t * t + 4) / 6; n2 = (-3 * t * t * t + 3 * t * t + 3 * t + 1) / 6; n3 = t * t * t / 6; x1 = x[i] * n0 + x[i + 1] * n1 + x[i + 2] * n2 + x[i + 3] * n3; y1 = y[i] * n0 + y[i + 1] * n1 + y[i + 2] * n2 + y[i + 3] * n3; pDC->LineTo (x1,y1); } }
(0≤t≤1,i = 0,1,2,…,n-2) N0,3 (t +2)=(3-( t +2))2/2=(1-t)2/2 N0,3 (t +1)= -(t +1)2+3(t +1)-3/2=-t 2+t +1/2 N0,3 (t)= t 2/2
例如:给定如图3-35所示的5个控制点,则由它们控制的二次 B样条曲线有3段,由P0、P1、P2控制的二次B样条曲线为 P (t)= P0(1-t)2/2+P1(-t2+t+1/2)+ P2 t2/2 当t=0时,P(0)= 0.5P0+0.5P1 (为P0 P1的中点。) 当t=1时,P(1)= 0.5P1+0.5P2 (为P1 P2的中点。) 同理由P1、P2、P3控制的二次B样条曲线为 P(t)= P1(1-t)2/2+P2(-t2+t+1/2)+ P3 t2/2 由P2、P3、P4控制的二次B样条曲线为 P(t)= P2(1-t)2/2+P3(-t2+t+1/2)+ P4 t2/2 可见二次B样条曲线经过控制多边形各边的中点,各段曲线在 各边的中点处一阶连续,其所共有的切线就是控制多边形的 边。
P1
P(1)
P2 P4
P(0) P0
P(2) P3
图3-35 均匀周期二次B样条曲线示意图
主要VC程序代码为:
CDC *pDC=GetDC();
x1 = (x[0] + x[1]) * 0.5; y1 = (y[0] + y[1]) * 0.5; pDC->MoveTo (x1,y1); for(i=0; i<n-2; i++) { for(t=0.01; t<1.0001; t=t+0.01) { n2 = (1 - t) * (1 - t) * 0.5; n1 = (-2 * t * t + 2 * t + 1) * 0.5; n0 = t * t * 0.5; x1 = x[i] * n2 + x[i + 1] * n1 + x[i + 2] * n0; y1 = y[i] * n2 + y[i + 1] * n1 + y[i + 2] * n0; pDC->LineTo (x1,y1);
P1 P2 Q P0 P3 P4 P5
图3-32 Bezier曲线的拼接
4.Bezier曲线的升阶与降阶 (1)Bezier曲线的升阶。保持Bezier曲线的形状 与定向不变,增加控制顶点数,可以提高Bezier 曲线的次数。增加控制顶点数,就增加了对曲线 进行形状控制的灵活性,还在构造曲面方面有着 重要的应用。 (2)Bezier曲线的降阶。降阶是升阶的逆过程。 给定一条由原始控制顶点Pi(i=0,1,…,n) 定义的n次Bezier曲线,要求找到一条由新控制 顶点(i=0,1,…,n-1)定义的n-1次Bezier曲 线来逼近原始曲线。
Bi ,n (t ) C t (1 t )
i i n n i
n! t i (1 t ) ni i!(n i)!
(i=0,1,…,n)
P2
P3 P1
P1
P0 P0 P3 P2
图3-24 三次Bezier曲线
当n=1时,P(t)= P0B0,1(t)+ P1B1,1(t) = P0 (1-t)+ P1t 一次Bezier曲线是连接P0与P1的直线段。
5.反算Bezier曲线控制点
Bezier曲线是由控制点控制的,曲线只经过 控制点的起点和终点,如果要构造一条Bezier曲 线经过给定n+1个型值点Qi(i=0,1,2,…,n), 可反求该Bezier曲线的控制点。
3.3.2 B样条曲线
1.B样条的定义 B样条曲线方程定义为
P(t ) Pi N i , k (t )
图3-26 Bezier曲线的凸包性
④几何不变性:Bezier曲线的位置和形状与其特征多 边形顶点的位置有关,它不依赖坐标系的选择。
(4)Bezier曲线的程序设计。
①三次Bezier曲线的程序设计如下: CDC *pDC=GetDC();
pDC->MoveTo(x[0],y[0]); //移到曲线上的第一个点
均匀:节点向量ti =i(i=0,1,2,…,n+k),
ti – ti +1=常数。
周期:所有基函数形状一样,可由其中一个基函数平 移得到。
Ni,k(t)= Ni-1,k(t-1)= Ni+1,k(t+1)
图3-34 二次Ni,3基函数曲线
①二次均匀周期B样条曲线
P (t)= Pi N0,3 (t +2)+Pi +1N 0,3 (t +1)+Pi +2N 0,3 (t)
}
(3)递推算法几何作图 当n=3时,递推出的Pi k呈直角三角形,对应结果如图 3-29所示。从左向右递推,最右边点 P03 即为曲线上的 点。
P0 P1 P2
P Pi01
n
P12 P1 P0 P02 P12 P03 P01 P0 0 1/3 1
2
P11
P2
P21
P11
P03=P(1/3)
P3
P21
pDC->LineTo(x,y); //用小直线段绘制曲线
}
2.Bezier曲线的递推算法
Pi Pi k (1 t ) Pi k 1 tPi 1 1
k
wenku.baidu.com
k 0 k 1,2,...,n, i 0,1,...,n k
上式中:Pi 0 Pi 是定义Bezier曲线的控制点, 即为曲线P(t)上具有参数t的点。
Bezier曲线的起点和终点处的切线方向和特征多边形的 第1条边及最后一条边的走向一致。
②对称性:由控制顶点Qi =Pn-i构造出的新Bezier曲线, 与原Bezier曲线形状相同,但走向相反。
③凸包性:在[0,1]区间变化时,对某一个t值,P(t) 是特征多边形各顶点Pi的加权平均,加权因子依次是 Bi,n(t)。在几何图形上,曲线落在Pi构成的凸包之中, 如图3-26所示。 凸包
3.3 曲 线 图 形
3.3.1 曲线的生成算法 1.Bezier曲线
(1)Bezier曲线的定义:给定空间n+1个点的 位置矢量Pi(i=0,1,2,…,n),则Bezier参 数曲线上各点坐标的插值公式是
P(t ) Pi Bi ,n (t ), t [0,1]
i 0 n
其中,Pi构成该Bezier曲线的特征多边形,Bi, n(t)是n次Bernstein基函数:
i 0 n
式中,Pi(i=0,1,…,n)是控制多边形的顶点, Ni,k (t)(i=0,1,…,n)称为k阶(k-1次)B样条基 函数。 B样条的基函数由递推公式定义为(约定0/0=0)
1 t i t t i 1 N i ,1 (t ) 0 otherwise
(tk-1≤t≤tn+1)
递推算法程序设计。
CDC *pDC=GetDC();
pDC->MoveTo(x[0],y[0]); for(t=0.05;t<1.0001;t=t+0.05)
{
for(i=0;i<=n;i++)
xx[i]=x[i], yy[i]=y[i]; for(k=1;k<=n;k++) { for(int i=0;i<n-k;i++) { } } pDC->LineTo (xx[0],yy[0]); xx[i]=xx[i]*(1-t)+xx[i+1]*t; yy[i]=yy[i]*(1-t)+yy[i+1]*t;
P3
图3-29 n=3时
Pi n 的递推关系
图3-30 几何作图法求Bezier曲线上一点 (n=3,t=1/3)
3.Bezier曲线的拼接 如图3-32,设给定特征多边形的顶点为P0、P1、P2、 P3、P4、P5,由它们控制的曲线为5次Bezier曲线(虚 曲线)。如果在P2、P3直线上增加一个控制点Q,则 P0、P1、P2、Q和Q、P3、P4、P5分别控制两个三次 Bezier曲线(实曲线),在连接处具有一阶连续。
当n=2时,P(t)= P0B0,2(t)+ P1B1,2(t) + P2B2,2(t)
= P0 (1-t) 2-2P1 t (1-t) + P2t2 二次Bezier曲线是一条过P0、P2的抛物线。 当n=3时,P(t)= P0B0,3(t)+ P1B1,3(t) + P2B2,3(t) + P3B3,3(t) = P0 (1-t) 3+3P1 t (1-t) 2+ 3P2t2(1-t) + P3 t3
for(t=0.01;t<1.0001;t=t+0.01) { //计算基函数 b03=(1-t)*(1-t)*(1-t);b13=3*t*(1-t)*(1-t); b23=3*t*t*(1-t);b33=t*t*t; x=b03*x[0]+b13*x[1]+b23*x[2]+b33*x[3]; y=b03*y[0]+b13*y[1]+b23*y[2]+b33*y[3];
式中,ti是节点值,T= [t0,t1,…,tn+k]构成了k阶B 样条函数的节点矢量,其中的节点是非递减序列。
2.B样条曲线类型的划分
B样条曲线按其节点矢量中节点的分布情况,可划分 为多种类型。假定控制多边形的顶点为Pi(i=0, 1,…,n),介绍两种常用的简单类型。 (1)均匀周期样条曲线。
(i=0,1,…,n)
(3)Bezier曲线的性质。 ①端点性质
曲线端点位置矢量:
当t=0时,P(0)= P0;
当t=1时,P(1)= Pn。
Bezier曲线的起点、终点与相应的特征多边形的起点、 终点重合。
切矢量:
当t=0时,P'(0)=n (P1- P0);
当t=1时,P' (1)=n (Pn- Pn-1)。
三次Bezier曲线 Bernstein基函数曲线如图3-25所示。
B 1 B0,3 B1,3 B2,3 B3,3
0
1 t
图3-25 三次Bezier曲线基函数
(2)Bernstein基函数的性质。
①正性
t 0,1 0 Bi ,n (t ) 0 t (0,1), i 1,2,...,n 1
}
}
三次均匀周期B样条曲线。
对于三次B样条曲线,需要计算N0,4(t),可以得出N0,4(t)是一 个4段函数,因此每段三次B样条曲线由4个控制点控制,其 表达式为 P(t)= PiN0,4 (t+3)+Pi+1N 0,4 (t+2)+Pi+2N 0,4 (t+1)+ Pi+3N 0,4 (t) (0≤t≤1,i=0,1,2,…,n-3)
相关文档
最新文档