读书人

java编撰谢冰尔斯基三角形

发布时间: 2013-08-01 15:23:18 作者: rapoo

java编写谢冰尔斯基三角形
自己编写的谢冰尔斯基三角形虽然不似别人般简单,但是能出自于自己的自己的脑袋和双手,感觉还是很不错的,O(∩_∩)O~
我的代码:
package drawingboard;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Triang extends JPanel{
private Graphics g;
private int x1,x2,x3,y1,y2,y3;

private int x11;
private int x22;
private int x33;
private int y11;
private int y22;
private int y33;
public static void main(String[] args) {
Triang t=new Triang();
t.initUI();
}

public void initUI(){
//实例化一个JFrame类的对象
JFrame jf=new JFrame("谢冰尔斯基三角形");
jf.setDefaultCloseOperation(3);//关闭程序并退出
jf.setLocation(200,20);//设置对象的位置
jf.setSize(new Dimension(760, 600));
jf.add(this,BorderLayout.CENTER);

jf.setVisible(true);
g=this.getGraphics();

}
//重绘操作,重写重绘方法
public void paint(Graphics g){
super.paint(g);//调用父类的重绘方法
x1=380;x2=50;x3=710;y1=30;y2=550;y3=550;
x11=(x1+x2)/2;x22=(x3+x2)/2;x33=(x1+x3)/2;
y11=(y1+y2)/2;y22=(y3+y2)/2;y33=(y1+y3)/2;
triang(g);
triang(g,x1,x2,x3,y1,y2,y3,x11,x22,x33,y11,y22,y33,7);

}
//画出最大的外围三角形
public void triang(Graphics g){
g.drawLine(x1, y1, x2, y2);
g.drawLine(x1, y1, x3, y3);
g.drawLine(x3, y3, x2, y2);
}
//递归方法
public void triang(Graphics g,int x1,int x2,int x3,int y1,int y2,int y3,
int x11,int x22,int x33,int y11,int y22,int y33,int t){
t--;
if(t==0){
return ;
}
//中间三角形
g.drawLine(x11, y11, x22, y22);
g.drawLine(x11, y11, x33, y33);
g.drawLine(x33, y33, x22, y22);
int xa1=(x1+x11)/2;
int xc1=(x1+x33)/2;
int xb1=(x11+x33)/2;
int ya1=(y1+y11)/2;
int yc1=(y1+y33)/2;
int yb1=(y11+y33)/2;
//上面三角形
g.drawLine(xa1, ya1, xb1, yb1);
g.drawLine(xb1, yb1, xc1, yc1);
g.drawLine(xa1, ya1, xc1, yc1);
int xa2=(x2+x22)/2;
int xb2=(x11+x22)/2;
int xc2=(x11+x2)/2;
int ya2=(y2+y22)/2;
int yb2=(y11+y22)/2;
int yc2=(y11+y2)/2;
//左边三角形
g.drawLine(xa2, ya2, xb2, yb2);
g.drawLine(xb2, yb2, xc2, yc2);
g.drawLine(xa2, ya2, xc2, yc2);
int xa3=(x3+x22)/2;
int xc3=(x22+x33)/2;
int xb3=(x33+x3)/2;
int ya3=(y3+y22)/2;
int yc3=(y22+y33)/2;
int yb3=(y33+y3)/2;
//右边三角形
g.drawLine(xa3, ya3, xb3, yb3);
g.drawLine(xb3, yb3, xc3, yc3);
g.drawLine(xa3, ya3, xc3, yc3);
//变量的顺序一定不能错(顺时针或逆时针)
triang(g,x1, x11, x33,y1,y11,y33,xa1,xb1,xc1,ya1,yb1,yc1,t);
triang(g,x2, x22, x11,y2,y22,y11,xa2,xb2,xc2,ya2,yb2,yc2,t);
triang(g,x22, x3, x33,y22,y3,y33,xa3,xb3,xc3,ya3,yb3,yc3,t);
}

}
别人的代码:
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);



}

}

读书人网 >编程

热点推荐