计算机图形学实验4-----hermite bezier b样条三种曲线的绘制

计算机图形学实验4-----hermite bezier b样条三种曲线的绘制

ID:11272283

大小:320.00 KB

页数:9页

时间:2018-07-11

计算机图形学实验4-----hermite bezier b样条三种曲线的绘制_第1页
计算机图形学实验4-----hermite bezier b样条三种曲线的绘制_第2页
计算机图形学实验4-----hermite bezier b样条三种曲线的绘制_第3页
计算机图形学实验4-----hermite bezier b样条三种曲线的绘制_第4页
计算机图形学实验4-----hermite bezier b样条三种曲线的绘制_第5页
资源描述:

《计算机图形学实验4-----hermite bezier b样条三种曲线的绘制》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、实验四HermiteBezierB样条三种曲线的绘制一、实验目的Ø了解和学习Hermite、Bezier、B样条三种曲线算法Ø掌握基于Win32、VisualC++环境MFC绘制图形配置过程制过程Ø编程实现Hermite、Bezier、B样条三种曲线的绘制二、实验原理²三次参数曲线1.曲线段可以用端点、切向量和曲线段之间的连续性等约束条件来定义2.两个端点和两端点处的切向量定义Hermite曲线;3.两个端点和另外两个控制端点切向量的点定义的Bezier曲线;4.由四个控制顶点定义的样条曲线。一、实验关键代码vo

2、idCDrawYTQXView::Hermite()//绘制Hermite三次插值样条{inta[4][4]={{2,-2,1,1},{-3,3,-2,-1},{0,0,1,0},{1,0,0,0}};//Mh矩阵系数intb[4][2];//边界点for(inti=0;i<4;i++){b[0][0]=p1[i][0];b[0][1]=p1[i][1];//起点的坐标b[1][0]=p1[i+1][0];b[1][1]=p1[i+1][1];//终点的坐标b[2][0]=p2[i][0];b[2][1]=p2[

3、i][1];//起点的导数b[3][0]=p2[i+1][0];b[3][1]=p2[i+1][1];//终点的导数Caculate(a,b);CClientDCdc(this);CPenMyPen,*pOldPen;MyPen.CreatePen(PS_SOLID,1,RGB(0,0,255));pOldPen=dc.SelectObject(&MyPen);dc.MoveTo(p1[i][0],p1[i][1]);for(doublet=0.0;t<=1;t+=1.0/400){intx=ROUND(pow(

4、t,3)*result[0][0]+pow(t,2)*result[1][0]+t*result[2][0]+result[3][0]);inty=ROUND(pow(t,3)*result[0][1]+pow(t,2)*result[1][1]+t*result[2][1]+result[3][1]);dc.LineTo(x,y);}dc.SelectObject(pOldPen);MyPen.DeleteObject();}}voidCDrawYTQXView::Caculate(inta[4][4],int

5、b[4][2])//矩阵相乘{inti,j,k;for(i=0;i<4;i++)for(j=0;j<2;j++)result[i][j]=0;//矩阵清零for(i=0;i<2;i++)for(j=0;j<4;j++)for(k=0;k<4;k++)result[j][i]+=a[j][k]*b[k][i];}voidCDrawYTQXView::DrawBezier()//绘制Bezier曲线{CClientDCdc(this);doublex,y;intrate=400,n;n=CtrlPoint-1;for

6、(doublet=0;t<=1;t+=1.0/rate){x=0;y=0;for(inti=0;i<=n;i++){x+=pt[i].x*Cnk(n,i)*pow(t,i)*pow(1-t,n-i);y+=pt[i].y*Cnk(n,i)*pow(t,i)*pow(1-t,n-i);}dc.SetPixel(ROUND(x),ROUND(y),RGB(0,0,255));//曲线颜色}}doubleCDrawYTQXView::Cnk(constint&n,constint&i)//Bernstein第一项{re

7、turndouble(Factorial(n)/(Factorial(i)*Factorial(n-i)));}intCDrawYTQXView::Factorial(intm)//阶乘函数{intf=1;for(inti=1;i<=m;i++)f*=i;returnf;}voidCDrawYTQXView::DrawB3_curves()//绘制B样条曲线{CClientDCdc(this);inti,rate=10,m;longlx,ly;m=CtrlPoint-(3+1);doubleF03,F13,F23

8、,F33;lx=ROUND((pt[0].x+4.0*pt[1].x+pt[2].x)/6.0);//t=0的起点x坐标ly=ROUND((pt[0].y+4.0*pt[1].y+pt[2].y)/6.0);//t=0的起点y坐标dc.MoveTo(lx,ly);CPenMyPen2,*pOldPen2;MyPen2.CreatePen(PS_SOLID,2,RGB(0,

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。