3番目のパーティライブラリを使用せずに、メモリパフォーマンスと消費に関してJava 11でフラクタル画像を最適に生成するアルゴリズムの例。この例では、Mandelbrotはフラクタルとして使用されますが、他のフラクタルセットにも同じアプローチを適用できます。

パブリッククラスのフラクタルゲネレーター{

  public static final int width = 800;
  public static final int height = 600;
  public static final int max_iterations = 100;
  public static final double Zoom = 150;

  public static void main（string [] args）{
    buffedimage image = new BuffereDimage（幅、高さ、bufferetedimage.type_int_rgb）;
    long starttime = system.currenttimmillis（）;
    GenerateFractal（画像、-2.5、1、-1、1）;
    long endtime = system.currenttimmillis（）;
    system.out.println（ "時間がかかった時間：" +（終了時間 -  startime） + "ms"）;
    SaveImage（Image、 "fractal.png"）;
  }

  public static void generateFractal（bufferedimage画像、double xmin、double xmax、double ymin、double ymax）{
    int [] color = new int [max_iterations];
    for（int i = 0; i <max_iterations; i ++）{
      colors [i] = color.hsbtorgb（i/256f、1、i/（i+8f））;
    }

    for（int y = 0; y <height; y ++）{
      for（int x = 0; x <width; x ++）{
        double zx = 0;
        double zy = 0;
        double cx = xmin +（x *（xmax -xmin） / width）;
        double cy = ymin +（y *（ymax -ymin） / height）;
        int iter = 0;
        while（zx * zx + zy * zy <4 && <max_iterations）{
          double tmp = zx * zx -zy * zy + cx;
          zy = 2.0 * zx * zy + cy;
          zx = tmp;
          iter ++;
        }
        if（iter == max_iterations）{
          image.setgb（x、y、0）;
        } それ以外 {
          image.setgb（x、y、colors [iter]）;
        }
      }
    }
  }

  public static void saveimage（bufferedimageイメージ、文字列filename）{
    file file = new file（filename）;
    試す {
      Imageio.write（image、 "png"、file）;
    } catch（ioException e）{
      e.printstacktrace（）;
    }
  }
}

この例では、効率的なデータ構造を使用して、フラクタル画像を表すために使用され、バイトの配列を使用して画像の各ピクセルを表すJava BuffedImageオブジェクトを使用します。また、事前に計算された色セットを使用して、画像の各ピクセルに色の値を割り当てます。

マンデルブロットアセンブリの計算は、複雑な平面の各ポイントに対して実行される反復関数で実行されます。最大の反復値は、すでに分岐しているポイントで不必要な計算を回避するために使用されます。処理は、システムで利用可能なスレッドを使用して並行して実行されます。

最後に、コードは、ループ内の一定の値の計算など、不必要な操作を排除し、アルゴリズムの複雑さを最小限に抑えることによって最適化されます。
Ejemplo de un algoritmo para generar imágenes fractales en Java 11 de manera óptima en cuanto a rendimiento y consumo de memoria, sin utilizar librerías de terceros. Este ejemplo utiliza el conjunto de Mandelbrot como fractal, pero el mismo enfoque se puede aplicar a otros conjuntos fractales.

public class FractalGenerator {

  public static final int WIDTH = 800;
  public static final int HEIGHT = 600;
  public static final int MAX_ITERATIONS = 100;
  public static final double ZOOM = 150;

  public static void main(String[] args) {
    BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
    long startTime = System.currentTimeMillis();
    generateFractal(image, -2.5, 1, -1, 1);
    long endTime = System.currentTimeMillis();
    System.out.println("Time taken: " + (endTime - startTime) + "ms");
    saveImage(image, "fractal.png");
  }

  public static void generateFractal(BufferedImage image, double xMin, double xMax, double yMin, double yMax) {
    int[] colors = new int[MAX_ITERATIONS];
    for (int i = 0; i < MAX_ITERATIONS; i++) {
      colors[i] = Color.HSBtoRGB(i/256f, 1, i/(i+8f));
    }

    for (int y = 0; y < HEIGHT; y++) {
      for (int x = 0; x < WIDTH; x++) {
        double zx = 0;
        double zy = 0;
        double cX = xMin + (x * (xMax - xMin) / WIDTH);
        double cY = yMin + (y * (yMax - yMin) / HEIGHT);
        int iter = 0;
        while (zx * zx + zy * zy < 4 && iter < MAX_ITERATIONS) {
          double tmp = zx * zx - zy * zy + cX;
          zy = 2.0 * zx * zy + cY;
          zx = tmp;
          iter++;
        }
        if (iter == MAX_ITERATIONS) {
          image.setRGB(x, y, 0);
        } else {
          image.setRGB(x, y, colors[iter]);
        }
      }
    }
  }

  public static void saveImage(BufferedImage image, String fileName) {
    File file = new File(fileName);
    try {
      ImageIO.write(image, "png", file);
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

En este ejemplo, se utiliza estructura de datos eficiente para representar la imagen fractal, con un objeto BufferedImage de Java que utiliza un array de bytes para representar cada píxel de la imagen. También, se utiliza un conjunto de colores pre-calculado para asignar un valor de color a cada píxel de la imagen.

El cálculo del valor del conjunto de Mandelbrot se realiza en una función iterativa, que se ejecuta para cada punto del plano complejo. Se utiliza un valor de iteración máximo para evitar cálculos innecesarios en puntos que ya han divergido. El procesamiento se realiza en paralelo utilizando los hilos disponibles en el sistema.

Por último, se optimiza el código eliminando operaciones innecesarias, como el cálculo de valores constantes dentro de los bucles, y reduciendo la complejidad algorítmica al mínimo.