ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:63.93KB ,
资源ID:27253234      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/27253234.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(计算机图形学实验一报告.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

计算机图形学实验一报告.docx

1、计算机图形学实验一报告 计算机科学与通信工程学院实验报告课程计算机图形学实验题目二维图形绘制学生姓名学号专业班级指导教师日期成绩评定表评价内容具体内容权重得分论证分析方案论证与综合分析的正确、合理性20%算法设计算法描述的正确性与可读性20%编码实现源代码正确性与可读性30%程序书写规范标识符定义规范,程序书写风格规范20%报告质量报告清晰,提交准时10%总 分指导教师签名二维图形的绘制1. 实验内容(1)绘制金刚石图案金刚石图案的成图规则是:把一个圆周等分成n份,然后每两点之间连线。当n取奇数时,该图案可一笔连续绘成,即用MoveTo函数确定一个当前点,然后连续用LineTo函数连点成线。请

2、设计连线规则并编程实现。(2)绘制魔术三角形绘制下图所示的魔术三角形图案 ,采用三种可明显区分的颜色填充。(3)绘制递归圆应用递归的方法绘制如下所示的图案。2. 实验环境软硬件运行环境:Windows XP开发工具:visual studio 20083. 问题分析根据实验需求,需要在MFC环境中建立一个由“文件”、“绘图”和“帮助”这3个菜单项目组成的菜单,其中“文件”的子菜单为“退出”,完成退出应用程序的工作,“绘图”,的子菜单为“Diamond”,用于绘制金刚石图案等,“帮助”的子菜单为“关于”,用于显示开发人员信息;定义一个输人对话框类,提供个两个参数的输入界面。最后在客户区输出图案。

3、 1.金刚石图案:为把一个半径为300的圆,等分绘制金刚石图案;设计该算法为避免直线段的重复连接,需设计一个二重循环,代表起点索引号的外层整型变量i从i=0循环到i=n-2,代表终点索引号的内层整型变量j从j=i+1循环到j=n-1。以(pi.x,pi.y)为起点,以(pj.x,pj.y)为终点依次连接各线段形成金刚石图案。金刚石有两种画法:(1)每隔两个顶点连线直至回到原起点,再将下一个点作为新的原起点。(2)每个点与其余点都连线直至全部连玩,再将隔一个点之后的点作为新的原起点。2.魔术三角形:先绘制三角形图形,再随机在三个图形中填色。3.递归圆:先确定首个圆的中心点坐标和半径与其周围八个小

4、圆的中心点坐标和半径,再根据递归的深度再算出递归后圆的半径,并计算出它们的圆中心点坐标。设计一个二重循环,代表起点的外层循环从i0循环到in-2,代表终点的内层循环从ji+1循环到j=n-1。以pi.x,pi.y作为起点,以pj.x,pj.y作为终点绘制连接线。4. 算法设计/DiamondView.hclass CDiamondView : public CView public: /参数输入和提示对话框 CDlgDiamond dlgDiamond;/金刚石绘制中的参数输入对话框 CDlgCircle dlgCircle;/递归圆绘制中的参数输入对话框 CDlgBezier dlgBezi

5、er;/Bezier曲线绘制中的参数输入对话框 CDlgB dlgB;/B样条曲线绘制中的参数输入对话框 CDlgHint dlgHint;/裁剪中的提示对话框 /用于裁剪时的裁剪窗口绘制的控制 BOOL IsCutting; BOOL IsDrawing; /裁剪窗口的左上角和右下角坐标 POINT RectP1;/左上角坐标 POINT RectP2;/右下角坐标 /绘图函数,需要实现 void DrawDiamond(int,int,int);/绘制金刚石 void DrawTriangle();/绘制魔术三角 void DrawRecursionCircle(int);/绘制递归圆 v

6、oid Polaris();/北极星 void DrawBezier1(POINT p4);/已知点作为控制点绘制Bezier曲线 void DrawBezier2(POINT p4);/已知点作为曲线上的点绘制Bezier曲线 void DrawBCurve(POINT p6);/绘制B样条曲线 void Cut();/裁剪 ;/DiamondView.cppvoid CDiamondView:OnMenuDiamond() IsCutting = FALSE; if(dlgDiamond.DoModal()=IDOK) DrawDiamond(dlgDiamond.m_nVertex,dl

7、gDiamond. m_nRadius,100);/调用绘制金刚石的函数 /绘制金刚石图案/nVertex:顶点数,radius:圆半径,millisecond:笔画之间的延迟时间void CDiamondView:DrawDiamond(int nVertex, int radius,int millisecond)void CDiamondView:OnMenuTriangle() IsCutting = FALSE; DrawTriangle();/调用绘制魔术三角的函数/绘制魔术三角void CDiamondView:DrawTriangle()void CDiamondView:On

8、MenuCircle() IsCutting = FALSE; if(dlgCircle.DoModal()=IDOK) DrawRecursionCircle(dlgCircle.m_nDepth);/调用绘制递归圆的函数 /绘制递归圆/nDepth:递归深度void CDiamondView:DrawRecursionCircle(int nDepth) 5. 源代码/绘制金刚石图案/nVertex:顶点数,radius:圆半径,millisecond:笔画之间的延迟时间int CDiamondView:MaxX() CRect Rect; GetClientRect(&Rect); re

9、turn Rect.right;int CDiamondView:MaxY() CRect Rect; GetClientRect(&Rect); return Rect.bottom;void CDiamondView:DrawDiamond(int nVertex, int radius,int millisecond) InvalidateRgn(NULL); UpdateWindow(); Sleep(100); CDC *pDC=GetDC(); CRect rect; GetClientRect(&rect); CBrush br(RGB(0,0,0); pDC-FillRect(

10、&rect,&br); CPen newPen(PS_SOLID,1,RGB(255,0,0); CPen *OldPen=pDC-SelectObject(&newPen); double Thta = 2*PI/nVertex; double *x = new doublenVertex; double *y = new doublenVertex; for(int i=0;inVertex;i+) xi=radius*cos(i*Thta)+MaxX()/2; yi=radius*sin(i*Thta)+MaxY()/2; if(nVertex%2=0) for(int i=0;i=nV

11、ertex-2;i+) for(int j=i+1;jMoveTo(Round(xi),Round(yi); pDC-LineTo(Round(xj),Round(yj); Sleep(millisecond); else int j = 0; int k; for (int i = 0; i nVertex; i+) k = 0; while (k MoveTo(Round(x(j-k)%nVertex),Round(y(j-k)%nVertex); pDC-LineTo(Round(xj%nVertex),Round(yj%nVertex); Sleep(millisecond); pDC

12、-SelectObject(OldPen);/绘制魔术三角void CDiamondView:DrawTriangle() InvalidateRgn(NULL); UpdateWindow(); CDC *pDC = GetDC(); int colour3=RGB(255,0,0),RGB(0,0,255),RGB(0,255,0); for(int n=0;nSelectObject(&newBrush); pDC-FillRgn(&Rgn1,&newBrush); Sleep(100); pDC-SelectObject(oldBrush); newBrush.DeleteObject

13、(); newBrush.CreateSolidBrush(colour(n+1)%3); POINT vertex36 = 355,505,405,594,916,595,710,240,660,330,762,505; Rgn3.CreatePolygonRgn(vertex3, 6, WINDING); oldBrush = pDC-SelectObject(&newBrush); pDC-FillRgn(&Rgn3,&newBrush); Sleep(100); pDC-SelectObject(oldBrush); newBrush.DeleteObject(); pDC-Selec

14、tObject(oldBrush); newBrush.CreateSolidBrush(colour(n+2)%3); POINT vertex26 = 710,66,508,420,612,420,710,240,916,594,968,505; Rgn2.CreatePolygonRgn(vertex2, 6, WINDING); oldBrush = pDC-SelectObject(&newBrush); pDC-FillRgn(&Rgn2,&newBrush); Sleep(100); /绘制递归圆/nDepth:递归深度void CDiamondView:DrawRecursio

15、nCircle(int nDepth) InvalidateRgn(NULL); UpdateWindow(); double r=100; CDC *pDC = GetDC(); CPen newPen,*oldPen; newPen.CreatePen(PS_SOLID,1,RGB(255,0,0); oldPen = pDC-SelectObject(&newPen); CRect rect(Round(MaxX()/2-r),Round(MaxY()/2-r),Round(MaxX()/2+r),Round(MaxY()/2+r); pDC-Ellipse(&rect); int x0

16、=MaxX()/2; int y0=MaxY()/2; DrawRecursionCircle1(x0,y0,r,nDepth);void CDiamondView:DrawRecursionCircle1(int x,int y,double r,int nDepth) int x18,y18 ; double t=2*PI/8; CDC *pDC = GetDC(); CPen newPen,*oldPen; newPen.CreatePen(PS_SOLID,1,RGB(255,0,0); oldPen = pDC-SelectObject(&newPen); if(nDepth0) n

17、Depth-; for(int i=0;i8;i+) x1i=Round(x+2*r*cos(i*t); y1i=Round(y+2*r*sin(i*t); for(int i=0;iEllipse(&rect); Sleep(50); DrawRecursionCircle1(Round(x1i),Round(y1i),0.3*r,nDepth); 6. 程序运行结果图1 金刚石图案绘制运行结果图2 魔幻三角形绘制运行结果图3 递归圆绘制运行结果7. 总结用VC+ +绘制金刚石、三角形、递归圆,因为好久没有动手编写代码了,感觉很多都忘记了,虽然这次的程序并不难,框架都已建好,但是实际操作还是有一些问题,有些错误改了很多次都总是没有结果不过最终还是解决了。通过这次实验,我明白自身还有很多不足,希望以后会越做越好。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1