案例二十八 Sierpinski海绵.ppt
《案例二十八 Sierpinski海绵.ppt》由会员分享,可在线阅读,更多相关《案例二十八 Sierpinski海绵.ppt(46页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、目录目录退出退出目录目录本案例知识要点使用MFC框架提供的View类进行函数定义和声明递归算法的设计和使用图形的着色和输出案例二十八案例二十八 Sierpinski海绵海绵第页 共46页目录目录退出退出目录目录一、案例需求案例描述l在1915年1916年期间,波兰数学家Sierpinski构造出一个千疮百孔的Sierpinski海绵。其形成原理是将一个如图(a)所示的立方体沿其各个面等分为9个小立方体,舍弃位于立方体中心的一个小立方体以及位于立方体六个面中心的各个小立方体,如图(b)所示。将20个小立方体继续按相同的方法分割并舍弃位于立方体中心和平面中心处的更小的立方体,就能得到中间有大量空隙
2、的Sierpinski海绵,分别如图(c)、(d)、(e)所示。l试编程实现。第页 共46页目录目录退出退出目录目录案例效果图(a)n0(b)n1(c)n2(d)n3(e)n4第页 共46页目录目录退出退出目录目录功能说明l不需要定义新类,利用MFC已有的View类,实现递归算法。l根据输入的不同递归深度,绘制相应的海绵。l将完成的图形正面显示为红色,顶面显示为绿色,右面显示为蓝色。第页 共46页目录目录退出退出目录目录二、案例分析本案例主要讲解如何使用MFC已有的SpongeView类,在扩展名为.h的文件中进行函数和变量的声明,在.cpp文件中进行函数的定义。另外本案例讲解了图形绘制方法。
3、Sierpinski海绵是分形立体,具有自相似性。其生成元是将立方体分成27个小立方体,挖去立方体六个面中心的小立方体以及位于立方体中心的一个小立方体,共挖去7个小立方体,如图所示。Sierpinski海绵图形的递归是通过反复用生成元来取代每一个小正方形而建立起来的。第页 共46页目录目录退出退出目录目录海绵生成元 第页 共46页目录目录退出退出目录目录每个立方体在图形显示上是由前面、顶面和右面3个面构成的。设前面的正方形的左上角点为(x,y),边长为d,对于顶面和右面,由于其为平行四边形,其夹角为45的斜边的水平投影DXdcos(/4),垂直投影DYdsin(/4)。因为DXDY,所以可全部
4、以DX代替。第页 共46页目录目录退出退出目录目录对于前面,顺时针方向的4个顶点为:(x,y),(),(),()。对于顶面,顺时针方向的4个顶点为:(x,y),(),(),()。对于右面,顺时针方向的4个顶点为:(),(),(),()。第页 共46页目录目录退出退出目录目录为了进行递归,需要计算20个小立方体的左上角坐标。对于上层的8个小立方体,按照画家算法对小立方体进行编号。第页 共46页目录目录退出退出目录目录第页 共46页目录目录退出退出目录目录对中层的4个小立方体进行编号。第页 共46页目录目录退出退出目录目录对下层的8个小立方体进行编号。第页 共46页目录目录退出退出目录目录三、案例
5、设计 1SpongeView类的设计 (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);绘制立方体右面。第页 共46页目录目录退出退出目录目录l在文件视图的Source Files目录下找到SpongeView.h文件并双击打开,添加变量成员和成员函数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 案例二十八 Sierpinski海绵 案例 十八 Sierpinski 海绵
限制150内