⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frame1.java

📁 java产生的一个分形图形
💻 JAVA
字号:
package mandelthread;

import java.awt.BorderLayout;
import java.awt.*;
import java.io.*;

import javax.swing.*;
import java.awt.event.*;

/**
 * <p>Title: </p>
 *
 * <p>Description: </p>
 *
 * <p>Copyright: Copyright (c) 2006</p>
 *
 * <p>Company: </p>
 *
 * @author not attributable
 * @version 1.0
 */
public class Frame1 extends JFrame {
    JPanel contentPane;
    BorderLayout borderLayout1 = new BorderLayout();

    public Frame1() {
        try {
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            jbInit();
        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }

    /**
     * Component initialization.
     *
     * @throws java.lang.Exception
     */
    private void jbInit() throws Exception {
        contentPane=(JPanel)getContentPane();
        contentPane.setLayout(borderLayout1);
        setSize(new Dimension(400,400));
        setTitle("分形图形");
        contentPane.setBackground(Color.BLUE);
        JMenuBar menuBar=new JMenuBar();
        JMenu menu=new JMenu("Menu");
        JMenuItem draw=new JMenuItem("Draw",'D');
        draw.addActionListener(new AbstractAction(){
            public void actionPerformed(ActionEvent e){
                canvas.draw();
            }
        });
        JMenuItem exit=new JMenuItem("Exit",'E');
        exit.addActionListener(new AbstractAction(){
            public void actionPerformed(ActionEvent e){
                System.exit(0);
            }
        });
        menu.add(draw);menu.add(exit);
        menuBar.add(menu);
        canvas=new MandelPanel();
        this.setJMenuBar(menuBar);
        contentPane.add(canvas,BorderLayout.CENTER);
        show();
    }
    private MandelPanel canvas;
}

class MandelPanel extends JPanel{
    public MandelPanel(){makeColors();}
    protected void paintComponent(Graphics g){
        super.paintComponent(g);
        setBackground(Color.BLUE);
    }
    public void draw(){new MandelThread1(this).start();}
    public Color[] getColors(){return colors;}
    private void makeColors(){
        int maxRGB=255,r=0,g=0,b=0;
        colors=new Color[MaxColors+1];
        for(int i=0;i<MaxColors;i++){
            colors[i]=new Color(r,g,b);
            r+=MaxColors;
            if(r>maxRGB){
                r=0;g+=MaxColors;
                if(g>maxRGB){
                    g=0;
                    b+=MaxColors;
                }
                if(b>maxRGB)
                    b=0;
            }
        }
        colors[MaxColors]=Color.white;
    }
    private static Color[] colors;
    private static final int MaxColors=25;
}

class MandelThread1 extends Thread{
    public MandelThread1(MandelPanel p){mp=p;}
    public void run(){
        drawMandel(mp.getGraphics());
    }
    public Thread getThread(){return this;}
    private void drawMandel(Graphics g){
        mp.repaint();
        double xstep,ystep,x,y,real,imag,spread;
        int i,j,iter,k=0;
        Complex c1=new Complex(),c2=new Complex();
        xstep=div/mp.getWidth();ystep=div/mp.getHeight();
        Color[] colors=mp.getColors();
        int MaxColors=colors.length-1;
        for(y=start,j=0;y<=limit;y+=ystep,j++){
            for(x=start,i=0;x<=limit;x+=xstep,i++){
                c1.real=x;c1.imag=y;
                c2.real=c2.imag=0.0;
                for(iter=0;iter<MaxColors;iter++){
                    real=c1.real+c2.real;
                    imag=c1.imag+c2.imag;
                    c2.real=real*real-imag*imag;
                    c2.imag=2*real*imag;
                    spread=c2.real*c2.real+c2.imag*c2.imag;
                    if(spread>MaxSpread)
                        break;
                }
                g.setColor(colors[iter]);
                g.fillRect(i,j,1,1);
                if(++k%4==0){
                    try{
                        sleep(1);
                    }catch(InterruptedException e){}
                    k=0;
                }
            }
        }
    }

    class Complex{
        double real;
        double imag;
    }
    private MandelPanel mp;
    private static final double MaxSpread=4.0;
    private static final double limit =1.0;
    private static final double start=-1.0;
    private static final double div=2.0;

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -