计算机图形学上机实验4实现Bezier曲线和Bezier曲面的绘制

上传人:痛*** 文档编号:102397727 上传时间:2022-06-06 格式:DOC 页数:10 大小:347.50KB
收藏 版权申诉 举报 下载
计算机图形学上机实验4实现Bezier曲线和Bezier曲面的绘制_第1页
第1页 / 共10页
计算机图形学上机实验4实现Bezier曲线和Bezier曲面的绘制_第2页
第2页 / 共10页
计算机图形学上机实验4实现Bezier曲线和Bezier曲面的绘制_第3页
第3页 / 共10页
资源描述:

《计算机图形学上机实验4实现Bezier曲线和Bezier曲面的绘制》由会员分享,可在线阅读,更多相关《计算机图形学上机实验4实现Bezier曲线和Bezier曲面的绘制(10页珍藏版)》请在装配图网上搜索。

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

2、应用程序工程(单文档)(2 )编辑菜单资源(3) 添加菜单命令消息处理函数(4) 添加成员函数(5) 编写函数内容试验要求:(1 )掌握Bezier曲线、Bezier曲面、及另一个曲面的算法。(2) 实现对Bezier曲线、Bezier曲面、及另一个曲面。(3) 试验中调试、完善所编程序,能正确运行出设计要求结果。(4) 书写试验报告上交。4程序结构(程序中的函数调用关系图)5算法描述、流程图或操作步骤:在Iab4iew.cpp文件中添加如下头文件及变量int flag_2=0;int n _cha nge;#defi ne M 30#defi ne PI 3.14159/圆周率#i nclu

3、de math.h/数学头文件在lab4iew.h 文件中的public内添加变量:int move;int graflag;void Tiso(float p03,float xO, float yO, float p3);void On Bezierface();在lab4iew.h 文件中的protected 内添加变量:int n;控制点数const int N;控制点数的上限CPoi nt* a;/控制点存放的数组double result42;在lab4iew.cpp 文件中的函数 Clab4iew:OnDraw(CDC* pDC)下添加如下代 码:int i,j;for(i=0;

4、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);/实时输入一个控制点,在屏幕上显示此点八、dc.FillSolidRect(point.x-2,

5、point.y-2,4,4,RGB(0,0,255);if(nN)an+=point;/给控制点数组 a 赋值else MessageBox( else if(flag_2=1)控制点太多!,waring,MB_OK|MB_ICONINFORMATION);/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; CClientDC dc(this); / 如果选中该点,则该点的颜色发生变 化dc.F

6、illSolidRect(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 CLab4View:OnMouseMove(UINT nFlag

7、s, 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; / 点右键,刷新屏幕,使控制定点数归零,并且所有开关变量变为初试 值GetC

8、lientRect(&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 CLab4View:OnBezierface() Invalidate

9、(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,300,320,300,280,330,180,360,250

10、, 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.MoveTo(x,y);dc.SelectObject(&

11、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

12、=-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+(U0*a21+U1*a61+U2*a101+U3*a141)*W2 +(U0*a31+U1*a71+U2*

13、a111+U3*a151)*W3);dc.LineTo(x,y);Sleep(1);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=W0*a00+W1*a10+W2*a20+W3*a30;y=W0*a01+W1*a11+W2*a21+W3*a31;dc.MoveTo(x,y);for(u=0;uTextOut(200,80, 圆环曲面 );float pp02,p3,pp3,R,du=3.1415926

14、/100,dv=3.1415926/50,x0=300,y0=100,u=0,v=0; pp00=200,pp01=200,R=50;p0=(pp00+R*sin(u)*cos(v); p1=(pp00+R*sin(u)*sin(v);p2=pp01+R*cos(u);Tiso(p,x0,y0,pp);pDC-MoveTo(pp0,pp1);for(v=1;v=360;v+) for(u=1;uLineTo(pp0,pp1);ReleaseDC(pDC);void CLab4View:Tiso(float p03,float x0, float y0, float p3) p0=0.7071*

15、(p00-p01)+x0;p2=0;p1=-0.4082*(p00+p01)+0.8165*p02+y0;6实验数据和实验结果 (用屏幕图形表示,可另加附页) :打开Dubug内Iab4.exe在工作区绘画点,再点击菜单栏“ Bezier曲线”,, 画出 Bezier 曲线。结果如下:点击菜单栏“改变控制点”选项,可以改变Bezier曲线,结果如下:点击鼠标右键可以清屏,再点击菜单栏“曲面”选项,可以绘制Bezier曲面及圆环曲面,结果如下:7改进建议:程序改进之处就是能实现绘制 Bezier曲面及其他曲面时能实 现交互式,通过控制点的改变来改变曲面的形状和位置。第10页第#页评分标准学 风-报告格式规范,文字清晰观察能力-正确描述和理解需要操作的问题第#页第#页操作能力-正确输入程序,熟悉编程环境调试能力-熟练使用调试功能解决程序错误第#页

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!