计算机图形学上机实验4_实现Bezier曲线和Bezier曲面的绘制_第1页
计算机图形学上机实验4_实现Bezier曲线和Bezier曲面的绘制_第2页
计算机图形学上机实验4_实现Bezier曲线和Bezier曲面的绘制_第3页
计算机图形学上机实验4_实现Bezier曲线和Bezier曲面的绘制_第4页
计算机图形学上机实验4_实现Bezier曲线和Bezier曲面的绘制_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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*(p00-p01)+x0;p2=0;p1=-0.4082*(p00+p01)+0.8165*p02+y0;6实验数据和实验结果 (用屏幕图形表示,可另加附页) :打开Dubug内Iab4.exe在工作区绘画点,再点击菜单栏“ Bezier曲线”,, 画出 Bezier 曲线。结果如下:点击菜单栏

温馨提示

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

评论

0/150

提交评论