C++课件案例二十八Sierpinski海绵.ppt_第1页
C++课件案例二十八Sierpinski海绵.ppt_第2页
C++课件案例二十八Sierpinski海绵.ppt_第3页
C++课件案例二十八Sierpinski海绵.ppt_第4页
C++课件案例二十八Sierpinski海绵.ppt_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

第1页共46页 本案例知识要点使用MFC框架提供的View类进行函数定义和声明递归算法的设计和使用图形的着色和输出 案例二十八Sierpinski海绵 第2页共46页 一 案例需求 案例描述在1915年 1916年期间 波兰数学家Sierpinski构造出一个千疮百孔的Sierpinski海绵 其形成原理是将一个如图 a 所示的立方体沿其各个面等分为9个小立方体 舍弃位于立方体中心的一个小立方体以及位于立方体六个面中心的各个小立方体 如图 b 所示 将20个小立方体继续按相同的方法分割并舍弃位于立方体中心和平面中心处的更小的立方体 就能得到中间有大量空隙的Sierpinski海绵 分别如图 c d e 所示 试编程实现 第3页共46页 案例效果图 a n 0 b n 1 c n 2 d n 3 e n 4 第4页共46页 功能说明不需要定义新类 利用MFC已有的View类 实现递归算法 根据输入的不同递归深度 绘制相应的海绵 将完成的图形正面显示为红色 顶面显示为绿色 右面显示为蓝色 第5页共46页 二 案例分析 本案例主要讲解如何使用MFC已有的SpongeView类 在扩展名为 h的文件中进行函数和变量的声明 在 cpp文件中进行函数的定义 另外本案例讲解了图形绘制方法 Sierpinski海绵是分形立体 具有自相似性 其生成元是将立方体分成27个小立方体 挖去立方体六个面中心的小立方体以及位于立方体中心的一个小立方体 共挖去7个小立方体 如图所示 Sierpinski海绵图形的递归是通过反复用生成元来取代每一个小正方形而建立起来的 第6页共46页 海绵生成元 第7页共46页 每个立方体在图形显示上是由前面 顶面和右面3个面构成的 设前面的正方形的左上角点为 x y 边长为d 对于顶面和右面 由于其为平行四边形 其夹角为45 的斜边的水平投影DX dcos 4 垂直投影DY dsin 4 因为DX DY 所以可全部以DX代替 第8页共46页 对于前面 顺时针方向的4个顶点为 x y 对于顶面 顺时针方向的4个顶点为 x y 对于右面 顺时针方向的4个顶点为 第9页共46页 为了进行递归 需要计算20个小立方体的左上角坐标 对于上层的8个小立方体 按照画家算法对小立方体进行编号 第10页共46页 第11页共46页 对中层的4个小立方体进行编号 第12页共46页 对下层的8个小立方体进行编号 第13页共46页 三 案例设计 1 SpongeView类的设计 1 数据成员doublex y d 正方形的左上角点为 x y 正方形边长为d intn 递归深度 2 函数成员voidCubicf doublex doubley doubled 绘制立方体前面 voidCubict doublex doubley doubled 绘制立方体顶面 voidCubicr doublex doubley doubled 绘制立方体右面 第14页共46页 在文件视图的SourceFiles目录下找到SpongeView h文件并双击打开 添加变量成员和成员函数的声明 如图所示 在文件视图的SourceFiles目录下找到SpongeView cpp文件并双击打开 添加成员函数的定义 第15页共46页 添加变量成员和成员函数的声明 第16页共46页 2 对话框的设计在资源视图ResourceView中右击Dialog选项 选择InsertDialog命令 在对话框内添加静态文本框StaticText和文本框EditBox控件并修改属性 Edit控件的ID为IDC EDIT1 对话框的设计结果如图所示 第17页共46页 对话框的设计结果 第18页共46页 双击对话框 弹出Addingaclass对话框 保持默认值添加一个新类Creatanewclass 单击 OK 按钮 在弹出的对话框中填写对话框类名CInputDlg 单击 OK 按钮 在 查看 菜单下选择ClassWizard命令 单击MemberVariable标签 修改成员变量的名称和类型 其中IDC EDIT1的成员变量名为m n 类型为int 代表递归深度 单击 确定 按钮退出 设计结果如图所示 第19页共46页 对话框类成员变量的设计结果 第20页共46页 3 菜单设计在资源视图ResourceView中单击Menu目录 双击IDR MAINFRAME选项 修改命令 设置菜单Sponge的ID为ID MENUSponge 从 查看 菜单中打开类向导MFCClassWizard 在ObjectIDs列表框中选择ID MENUSponge选项 在Classname下拉列表框中选择CSpongeView选项 在Message列表框中选择COMMAND选项后 单击 AddFunction 按钮 弹出对话框 默认菜单成员函数的名称为OnMENUSponge 单击 OK 按钮 则在Memberfunctions列表框中添加了成员函数 该函数是CSpongeView类的成员函数 单击 EditCode 按钮可以对函数进行编辑 第21页共46页 菜单调用流程 第22页共46页 四 案例实现 第23页共46页 第24页共46页 第25页共46页 第26页共46页 第27页共46页 第28页共46页 第29页共46页 第30页共46页 第31页共46页 第32页共46页 第33页共46页 第34页共46页 第35页共46页 第36页共46页 第37页共46页 第38页共46页 第39页共46页 第40页共46页 第41页共46页 第42页共46页 第43页共46页 第44页共46页 五 案例总结与提高 案例总结Example2View cpp文件中定义的菜单成员函数OnMENUTax 的功能非常简单 只是进行Sponge 函数的调用 在Sponge 函数中 先绘制立方体前面 再绘制顶面和右面 并分别用不同的颜色进行填充 颜色填充是本例的难点 这里按照路径来填充 请认真体会以下语句 dc BeginPath dc Polygon right 4 dc EndPath dc FillPath 其中FillPath函数使用现有的多边形填充模式填充多边形内部 第45页共46页 案例提高绘制Sierpinski地毯 其生成规则为 取一正方形 将其每条边三等分 正方形被

温馨提示

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

评论

0/150

提交评论