首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java编撰谢冰尔斯基三角形

2013-08-01 
java编写谢冰尔斯基三角形自己编写的谢冰尔斯基三角形虽然不似别人般简单,但是能出自于自己的自己的脑袋和

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

热点排行