欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

分型的一些东西

程序员文章站 2022-07-07 11:29:58
...

之前,用分型写了一些东西.一直没有发表.分型中我觉得主要是用到的东西是递归这个知识点.简单谈一下自己对递归的理解,觉得就是两个方面.

1)自己定义的方法体

2)之后的画图中反复调用该方法即可.

关于分型自己也是初学并没有深入了解,好多东西也是一知半解.最后就发一些自己用分型画的图.

 

1.枫叶,不过还有一些bug

/**
 * 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);
	 }
		
  }
	
}

 

相关标签: java