- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[数学]案例二十八 Sierpinski海绵
案例二十八 Sierpinski海绵 本案例知识要点 使用MFC框架提供的View类进行函数定义和声明 递归算法的设计和使用 图形的着色和输出 一、案例需求 案例描述 在1915年~1916年期间,波兰数学家Sierpinski构造出一个千疮百孔的Sierpinski海绵。其形成原理是将一个如图(a)所示的立方体沿其各个面等分为9个小立方体,舍弃位于立方体中心的一个小立方体以及位于立方体六个面中心的各个小立方体,如图(b)所示。将20个小立方体继续按相同的方法分割并舍弃位于立方体中心和平面中心处的更小的立方体,就能得到中间有大量空隙的Sierpinski海绵,分别如图(c)、(d)、(e)所示。 试编程实现。 案例效果图 功能说明 不需要定义新类,利用MFC已有的View类,实现递归算法。 根据输入的不同递归深度,绘制相应的海绵。 将完成的图形正面显示为红色,顶面显示为绿色,右面显示为蓝色。 二、案例分析 本案例主要讲解如何使用MFC已有的SpongeView类,在扩展名为.h的文件中进行函数和变量的声明,在.cpp文件中进行函数的定义。另外本案例讲解了图形绘制方法。 Sierpinski海绵是分形立体,具有自相似性。其生成元是将立方体分成27个小立方体,挖去立方体六个面中心的小立方体以及位于立方体中心的一个小立方体,共挖去7个小立方体,如图所示。Sierpinski海绵图形的递归是通过反复用生成元来取代每一个小正方形而建立起来的。 海绵生成元 每个立方体在图形显示上是由前面、顶面和右面3个面构成的。设前面的正方形的左上角点为(x, y),边长为d,对于顶面和右面,由于其为平行四边形,其夹角为45°的斜边的水平投影DX?dcos(? /4),垂直投影DY?dsin(? /4)。因为DX?DY,所以可全部以DX代替。 对于前面,顺时针方向的4个顶点为:(x, y),( ),( ),( )。 对于顶面,顺时针方向的4个顶点为:(x, y),( ),( ),( )。 对于右面,顺时针方向的4个顶点为:( ),( ),( ),( )。 为了进行递归,需要计算20个小立方体的左上角坐标。 对于上层的8个小立方体,按照画家算法对小立方体进行编号。 对中层的4个小立方体进行编号。 对下层的8个小立方体进行编号。 三、案例设计 1.SpongeView类的设计 (1)数据成员 double x,y,d; 正方形的左上角点为(x,y),正方形边长为d。 int n; 递归深度。 (2)函数成员 void Cubicf(double x,double y,double d); 绘制立方体前面。 void Cubict(double x,double y,double d); 绘制立方体顶面。 void Cubicr(double x,double y,double d); 绘制立方体右面。 在文件视图的Source Files目录下找到SpongeView.h文件并双击打开,添加变量成员和成员函数的声明,如图所示。 在文件视图的Source Files目录下找到SpongeView.cpp文件并双击打开,添加成员函数的定义。 添加变量成员和成员函数的声明 2.对话框的设计 在资源视图Resource View中右击Dialog选项,选择Insert Dialog命令,在对话框内添加静态文本框Static Text和文本框Edit Box控件并修改属性,Edit控件的ID为IDC_EDIT1,对话框的设计结果如图所示。 对话框的设计结果 双击对话框,弹出Adding a class对话框,保持默认值添加一个新类Creat a new class,单击【OK】按钮。在弹出的对话框中填写对话框类名CInputDlg,单击【OK】按钮。在“查看”菜单下选择Class Wizard命令,单击Member Variable标签。修改成员变量的名称和类型。其中IDC_EDIT1的成员变量名为m_n,类型为int,代表递归深度,单击【确定】按钮退出。设计结果如图所示。 对话框类成员变量的设计结果 3.菜单设计 在资源视图Resource View中单击Menu目录,双击IDR_MAINFRAME选项,修改命令,设置菜单Sponge的ID为ID_MENUSponge。从“查看”菜单中打开
文档评论(0)