




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验四 Hermite Bezier 样条三种曲线的绘制1、 实验目的 了解和学习Hermite、Bezier、样条三种曲线算法 掌握基于 Win32、Visual C+环境MFC绘制图形配置过程制过程 编程实现Hermite、Bezier、样条三种曲线的绘制2、 实验原理 三次参数曲线1. 曲线段可以用端点、切向量和曲线段之间的连续性等约束条件来定义 2. 两个端点和两端点处的切向量定义Hermite曲线; 3. 两个端点和另外两个控制端点切向量的点定义的Bezier曲线;4. 由四个控制顶点定义的样条曲线。3、 实验关键代码void CDrawYTQXView:Hermite()/绘制He
2、rmite三次插值样条int a44 =2,-2,1,1,-3,3,-2,-1,0,0,1,0,1,0,0,0;/Mh矩阵系数int b42;/边界点 for(int i=0;i4;i+)b00=p1i0;b01=p1i1;/起点的坐标b10=p1i+10;b11=p1i+11;/终点的坐标b20=p2i0;b21=p2i1;/起点的导数b30=p2i+10;b31=p2i+11;/终点的导数Caculate(a,b);CClientDC dc(this);CPen MyPen,*pOldPen;MyPen.CreatePen(PS_SOLID,1,RGB(0,0,255);pOldPen=d
3、c.SelectObject(&MyPen);dc.MoveTo(p1i0,p1i1);for(double t=0.0;t=1;t+=1.0/400)int x=ROUND(pow(t,3)*result00+pow(t,2)*result10+ t*result20+result30);int y=ROUND(pow(t,3)*result01+pow(t,2)*result11+ t*result21+result31);dc.LineTo(x,y);dc.SelectObject(pOldPen);MyPen.DeleteObject();void CDrawYTQXView:Cacu
4、late(int a44,int b42)/矩阵相乘int i,j,k;for(i=0;i4;i+)for(j=0;j2;j+)resultij=0;/矩阵清零for(i=0;i2;i+)for(j=0;j4;j+)for(k=0;k4;k+)resultji+=ajk*bki; void CDrawYTQXView:DrawBezier()/绘制Bezier曲线CClientDC dc(this);double x,y;int rate=400,n;n=CtrlPoint-1;for(double t=0;t=1;t+=1.0/rate)x=0;y=0;for(int i=0;i=n;i+)
5、x+=pti.x*Cnk(n,i)*pow(t,i)*pow(1-t,n-i);y+=pti.y*Cnk(n,i)*pow(t,i)*pow(1-t,n-i);dc.SetPixel(ROUND(x),ROUND(y),RGB(0,0,255);/曲线颜色double CDrawYTQXView:Cnk(const int &n, const int &i)/Bernstein第一项return double(Factorial(n)/(Factorial(i)*Factorial(n-i);int CDrawYTQXView:Factorial(int m)/阶乘函数int f=1;for(
6、int i=1;i=m;i+)f*=i;return f;void CDrawYTQXView:DrawB3_curves()/绘制B样条曲线CClientDC dc(this);int i,rate=10,m;long lx,ly;m=CtrlPoint-(3+1);double F03,F13,F23,F33;lx=ROUND(pt0.x+4.0*pt1.x+pt2.x)/6.0);/t0的起点x坐标ly=ROUND(pt0.y+4.0*pt1.y+pt2.y)/6.0);/t0的起点y坐标dc.MoveTo(lx,ly);CPen MyPen2,*pOldPen2;MyPen2.Crea
7、tePen(PS_SOLID,2,RGB(0,0,255);/颜色设置pOldPen2=dc.SelectObject(&MyPen2);for(i=1;im+2;i+)/m+1段三次样条曲线for(double t=0;t=1;t+=1.0/rate)F03=(-t*t*t+3*t*t-3*t+1)/6;/计算F0,3(t)F13=(3*t*t*t-6*t*t+4)/6;/计算F1,3(t)F23=(-3*t*t*t+3*t*t+3*t+1)/6;/计算F2,3(t)F33=t*t*t/6;/计算B3,3(t)lx=ROUND(pti-1.x*F03+pti.x*F13+pti+1.x*F2
8、3+pti+2.x*F33);ly=ROUND(pti-1.y*F03+pti.y*F13+pti+1.y*F23+pti+2.y*F33);dc.LineTo(lx,ly);dc.SelectObject(pOldPen2);MyPen2.DeleteObject();void CDrawYTQXView:DrawCharPolygon()/绘制控制多边形CClientDC dc(this);CPen MyPen,*pOldPen;MyPen.CreatePen(PS_SOLID,2,RGB(0,0,0);/控制多边形pOldPen=dc.SelectObject(&MyPen);for(i
9、nt i=0;iCtrlPoint;i+)if(i=0)dc.MoveTo(pti);dc.Ellipse(pti.x-2,pti.y-2,pti.x+2,pti.y+2);elsedc.LineTo(pti);dc.Ellipse(pti.x-2,pti.y-2,pti.x+2,pti.y+2);dc.SelectObject(pOldPen);MyPen.DeleteObject();void CDrawYTQXView:OnLButtonDown(UINT nFlags, CPoint point)/获得屏幕控制点坐标 / TODO: Add your message handler c
10、ode here and/or call defaultCView:OnLButtonDown(nFlags, point);if(Flag)ptCtrlPoint.x=point.x;ptCtrlPoint.y=point.y;if(CtrlPointN_MAX_POINT)CtrlPoint+;elseFlag=false;DrawCharPolygon();else DrawCharPolygon1();void CDrawYTQXView:OnRButtonDown(UINT nFlags, CPoint point)/调用绘制函数 / TODO: Add your message handler code here and/or call defaultFlag=false;if(Sign=0)Hermite();if(Sign=1)DrawBezier();if(Sign=2)DrawB3_curves();CView:OnRButtonDown(nFlags, point);4、 实验结果1、 绘制Hermite曲线2、
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 汽车行业合同样本:会员服务协议
- 移动基站租赁合同书范本
- 城市老旧小区消防系统改造项目合同
- 幼儿园临时教师聘任合同
- 新版民间房产抵押权转让合同
- 肾性水肿课件
- 智能化煤矿培训课件下载
- 旧货零售互联网+创新实践考核试卷
- 搪瓷器的创造思维与创意设计考核试卷
- 建筑施工现场安全监测与预警考核试卷
- 人音版六年级下册音乐教案及反思
- 《陆上风电场工程概算定额》NBT 31010-2019
- 展会展中营销方案
- 四年级上册竖式计算100题及答案
- 2024届辽宁省沈阳市名校中考四模化学试题含答案解析
- 2024年新高考改革方案政策
- 2024年4月自考00431教学设计试题
- 2024年许昌职业技术学院单招职业技能测试题库及答案解析
- 《新媒体创意短视频制作》课件-运动短视频制作关键技术
- JTGT F20-2015 公路路面基层施工技术细则
- 7S培训管理教材课件(-28张)
评论
0/150
提交评论