计算机图形学上机实验4-实现Bezier曲线和Bezier曲面的绘制(共15页)

上传人:s9****2 文档编号:495145708 上传时间:2024-01-25 格式:DOC 页数:16 大小:325KB
返回 下载 相关 举报
计算机图形学上机实验4-实现Bezier曲线和Bezier曲面的绘制(共15页)_第1页
第1页 / 共16页
计算机图形学上机实验4-实现Bezier曲线和Bezier曲面的绘制(共15页)_第2页
第2页 / 共16页
计算机图形学上机实验4-实现Bezier曲线和Bezier曲面的绘制(共15页)_第3页
第3页 / 共16页
计算机图形学上机实验4-实现Bezier曲线和Bezier曲面的绘制(共15页)_第4页
第4页 / 共16页
计算机图形学上机实验4-实现Bezier曲线和Bezier曲面的绘制(共15页)_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《计算机图形学上机实验4-实现Bezier曲线和Bezier曲面的绘制(共15页)》由会员分享,可在线阅读,更多相关《计算机图形学上机实验4-实现Bezier曲线和Bezier曲面的绘制(共15页)(16页珍藏版)》请在金锄头文库上搜索。

1、精选优质文档-倾情为你奉上昆 明 理 工 大 学 理 学 院信息与计算科学专业 操作性实验报告年级: 10级 姓名: 刘陈 学号: 8 指导教师: 胡杰 实验课程名称: 计算机图形学程序设计 开课实验室: 理学院机房216 实验成绩:学风(5)观察能力(15)操作能力(30)调试能力(50)其它总分实验内容:1实验/作业题目:用计算机高级语言VC+6.0实现计算机的基本图元绘制2实验/作业课时:2学时 3实验过程(包括实验环境、实验内容的描述、完成实验要求的知识或技能): 实验环境:(1)硬件:每人一 台PC机 (2)软件:windows OS,VC+6.0或以上版本。 试验内容及步骤: (1

2、)在VC+环境下创建MFC应用程序工程(单文档) (2)编辑菜单资源 (3)添加菜单命令消息处理函数 (4)添加成员函数 (5)编写函数内容试验要求: (1)掌握Bezier曲线、Bezier曲面、及另一个曲面的算法。 (2)实现对Bezier曲线、Bezier曲面、及另一个曲面。 (3)试验中调试、完善所编程序,能正确运行出设计要求结果。 (4)书写试验报告上交。4程序结构(程序中的函数调用关系图)添加Bezier曲线、及曲面算法源码添加消息处理函数实现绘画5算法描述、流程图或操作步骤:在lab4iew.cpp文件中添加如下头文件及变量int flag_2=0;int n_change;#d

3、efine M 30#define PI 3.14159 /圆周率#include math.h /数学头文件在lab4iew.h文件中的public内添加变量 : int move;int graflag;void Tiso(float p03,float x0, float y0, float p3);void OnBezierface();在lab4iew.h文件中的protected内添加变量: int n;/控制点数 const int N;/控制点数的上限CPoint* a;/控制点存放的数组double result42;在lab4iew.cpp文件中的函数Clab4iew:On

