我们已经看到了第一个节目叫 “DrawWorld” 我们推出了JAVA编程面向图形. 让我们改变这一基本程序生成一个基本的递归分形: 该 Sierpinski三角形.
(见 并产生一个递归的分形)
这是一个分形,是建立从一个三角形的两边都除以它的中点递归. 有了这些新的点, 和以往的, 新的三角形构造类似于前面的.
如果我们从一个三角形ABC,并获得其两侧的中点 (MNP), 递归将建立一个新的水平以下三个三角形: APN, PBM NMC.
Sierpinski三角形有 分形维豪斯多夫贝西科维奇的中 与分形维数一致 homotecia 等于: 1,58496… (该)
如果这些新的三角形细分为三个, 我们将得到一个新的递归图. 我们将有一个新的水平,我们可以控制的递归使用一个变量 (nivel_de_recursividad) 我们的计划.
我们已经定义了一个函数 “paintRecursivo” (我叫的方法 “油漆”) 在这一点上,我们的三角形基地, 递归. 该函数计算顶点的三角形, 描绘图,并调用本身三倍, 为每个子三角形.
在每次调用该函数的递归的价值降低, 这样,当它是零完成账面递归.
进口 java.applet.Applet的; 进口 java.awt.Graphics的; /** * @作者何塞·胡安·阿利亚加 */ 公众 类 MainApp 扩展 Applet的 { 一倍 XP1 = 300; 一倍 YP1 = 300; 一倍 XP2 = 10; 一倍 YP2 = 300; 一倍 sin60 =数学。黄大仙(3.14/3.); 诠释 nivel_de_recursividad = 6; 公众 MainApp() { } 公众 静止 无效 主(串[] 参数) { } 公共无效 油漆(图形克){ paintRecursivo(克,nivel_de_recursividad,XP1,YP1,XP2,YP2); } 私人无效 paintRecursivo(图形克, 诠释 我, 一倍 XP12, 一倍 yp12, 一倍 XP22, 一倍 yp22 ) { 一倍 DX =(XP22-XP12)/2.; 一倍 二=(yp22 yp12)/2.; 一倍 XP32 XP12 DX = 2 *值* sin60; 一倍 yp32=yp12 dy 2*dx*sin60; 一倍 DX1 =(XP22 XP12)/2.; 一倍 DY1 =(yp22 yp12)/2.; 一倍 DX2 =(XP32 XP22)/2.; 一倍 DY2 =(YP32 yp22)/2.; 一倍 DX3 =(XP12 XP32)/2.; 一倍 镝=(yp12 YP32)/2.; 如果(我<= 0){ g.drawLine((诠释)XP12,(诠释)yp12,(诠释)XP22,(诠释)yp22); g.drawLine((诠释)XP22,(诠释)yp22,(诠释)XP32,(诠释)YP32); g.drawLine((诠释)XP32,(诠释)YP32,(诠释)XP12,(诠释)yp12); } 其他{ paintRecursivo(克,I-1,XP12,yp12,DX1,DY1); paintRecursivo(克,I-1,DX1,DY1,XP22,yp22); paintRecursivo(克,的i-1,DX3,DY3,DX2,DY2); } } }
一定是 连接的 发表评论.