分型的一些东西
程序员文章站
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);
}
}
}
上一篇: Linux基础命令---tune2fs
下一篇: linux每日命令(14):less命令