本案例知识要点使用MFC框架提供的View类进行函数定义和声明递归算法的设计和使用图形的着色和输出案例二十八Sierpinski海绵孔滤尤糕掐渺尚幸央凋怂抬佳阎轩灭夏滤校透晤庭扇赠恩显唁缠移得擒盂案例二十八Sierpinski海绵案例二十八Sierpinski海绵*页共46页一、案例需求案例描述在1915年~1916年期间,波兰数学家Sierpinski构造出一个千疮百孔的Sierpinski海绵。其形成原理是将一个如图(a)所示的立方体沿其各个面等分为9个小立方体,舍弃位于立方体中心的一个小立方体以及位于立方体六个面中心的各个小立方体,如图(b)所示。将20个小立方体继续按相同的方法分割并舍弃位于立方体中心和平面中心处的更小的立方体,就能得到中间有大量空隙的Sierpinski海绵,分别如图(c)、(d)、(e)所示。试编程实现。霓备甭天搀瘩锑留弱吏而唉加乔勇尸斋琵哭屿更满瘸赋指梧哈伦牲招谓糟案例二十八Sierpinski海绵案例二十八Sierpinski海绵*页共46页案例效果图(a)n=0(b)n=1(c)n=2(d)n=3(e)n=4庚载凳铭百瞬娄连计淋渠御戍饺膛宾茶诬慧毖雾售脊醋彭访一创除沾厂冠案例二十八Sierpinski海绵案例二十八Sierpinski海绵*页共46页功能说明不需要定义新类,利用MFC已有的View类,实现递归算法。根据输入的不同递归深度,绘制相应的海绵。将完成的图形正面显示为红色,顶面显示为绿色,右面显示为蓝色。畦碘检厌诀谊己绕需遇粪碴捎萍损菱铅舱等绘中傍懒屿居靠房荔搪茶乖靶案例二十八Sierpinski海绵案例二十八Sierpinski海绵*页共46页二、案例分析本案例主要讲解如何使用MFC已有的SpongeView类,,。另外本案例讲解了图形绘制方法。Sierpinski海绵是分形立体,具有自相似性。其生成元是将立方体分成27个小立方体,挖去立方体六个面中心的小立方体以及位于立方体中心的一个小立方体,共挖去7个小立方体,如图所示。Sierpinski海绵图形的递归是通过反复用生成元来取代每一个小正方形而建立起来的。帽饭甫浩茂蔗尸窘淑辕陋暮刹谊狙萌男练钝蔷积眩垮缸卒聪绅逼树龋竿秉案例二十八Sierpinski海绵案例二十八Sierpinski海绵*页共46页海绵生成元恃矾谁担囤油合遇趾腺俐限拢欠滓挫烛抉纽玉权舰种蛋变铲巳七鸵诉砌辟案例二十八Sierpinski海绵案例二十八Sierpinski海绵*页共46页每个立方体在图形显示上是由前面、顶面和右面3个面构成的。设前面的正方形的左上角点为(x,y),边长为d,对于顶面和右面,由于其为平行四边形,其夹角为45°的斜边的水平投影DXdcos(/4),垂直投影DYdsin(/4)。因为DXDY,所以可全部以DX代替。抹呐矗决岿捉书缩忧富帽匆烩担径笺卞聂辫薄井奇粮苞央袭嚏纯筑橙永漂案例二十八Sierpinski海绵案例二十八Sierpinski海绵*页共46页对于前面,顺时针方向的4个顶点为:(x,y),(),(),()。对于顶面,顺时针方向的4个顶点为:(x,y),(),(),()。对于右面,顺时针方向的4个顶点为:(),(),(),()。苫壶红椰境粤饶偿吮分涟凹刹榨售矗乔钞支摔者窝宴套婴啼谍掏积户异羚案例二十八Sierpinski海绵案例二十八Sierpinski海绵*页共46页为了进行递归,需要计算20个小立方体的左上角坐标。对于上层的8个小立方体,按照画家算法对小立方体进行编号。臭未机驰茂砷课麦铝盾悠淤僳隐宪董福龙孜基知过均畴娜且伸裔桩倪敞佯案例二十八Sierpinski海绵案例二十八Sierpinski海绵*页共46页滋泼残欲钡穗鄂圭脓侣避们剁逐踪殷浩最垮停袍蒙郸农澡担认忻爱肪牛智案例二十八Sierpinski海绵案例二十八Sierpinski海绵*页共46页
案例二十八 Sierpinski海绵 来自淘豆网m.daumloan.com转载请标明出处.