分形之美

                     美国杰出的物理学家( 两弹元勋 、现代广义相对论之父)、物理学思想家、物理学教育家惠勒( Wheeler )断言: “ 可以相信,明天谁不熟悉分形,谁就不能被认为是科学上的文化人。”可以看出分形强大的影响力,当然个人也比较喜欢分形,因为利用分形可以画出很多美丽的图形,利用分形我们可以描绘出 树叶的纹路、画出完整的一棵树、形状酷似病毒的图形,混沌 ( chaos )、孤立子( solitons )和分形 ( fractals )是非线性科学 ( nonlinear  science ) 中三个最重要的概念。

 

                     分形是其组成部分以某种方式与整体相似的形,亦即:如果一个图形其组成部分以某种方式与整体相似,则称该图形为分形。可以依靠递归实现。所谓递归就是函数自己调用自己

举例:

         谢尔宾斯基三角形

思想:观察谢尔宾斯基三角形,最基本就是在一个等边三角形中将三边的中点连接再画一个三角形,再在其分出的三角形中重复此步骤,构成递归。然而要完成基本图形(一个三角形被中点分为四个三角形)只需要已知两个点的坐标(x1,y1.x2.y2)就可以把其他点的坐标画出来(第三个顶点、中点)接着用递归(递归中要保证递归的边的一致性)。

以下是详细代码

import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class AListener implements ActionListener {
	private Graphics g;
  	int x1,y1,x2,y2,x3,y3;
	//int count=10;
	
	public AListener (Graphics g){
		this.g=g;
		}
	 public void actionPerformed(ActionEvent e){
		
		 draw(e);
	 }
	 public void draw(ActionEvent e){
		 x1=100;
		 y1=500;
		 x2=400;
		 y2=500;
		 drawDiGui(x1,y1,x2,y2,10);
		 
	 }
	 public void drawDiGui(int x1,int y1,int x2,int y2,int t){
		 t--;
		 if(t>0){
		    x3=(int)Math.abs(x1+x2)/2;
		    y3=(int)Math.abs(y2-Math.sqrt(3)*(x2-x1)/2);
		    g.drawLine(x1, y1, x2, y2);
		    g.drawLine(x1, y1, x3, y3);
		    g.drawLine(x2, y2, x3, y3);
		    
		     int x11=(x1+x2)/2;
			 int y11=(y1+y2)/2;
			 int x22=(x3+x2)/2;
			 int y22=(y3+y2)/2;
			 int x33=(x1+x3)/2;
			 int y33=(y1+y3)/2;
			 g.drawLine(x11, y11, x33, y33);
			 g.drawLine(x11, y11, x22, y22);
			 g.drawLine(x22, y22, x33, y33);
			 drawDiGui(x1,y1,x11,y11,t);
			drawDiGui(x11,y11,x2,y2,t);
			drawDiGui(x33,y33,x22,y22,t);
		}	 
		}
	  
}	   

 

import java.awt.FlowLayout;
import java.awt.Graphics;

import javax.swing.JButton;
import javax.swing.JFrame;

public class DrawingSan extends JFrame{
	/*
	 * 创建对象并调用初始化函数
	 */
	
	public static void main(String []  args){
		DrawingSan ds=new DrawingSan();
		ds.initUI();
	}
	/**
	 * 定义初始化函数
	 */
	public void initUI(){
		this.setSize(500,600);
		this.setTitle("三角分形");
		this.setDefaultCloseOperation(3);
		this.setLocationRelativeTo(null);
		this.setLayout(new FlowLayout());
		this.setResizable(false);
		this.setVisible(true);
	    JButton jbsanjiao=new JButton("三角");
		this.add(jbsanjiao);
		Graphics g=this.getGraphics();
		AListener a2=new AListener(g);
	    jbsanjiao.addActionListener(a2);
		
		
		
	}
	
    }

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值