计算机图形学——绘制Bezier曲线

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算机图形学

实验报告

专业:信息与计算科学

班级: 1002班

学号: **********

姓名: ****

实验目的:

(1)掌握直线的参数表示法。

(2)掌握德卡斯特里奥算法的几何意义。

(3)掌握绘制二维Bezier曲线的方法。

实验要求:

(1)使用鼠标左键绘制个数为10以内的任意控制点,使用直线连接构成控制多边形。

(2)使用鼠标右键绘制Bezier曲线。

(3)在状态栏显示鼠标的位置坐标。

(4)B ezier曲线使用德卡斯特里奥算法绘制。

实验算法:

Bezier曲线的分割递推德卡斯特里奥算法

给定空间n+1个点P i(i=0,1,2,…,n)及参数t,有

P r i(t)=(1-t)P1-r i(t)+t P1-r1i+(t)

式中,r=1,2,…,n;i=0,1,…,n-r;t∈[0,1]。

且规定当r=0时,P0i(t)=P i, P n0(t)是在曲线上具有参数t的点。

德卡斯特里奥算法的基础就是在矢量−

−→

P

P10

上选择一个点P,使

得P点划分矢量−

−→

P

P10为|P

P0|:|P

P1|=t:1-t,给定点P0、P1

的坐标以及t的值,点P的坐标为P=P0+t(P1-P0)=(1-t)P0+tP1。式中,t∈[0,1]。

定义贝塞尔曲线的控制点编号为P r i,其中,r表示迭代次数。德卡斯特里奥证明了,当r=n时,P n0表示Bezier曲线上的点。

函数功能介绍

1.德卡斯特里奥函数:

long CMy12View::DeCasteliau(double t,long *p)

{

double P[N_MAX_POINT][N_MAX_POINT];

int n=CtrlPNum-1;

for(int k=0;k<=n;k++)

{

P[0][k]=p[k];

}

for(int r=1;r<=n;r++)

{

for(int i=0;i<=n-r;i++)

{

P[r][i]=(1-t)*P[r-1][i]+t*P[r-1][i+1];

}

}

return(long(P[n][0]));

}

函数功能介绍:此函数为德卡斯特里奥算法函数。在绘制Bezier 曲线时,需调用两次此函数,分别关于x方向和y方向上的调用。由DrawBezier()函数调用。

2. void CMy12View::DrawBezier()

函数功能介绍:此函数为绘制Bezier曲线。绘制二维Bezier曲线,需要对x方向和y方向进行计算。这个函数就是解决这个问题,然后通过OnRButtonDown(UINT nFlags,CPoint point)调用进行绘制。

3 .void CMy12View::DrawCtrPolygon()

函数功能介绍:此函数为绘制控制多边形。定义一个CPen型NewPen,和CPen*型PoldPen,进行绘制多边形,为了突出控制点,使用黑色填充边长为4个像素的正方形块代表控制点。

4. void CMy12View::OnLButtonDown(UINT nFlags,CPoint point)

函数功能介绍:此函数为鼠标左键按下函数。按下鼠标左键,将鼠

标位置点作为控制点,并调用CMy12View::DrawCtrPolygon()函数绘制控制多边形

5. void CMy12View::OnRButtonDown(UINT nFlags,CPoint point)

函数功能介绍:此函数为鼠标右键按下函数。通过一个BOOL型的变量,控制多边形的绘制,由鼠标右键绘制Bezier曲线。

实验结果:

相关文档
最新文档