之前,用分型写了一些东西.一直没有发表.分型中我觉得主要是用到的东西是递归这个知识点.简单谈一下自己对递归的理解,觉得就是两个方面.
1)自己定义的方法体
2)之后的画图中反复调用该方法即可.
关于分型自己也是初学并没有深入了解,好多东西也是一知半解.最后就发一些自己用分型画的图.
?
1.枫叶,不过还有一些bug
class="java" name="code">/** * cgh20130716的包来管理MyTree类 */ package cgh20130716; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Graphics; import javax.swing.JButton; import javax.swing.JFrame; /** * 定义一个MyTree类继承自JFrame * @author Allen * */ public class MyTree extends JFrame { /** * 定义一个程序的入口主函数 * @param args */ public static void main(String[] args) { //创建一个对象并调用窗体的方法 MyTree mt = new MyTree(); mt.INtUI(); } //初始化一个窗体 public void INtUI() { /* * 调用窗体的方法 */ this.setTitle("枫叶"); this.setSize(900,700); this.setLocationRelativeTo(null); this.setLayout(new FlowLayout(FlowLayout.LEFT,2,3)); /* * 创建按钮对象 */ JButton jbu = new JButton("新的开始"); jbu.setPreferredSize(new Dimension(110,35)); this.add(jbu); //设置面板的颜色 this.getContentPane().setBackground(Color.BLACK); //显示窗体的可见性 this.setVisible(true); //窗体去的画布对象 Graphics g = this.getGraphics(); //实例化事件监听类对象 MyTreeL mt = new MyTreeL(g); //按钮添加监听器 jbu.addActionListener(mt); } } package cgh20130716; import java.awt.Color; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Random; /** * 定义一个MyTreeL实现接口 * @author Allen * */ public class MyTreeL implements ActionListener{ private Graphics g; public MyTreeL(Graphics g){ this.g = g; } private double x1=1,y1=1; int j=0; //调用监听器方法 public void actionPerformed(ActionEvent e){ String value = e.getActionCommand(); if(value.equals("新的开始")){ while(j<2000){ Random rand = new Random(); int i = rand.nextInt(400); if(i<100){ double x2,y2; x2 = 0.1400*x1+0.0100*y1-0.0800; y2 = 0*x1+0.5100*y1-1.3100; //迭代赋值 x1=x2; y1=y2; Color c = new Color(235,72,125); g.setColor(c); g.drawLine((int)(x1*80+400),750-(int)(y1*100+350),(int)(x1*80+400),750-(int)(y1*100+350)); } if(i>=100&&i<200){ double x2,y2; x2 = 0.4300*x1+0.5200*y1+1.4900; y2 = -0.4500*x1+0.500*y1-0.7500; //迭代赋值 x1=x2; y1=y2; g.drawLine((int)(x1*80+400),750-(int)(y1*100+350),(int)(x1*80+400),750-(int)(y1*100+350)); } if(i>=200&&i<300){ double x2,y2; x2 = 0.4500*x1-0.4900*y1-1.6200; y2 = 0.4700*x1+0.4700*y1-0.7400; //迭代赋值 x1=x2; y1=y2; g.drawLine((int)(x1*80+400),750-(int)(y1*100+350),(int)(x1*80+400),750-(int)(y1*100+350)); } if(i>=300&&i<400){ double x2,y2; x2 = 0.4900*x1-0*y1+0.0200; y2 = 0*x1+0.5100*y1+1.6200; //迭代赋值 x1=x2; y1=y2; Color c = new Color(225,173,29); g.setColor(c); g.drawLine((int)(x1*80+400),750-(int)(y1*100+350),(int)(x1*80+400),750-(int)(y1*100+350)); } } } } } // //定义一个方法 // public void drawT(){}
?
2.谢宾斯基地毯
/** * 定义一个cgh07092013的包来管理Square2类 */ package cgh07092013; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; /** * 定义一个Square2类继承自JFrame * @author Allen * */ public class Square2 extends JFrame { /** * 定义一个程序的入口主函数 * @param args */ public static void main(String[] args) { //实例化一个对象并调用窗体初始化的方法 Square2 sq = new Square2(); sq.INtUI(); } //初始化一个窗体对象 public void INtUI() { /* * 调用窗体的方法 */ this.setTitle("循规蹈矩的方形"); this.setSize(700,700); this.setLocationRelativeTo(null); this.setLayout(new FlowLayout(FlowLayout.LEFT,2,3)); /* * 创建按钮对象 */ JButton jbu = new JButton("地毯"); jbu.setPreferredSize(new Dimension(90,40)); this.add(jbu); //显示窗体的可见性 this.setVisible(true); //从窗体上去的画布 final Graphics g = this.getGraphics(); //创建一个监听器 ActionListener action = new ActionListener(){ //监听器方法 public void actionPerformed(ActionEvent e) { //初始化一个画正方形的方法 DrawS(g,100,100,500,500,5); } }; //给按钮添加监听器 jbu.addActionListener(action); } //坐标属性 private int x1,y1; private int w,h; //定义一个画方形的方法 public void DrawS(Graphics g,int x1,int y1,int w,int h,int count){ //判断递归循环 if(count==0){ return; }else{ //画一个填充方形 g.fillRect(x1+w/3,y1+h/3,w/3,h/3); //递归调用自身方法 DrawS(g,x1,y1,w/3,h/3,count-1); DrawS(g,x1+w/3,y1,w/3,h/3,count-1); DrawS(g,x1+2*w/3,y1,w/3,h/3,count-1); DrawS(g,x1,y1+h/3,w/3,h/3,count-1); DrawS(g,x1+2*w/3,y1+h/3,w/3,h/3,count-1); DrawS(g,x1,y1+2*h/3,w/3,h/3,count-1); DrawS(g,x1+w/3,y1+2*h/3,w/3,h/3,count-1); DrawS(g,x1+2*w/3,y1+2*h/3,w/3,h/3,count-1); } } }
?