计算机图形学 第3章 曲线.
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
(3)递推算法几何作图 当n=3时,递推出的Pi k呈直角三角形,对应结果如图 3-29所示。从左向右递推,最右边点 P03 即为曲线上的 点。
P0 P1 P2
Pi 1 P 0
n
P12 P1 P0 P02 P12 P03 P01 P0 0 1/3 1
2
P11
P2
P21
P11
P03=P(1/3)
P3
递推算法程序设计。
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;
三次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
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的直线段。
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];
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曲 线来逼近原始曲线。
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基函数:
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 )
(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)。
当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
图3-26 Bezier曲线的凸包性
④几何不变性:Bezier曲线的位置和形状与其特征多 边形顶点的位置有关,它不依赖坐标系的选择。
(4)Bezier曲线的程序设计。
①三次Bezier曲线的程序设计如下: CDC *pDC=GetDC();
pDC->MoveTo(x[0],y[0]); //移到曲线上的第一个点
P21
P3
图3-29 n=3时
n P 的递推关系 i
图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曲线(实曲线),在连接处具有一阶连续。
pDC->LineTo(x,y); //用小直线段绘制曲线
}
2.Bezier曲线的递推算法
Pi Pi k 1 k 1 ( 1 t ) P tP i i 1
k
k 0 k 1,2,...,n, i 0,1,...,n k
上式中:Pi 0 Pi 是定义Bezier曲线的控制点, 即为曲线P(t)上具有参数t的点。