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

📄 mandelbrottest.java

📁 java2核心技术卷二
💻 JAVA
字号:
/**
 * @version 1.10 1999-09-12
 * @author Cay Horstmann
 */

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

public class MandelbrotTest
{  public static void main(String[] args)
   {  JFrame frame = new MandelbrotFrame();
      frame.show();
   }
}

class MandelbrotFrame extends JFrame
{  public MandelbrotFrame()
   {  setTitle("MandelbrotTest");
      setSize(400, 400);
      addWindowListener(new WindowAdapter()
         {  public void windowClosing(WindowEvent e)
            {  System.exit(0);
            }
         } );

      Container contentPane = getContentPane();
      contentPane.add(new MandelbrotPanel(), "Center");
   }
}

class MandelbrotPanel extends JPanel
{  public void paintComponent(Graphics g)
   {  super.paintComponent(g);
      BufferedImage image = new BufferedImage(getWidth(),
         getHeight(), BufferedImage.TYPE_INT_ARGB);
      generate(image);
      g.drawImage(image, 0, 0, null);
   }

   public void generate(BufferedImage image)
   {  int width = image.getWidth();
      int height = image.getHeight();
      WritableRaster raster = image.getRaster();
      ColorModel model = image.getColorModel();

      Color fractalColor = Color.red;
      int argb = fractalColor.getRGB();
      Object colorData = model.getDataElements(argb, null);

      for (int i = 0; i < width; i++)
         for (int j = 0; j < height; j++)
         {  double a = XMIN + i * (XMAX - XMIN) / width;
            double b = YMIN + j * (YMAX - YMIN) / height;
            if (!escapesToInfinity(a, b))
               raster.setDataElements(i, j, colorData);
         }
   }

   private boolean escapesToInfinity(double a, double b)
   {  double x = 0.0;
      double y = 0.0;
      int iterations = 0;
      do
      {  double xnew = x * x - y * y + a;
         double ynew = 2 * x * y + b;
         x = xnew;
         y = ynew;
         iterations++;
         if (iterations == MAX_ITERATIONS) return false;
      }
      while (x <= 2 && y <= 2);
      return true;
   }

   private static final double XMIN = -2;
   private static final double XMAX = 2;
   private static final double YMIN = -2;
   private static final double YMAX = 2;
   private static final int MAX_ITERATIONS = 16;
}

⌨️ 快捷键说明

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