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

上传人:桔**** 文档编号:548008460 上传时间:2023-09-01 格式: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页
第4页 / 共10页
计算机图形学上机实验4实现Bezier曲线和Bezier曲面的绘制_第5页
第5页 / 共10页
点击查看更多>>
资源描述

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

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;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)*W0 +(U0*a10+U1*a50+U2*a90+U3*a130)*W1

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

当前位置:首页 > 资格认证/考试 > 自考

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