首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

分形基础及范例(java)

2013-04-02 
分形基础及实例(java)在我们这个美丽的世界,哪里都能够看到分型的影子,小到花草树木的花纹图案,大到宇宙万

分形基础及实例(java)
在我们这个美丽的世界,哪里都能够看到分型的影子,小到花草树木的花纹图案,大到宇宙万物。从大到小看来,它们都满足同样的规律,也就是迭代,用计算机的语言来说,这就是递归的内涵所在。
首次接触分形,就发现了它的魅力真的很大,一个对你来说似乎毫无意义的公式,通过用计算机根据这个公式不断迭代画上几十万个点后,竟然形成了想也想不到的美丽图形,如下图









如何画一个雪花曲线呢?对于新手来说,的确十分难。但彻底理解了递归的概念后,加上一点数学知识以及足够的耐心是能够画出来的,下面给出源代码及注释。





/************************************************************/
主界面
package cn.test0313;

import java.awt.Graphics;

import javax.swing.JFrame;

import cn.test0320.XueHua;

///新建一个类继承了JFrame
public class XieEr  extends JFrame{
/**
* @兰天
*/
public static void main(String[] args) {
XieEr jf=new XieEr();
jf.init();
}
public int l=300,i=5;
private Graphics g;
public void init(){
this.setSize(800,700);
this.setTitle("雪花曲线");
this.setDefaultCloseOperation(3);
this.setLocationRelativeTo(null);
        //设置可见后获取画布
this.setVisible(true);
g=this.getGraphics();

}
//将画雪花曲线定义在重绘中
public void paint(Graphics g){
super.paint(g);
XueHua xh=new XueHua(g);
xh.init(l, i,100,200);
}

/**************************************************************/

//画雪花曲线的类
/****************************************************************/

package cn.test0313;

import java.awt.Graphics;

public class XueHua {

/**
* @兰天
*/
private int l,i;
//角度v
private Graphics g;
   //一个三的N次方的数组
   public int[] a=new int[]{1,3,9,27,81,243,729,2187};
   //构造函数,传入画板
   public XueHua(Graphics g){
   this.g=g;
   }
  
   public void init(int l,int i,int x,int y){
   this.l=l;
   this.i=i;
       //将雪花曲线的三角形的三边分别进行递归
   this.xuehua(x, y, 0, 1);
       this.xuehua(x+l, y, 2*Math.PI/3, 1);
       this.xuehua(x+l/2, y+l*Math.sin(Math.PI/3), -2*Math.PI/3, 1);
   }  
//将利用这个函数进行递归,x,y起始点坐标,z角度 ,n用来判断到递归底层画曲线的长度           
   public void xuehua(double x,double y,double z,int n){
   if (n<a[i]){
   int i;
           //第一次递归
   xuehua(x,y,z,3*n);
   //计算第二个点坐标
           double x2=x+l*Math.cos(z)/(3*n),y2=y+l*Math.sin(z)/(3*n);
           //改变角度
   z=z-Math.PI/3;
   xuehua(x2,y2,z,3*n);
          //计算第三个点坐标
   double x3=x2+l*Math.cos(z)/(3*n),y3=y2+l*Math.sin(z)/(3*n);
           //改变角度
   z=z+2*Math.PI/3;
   xuehua(x3,y3,z,3*n);
double x4=x3-l*Math.cos(Math.PI-z)/(3*n),y4=y3+l*Math.sin(z)/(3*n);
   z=z-Math.PI/3;
   xuehua(x4,y4,z,3*n);
   }else{
//若已经到了底层则画线
   g.drawLine((int)x, (int)y, (int)(x+l*Math.cos(z)/(n)), (int)(y+l*Math.sin(z)/(n)));
   }
   }

}


/*************************************************/

雪花曲线的代码就这么多,如果想更多地了解下分形,我们可以是着将每回转过的角度改变,看会发生什么样的事。。。也可以将界面优化。。。实现渐变等

热点排行