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

上传人:风*** 文档编号:58180561 上传时间:2022-02-26 格式:DOC 页数:16 大小:325KB
返回 下载 相关 举报
计算机图形学上机实验4-实现Bezier曲线和Bezier曲面的绘制(共15页)_第1页
第1页 / 共16页
计算机图形学上机实验4-实现Bezier曲线和Bezier曲面的绘制(共15页)_第2页
第2页 / 共16页
计算机图形学上机实验4-实现Bezier曲线和Bezier曲面的绘制(共15页)_第3页
第3页 / 共16页
点击查看更多>>
资源描述
精选优质文档-倾情为你奉上昆 明 理 工 大 学 理 学 院信息与计算科学专业 操作性实验报告年级: 10级 姓名: 刘陈 学号: 8 指导教师: 胡杰 实验课程名称: 计算机图形学程序设计 开课实验室: 理学院机房216 实验成绩:学风(5)观察能力(15)操作能力(30)调试能力(50)其它总分实验内容:1实验/作业题目:用计算机高级语言VC+6.0实现计算机的基本图元绘制2实验/作业课时:2学时 3实验过程(包括实验环境、实验内容的描述、完成实验要求的知识或技能): 实验环境:(1)硬件:每人一 台PC机 (2)软件:windows OS,VC+6.0或以上版本。 试验内容及步骤: (1)在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;#define 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:OnDraw(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); /实时输入一个控制点,在屏幕上显示此点 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; CClientDC 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 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; /点右键,刷新屏幕,使控制定点数归零,并且所有开关变量变为初试值 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 CLab4View: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,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.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+(U0*a21+U1*a61+U2*a101+U3*a141)*W2+(U0*a31+U1*a71+U2*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./100,dv=3./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*(p00-p01)+x0;p2=0;p1=-0.4082*(p00+p01)+0.8165*p02+y0;6实验数据和实验结果(用屏幕图形表示,可另加附页):打开Dubug内lab4.exe在工作区绘画点,再点击菜单栏“Bezier曲线”,画出Bezier曲线。结果如下:点击菜单栏“改变控制点”选项,可以改变Bezier曲线,结果如下:点击鼠标右键可以清屏,再点击菜单栏“曲面”选项,可以绘制Bezier曲面及圆环曲面,结果如下:7改进建议: 程序改进之处就是能实现绘制Bezier曲面及其他曲面时能实现交互式,通过控制点的改变来改变曲面的形状和位置。评分标准 学 风-报告格式规范,文字清晰 观察能力-正确描述和理解需要操作的问题操作能力-正确输入程序,熟悉编程环境 调试能力-熟练使用调试功能解决程序错误专心-专注-专业
展开阅读全文
相关资源
相关搜索

最新文档


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


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

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


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