4、Draw(CDC* pDC)下添加如下代码: int i,j; for(i=0;iFillSolidRect(ai.x-2,ai.y-2,4,4,RGB(255,55,255); pDC-MoveTo(a0); for(j=0;jLineTo(aj); if(nSelectObject(&pen);在Lab4iew.cpp文件中添加如下的各个消息处理函数及代码:void CLab4View:OnLButtonDown(UINT nFlags, CPoint point) if(flag_2=0) /flag_2等于0,此时是输入控制点状态 CClientDC dc(this); /实时输入一个

5、控制点,在屏幕上显示此点 dc.FillSolidRect(point.x-2,point.y-2,4,4,RGB(0,0,255); if(nN)an+=point; /给控制点数组a赋值else MessageBox(控制点太多!,waring,MB_OK|MB_ICONINFORMATION);else if(flag_2=1) /flag_2等于1,此时是修改控制点状态 int i;for(i=0;in;i+) if(abs(point.x-ai.x)10)&(abs(point.y-ai.y)10) /给定一个范围,如果在范围内,则选中该控制点 n_change=i; CClient

6、DC dc(this); /如果选中该点,则该点的颜色发生变化 dc.FillSolidRect(an_change.x-2,an_change.y-2,4,4,RGB(255,255,0);CView:OnLButtonDown(nFlags, point);void CLab4View:OnLButtonUp(UINT nFlags, CPoint point) if(flag_2=1) an_change=point; /给变换的点赋值 Invalidate(true); /调用OnDraw函数,重新画控制多边形 CView:OnLButtonUp(nFlags, point);void

7、 CLab4View:OnMouseMove(UINT nFlags, CPoint point) if(flag_2=1) if(nFlags=MK_LBUTTON) an_change=point;Invalidate(true); CView:OnMouseMove(nFlags, point);void CLab4View:Ondrawbezier() move=0; graflag=1; Invalidate(true); flag_2=1;void CLab4View:OnRButtonDown(UINT nFlags, CPoint point) CRect rc; /点右键,刷

8、新屏幕,使控制定点数归零,并且所有开关变量变为初试值 GetClientRect(&rc); CClientDC dc(this); dc.Rectangle(0,0,rc.right,rc.bottom); /清屏 n=0; /控制点数归零flag_2=0; /开关变量变为初试值CView:OnRButtonDown(nFlags, point);void CLab4View:OnMove() move=1; flag_2=1; CClientDC dc(this); int i=0; while (in) ai.y=ai.y+50; i+; Invalidate(true); void C

9、Lab4View:OnBezierface() Invalidate(true);UpdateWindow();CClientDC dc(this);dc.SetTextColor(RGB(0,0,255);dc.TextOut(160,160,Bezier曲面);CPen pen1,pen2;pen1.CreatePen(PS_SOLID,1,RGB(255,0,0);pen2.CreatePen(PS_SOLID,3,RGB(0,0,255); int a242=100,400,110,300,130,250,150,350,200,300,210,280,250,200,280,250,

10、300,320,300,280,330,180,360,250,400,400,380,320,410,200,480,280;int i,j;dc.SelectObject(&pen2);for(i=0;i16;i=i+4) dc.MoveTo(ai0,ai1);for(j=0;j4;j+) dc.LineTo(ai+j0,ai+j1); for(i=0;i4;i+) dc.MoveTo(ai0,ai1);for(j=0;j16;j=j+4) dc.LineTo(ai+j0,ai+j1); dc.SelectObject(&pen2);double x,y; x=a00; y=a01; dc

11、.MoveTo(x,y);dc.SelectObject(&pen1);double u,w;for(u=0;u1;u=u+0.01) double U0=-u*u*u+3*u*u-3*u+1;double U1=3*u*u*u-6*u*u+3*u;double U2=-3*u*u*u+3*u*u;double U3=u*u*u;x=U0*a00+U1*a40+U2*a80+U3*a120;y=U0*a01+U1*a41+U2*a81+U3*a121;dc.MoveTo(x,y);for(w=0;w1;w=w+0.01) double W0=-w*w*w+3*w*w-3*w+1;double W1=3*w*w*w-6*w*w+3*w;double W2=-3*w*w*w+3*w*w;double W3=w*w*w;x=(U0*a00+U1*a40+U2*a80+U3*a120)*W0+(U0*a10+U1*a50+U2*a90+U3*a130)*W1+(U0*a20+U1*a60+U2*a100+U3*a140)*W2+(U0*a30+U1*a70+U2*a110+U3*a150)*W3);y=(U0*a01+U1*a41+U2*a81+U3*a121)*W0+(U0*a11+U1*a51+U2*a91+U3*a131)*W1

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号