C++课件案例二十八Sierpinski海绵.ppt

上传人:小飞机 文档编号:6154040 上传时间:2023-09-30 格式:PPT 页数:46 大小:274.50KB
返回 下载 相关 举报
C++课件案例二十八Sierpinski海绵.ppt_第1页
第1页 / 共46页
C++课件案例二十八Sierpinski海绵.ppt_第2页
第2页 / 共46页
C++课件案例二十八Sierpinski海绵.ppt_第3页
第3页 / 共46页
C++课件案例二十八Sierpinski海绵.ppt_第4页
第4页 / 共46页
C++课件案例二十八Sierpinski海绵.ppt_第5页
第5页 / 共46页
点击查看更多>>
资源描述

《C++课件案例二十八Sierpinski海绵.ppt》由会员分享,可在线阅读,更多相关《C++课件案例二十八Sierpinski海绵.ppt(46页珍藏版)》请在三一办公上搜索。

1、1页 共46页,本案例知识要点使用MFC框架提供的View类进行函数定义和声明递归算法的设计和使用图形的着色和输出,案例二十八 Sierpinski海绵,2页 共46页,一、案例需求,案例描述在1915年1916年期间,波兰数学家Sierpinski构造出一个千疮百孔的Sierpinski海绵。其形成原理是将一个如图(a)所示的立方体沿其各个面等分为9个小立方体,舍弃位于立方体中心的一个小立方体以及位于立方体六个面中心的各个小立方体,如图(b)所示。将20个小立方体继续按相同的方法分割并舍弃位于立方体中心和平面中心处的更小的立方体,就能得到中间有大量空隙的Sierpinski海绵,分别如图(c

2、)、(d)、(e)所示。试编程实现。,3页 共46页,案例效果图,(a)n0,(b)n1,(c)n2,(d)n3,(e)n4,4页 共46页,功能说明不需要定义新类,利用MFC已有的View类,实现递归算法。根据输入的不同递归深度,绘制相应的海绵。将完成的图形正面显示为红色,顶面显示为绿色,右面显示为蓝色。,5页 共46页,二、案例分析,本案例主要讲解如何使用MFC已有的SpongeView类,在扩展名为.h的文件中进行函数和变量的声明,在.cpp文件中进行函数的定义。另外本案例讲解了图形绘制方法。Sierpinski海绵是分形立体,具有自相似性。其生成元是将立方体分成27个小立方体,挖去立方

3、体六个面中心的小立方体以及位于立方体中心的一个小立方体,共挖去7个小立方体,如图所示。Sierpinski海绵图形的递归是通过反复用生成元来取代每一个小正方形而建立起来的。,6页 共46页,海绵生成元,7页 共46页,每个立方体在图形显示上是由前面、顶面和右面3个面构成的。设前面的正方形的左上角点为(x,y),边长为d,对于顶面和右面,由于其为平行四边形,其夹角为45的斜边的水平投影DXdcos(/4),垂直投影DYdsin(/4)。因为DXDY,所以可全部以DX代替。,8页 共46页,对于前面,顺时针方向的4个顶点为:(x,y),(),(),()。对于顶面,顺时针方向的4个顶点为:(x,y)

4、,(),(),()。对于右面,顺时针方向的4个顶点为:(),(),(),()。,9页 共46页,为了进行递归,需要计算20个小立方体的左上角坐标。对于上层的8个小立方体,按照画家算法对小立方体进行编号。,10页 共46页,11页 共46页,对中层的4个小立方体进行编号。,12页 共46页,对下层的8个小立方体进行编号。,13页 共46页,三、案例设计,1SpongeView类的设计(1)数据成员 double x,y,d;正方形的左上角点为(x,y),正方形边长为d。int n;递归深度。(2)函数成员 void Cubicf(double x,double y,double d);绘制立方体

5、前面。void Cubict(double x,double y,double d);绘制立方体顶面。void Cubicr(double x,double y,double d);绘制立方体右面。,14页 共46页,在文件视图的Source Files目录下找到SpongeView.h文件并双击打开,添加变量成员和成员函数的声明,如图所示。在文件视图的Source Files目录下找到SpongeView.cpp文件并双击打开,添加成员函数的定义。,15页 共46页,添加变量成员和成员函数的声明,16页 共46页,2对话框的设计在资源视图Resource View中右击Dialog选项,选择

6、Insert Dialog命令,在对话框内添加静态文本框Static Text和文本框Edit Box控件并修改属性,Edit控件的ID为IDC_EDIT1,对话框的设计结果如图所示。,17页 共46页,对话框的设计结果,18页 共46页,双击对话框,弹出Adding a class对话框,保持默认值添加一个新类Creat a new class,单击【OK】按钮。在弹出的对话框中填写对话框类名CInputDlg,单击【OK】按钮。在“查看”菜单下选择Class Wizard命令,单击Member Variable标签。修改成员变量的名称和类型。其中IDC_EDIT1的成员变量名为m_n,类型

7、为int,代表递归深度,单击【确定】按钮退出。设计结果如图所示。,19页 共46页,对话框类成员变量的设计结果,20页 共46页,3菜单设计在资源视图Resource View中单击Menu目录,双击IDR_MAINFRAME选项,修改命令,设置菜单Sponge的ID为ID_MENUSponge。从“查看”菜单中打开类向导MFC ClassWizard,在Object IDs列表框中选择ID_MENUSponge选项,在Class name下拉列表框中选择CSpongeView选项,在Message列表框中选择COMMAND选项后,单击【Add Function】按钮,弹出对话框,默认菜单成员

8、函数的名称为OnMENUSponge(),单击【OK】按钮,则在Member functions列表框中添加了成员函数,该函数是CSponge View类的成员函数,单击【Edit Code】按钮可以对函数进行编辑。,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页 共4

9、6页,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地毯。其生成规则为:取一正方形,将其每条边三等分,正方形被等分为9个面积相等的小正方形,舍弃其中央的一个正方形;将剩下的8个小正方形按上面同样的方法继续分割,并同样舍弃位于中间的那个小正方形,如此不断地分割与舍弃,就能得到中间有大量空隙的Sierpinski地毯。要求程序的运行结果如图所示。,46页 共46页,Sierpinski地毯,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号